注意

本文档适用于 Ceph 开发版本。

测试 - Windows

自从太平洋版本以来,Ceph 客户端工具和库可以在 Windows 上原生使用。这使得 Windows 节点无需额外的层(如 iSCSI 网关或 SMB 共享)即可使用 Ceph。

大量的单元测试和集成测试被移植过来,以确保这些组件在 Windows 上继续正常运行。

Windows 持续集成作业

The Windows 持续集成作业对每个 GitHub 拉取请求执行以下步骤:

  • 在 Linux 虚拟机中启动服务器端(Linux)Ceph 二进制文件并交叉编译 Windows(客户端)二进制文件。

  • 重新创建 Linux 虚拟机并启动 Ceph vstart 集群

  • 启动 Windows 虚拟机并在那里运行 Ceph 测试

一个小的 PowerShell 框架并行化测试,聚合结果

控制台输出可能包含编译错误以及失败测试的名称。要获取失败测试的控制台输出以及 Ceph 和操作系统日志,请检查 Jenkins “状态”页面中的构建工件。

../../../_images/windows_ci_status_page.png

Windows 持续集成工件可以作为 zip 存档下载或在浏览器中查看。点击“工件”按钮查看工件文件夹的内容。

../../../_images/windows_ci_artifacts.png

工件内容:

  • client/- Ceph 客户端日志(Windows)
    • eventlog/- Windows 系统日志

    • logs/- Ceph 日志

    • -windows.conf- Ceph 配置文件

  • cluster/- Ceph 服务器端日志(Linux)
    • ceph_logs/

    • journal

  • test_results/
    • out/- 按测试可执行文件分组的原始和 xml 测试输出

    • test_results.html- 聚合的测试报告(html)

    • test_results.txt- 聚合的测试报告(纯文本)

我们使用的是subunit格式和相关工具来聚合测试结果,这在并行运行大量测试时特别方便。

聚合的测试报告提供了失败测试的概览。转到文件末尾查看实际错误:

{0} unittest_mempool.mempool.bufferlist_reassign [0.000000s] ... ok
{0} unittest_mempool.mempool.bufferlist_c_str [0.006000s] ... ok
{0} unittest_mempool.mempool.btree_map_test [0.000000s] ... ok
{0} ceph_test_dokan.DokanTests.test_mount [9.203000s] ... FAILED

Captured details:
~~~~~~~~~~~~~~~~~
    b'/home/ubuntu/ceph/src/test/dokan/dokan.cc:136'
    b'Expected equality of these values:'
    b'  wait_for_mount(mountpoint)'
    b'    Which is: -138'
    b'  0'
    b''
    b'/home/ubuntu/ceph/src/test/dokan/dokan.cc:208'
    b'Expected equality of these values:'
    b'  ret'
    b'    Which is: "ceph-dokan: exit status: -22"'
    b'  ""'
    b'Failed unmapping: Y:\\'
{0} ceph_test_dokan.DokanTests.test_mount_read_only [9.140000s] ... FAILED

html 报告方便地按测试套件(测试二进制文件)对测试结果进行分组。出于安全原因,它默认情况下不会渲染,但可以下载并在本地查看:

../../../_images/windows_ci_html_report.png

超时和缺失的测试结果通常表明进程崩溃。请注意,在执行测试之前和之后,控制台上会打印出 ceph 状态,这有助于识别崩溃的服务。

您还可以检查服务日志(客户端和服务器端)。此外,请注意,在 Windows 进程崩溃的情况下,Windows “应用程序”事件日志将包含条目。

常见问题

  1. 为什么我的 PR 中只有 Windows 持续集成作业失败?

Ceph 集成测试通常通过 Teuthology 在 Ceph 实验室基础设施上执行。这些测试由 Ceph QA 团队按需触发,而不是为每个提交的拉取请求自动运行。

由于 Windows 持续集成作业仅关注客户端 Ceph 组件,因此它可以及时地为每个 GitHub 拉取请求运行各种集成测试。换句话说,它运行各种 librados、librbd 和 libcephfs 测试,而其他检查(如“make check”)则不会运行。

因此,Windows 持续集成经常捕获其他检查遗漏的回归,否则这些回归只能通过 Teuthology 发现。通常情况下,这些回归并非平台特定,也会影响 Linux。

在 Windows 持续集成失败的情况下,我们强烈建议按照上述方法检查测试结果。

请注意,Windows 构建脚本可能使用不同的编译标志-D传递给 CMake 的选项。例如,它默认为Release模式Debug模式。同时,它使用不同的工具链mingw-llvm) 和一组独立的依赖项,如有需要,请确保更新版本。

  1. 为什么 Windows 持续集成作业是强制性的?

测试作业最初是可选的,结果经常引入回归。

经过一段时间,Windows 支持已经成熟到足以将此持续集成作业设为强制性。这大大减少了处理回归所需的工作量,并确保 Ceph 用户能够继续获得 Windows 支持。

如前所述,另一个巨大优势是它运行集成测试,可以快速捕获通常影响 Linux 构建的回归。这使得开发人员无需等待完整的 Teuthology 结果。

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.