注意

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

运行单元测试

如何在本地运行 s3-tests

RGW 代码可以通过从源代码本地构建 Ceph、启动 vstart 集群,并对它运行“s3-tests”套件来进行测试。

以下说明适用于 jewel 及更高版本。

第 1 步 - 构建 Ceph

参考构建Ceph.

在构建过程中,您可以单独执行第 2 步。

第 2 步 - vstart

当构建完成时,仍然在您构建 Ceph 的 git 克隆的顶层目录中,请执行以下操作,对于 cmake 构建:

cd build/
RGW=1 ../src/vstart.sh -n

这将在启动 vstart 集群时产生大量输出。在末尾,您应该看到类似以下的消息:

started.  stop.sh to stop.  see out/* (e.g. 'tail -f out/????') for debug output.

这表示集群正在运行。

第 3 步 - 运行 s3-tests

要运行 s3tests 套件,请执行以下操作:

$ ../qa/workunits/rgw/run-s3tests.sh

使用 vstart_runner.py 运行测试

CephFS 和 Ceph 管理器代码是使用vstart_runner.py 在您的本地计算机上执行.

运行你的第一个测试

Ceph 仓库中的 Python 测试可以使用vstart_runner.py 在您的本地计算机上执行. 要做到这一点,您需要sepia安装:

$ git clone https://github.com/ceph/teuthology
$ cd teuthology
$ ./bootstrap install

这将在 teuthology 仓库的根目录中创建一个名为virtualenv的虚拟环境,并在其中安装 teuthology。

您也可以通过pip如果您希望在自定义虚拟环境中安装它,请使用sepia克隆仓库使用git:

$ virtualenv --python=python3 venv
$ source venv/bin/activate
$ pip install 'setuptools >= 12'
$ pip install teuthology[test]@git+https://github.com/ceph/teuthology
$ deactivate

如果由于某种未预料到的原因上述方法都不起作用(也许 bootstrap 脚本由于 bug 无法工作或您目前无法下载 tethology),则可以从您机器上已有的 teuthology 仓库副本手动安装 teuthology:

$ cd teuthology
$ virtualenv -p python3 venv
$ source venv/bin/activate
$ pip install -r requirements.txt
$ pip install .
$ deactivate

上述步骤在虚拟环境中安装了 teuthology。在本地运行测试之前,请从源代码成功构建 Ceph(参考构建Ceph)并执行:

$ cd build
$ ../src/vstart.sh -n -d -l
$ source ~/path/to/teuthology/venv/bin/activate

要运行特定的测试,例如test_reconnect_timeoutfromTestClientRecovery in qa/tasks/cephfs/test_client_recovery,您可以:

$ python ../qa/tasks/vstart_runner.py tasks.cephfs.test_client_recovery.TestClientRecovery.test_reconnect_timeout

上述命令运行 vstart_runner.py 并将待执行的测试作为参数传递给 vstart_runner.py。以类似的方式,您也可以按以下方式运行测试组:

$ # run all tests in class TestClientRecovery
$ python ../qa/tasks/vstart_runner.py tasks.cephfs.test_client_recovery.TestClientRecovery
$ # run  all tests in test_client_recovery.py
$ python ../qa/tasks/vstart_runner.py tasks.cephfs.test_client_recovery

根据传递的参数,vstart_runner.py 收集测试并执行,就像执行单个测试一样。

vstart_runner.py 可以接受以下选项 -

--clear-old-log

在运行测试之前删除旧日志文件

--create

在运行测试之前创建 Ceph 集群

--create-cluster-only

创建集群并退出;稍后可以发出测试

--interactive

当测试失败时,会掉入一个 Python shell

--log-ps-output

记录 ps 输出;在调试时可能有用

--teardown

在测试(组)运行完成后拆解 Ceph 集群

--kclient

使用内核 cephfs 客户端而不是 FUSE

--brxnet=<net/mask>

为挂载客户端的网络命名空间容器指定一个新的 net/mask(默认:192.168.0.0/16)

Note

如果使用 FUSE 客户端,请确保系统上安装并启用了 fuse 软件包,并将user_allow_other添加到/etc/fuse.conf.

Note

如果使用内核客户端,用户必须具有使用无密码 sudo 访问运行命令的权限。

Note

内核客户端的失败可能会崩溃主机,因此建议在虚拟机中使用此功能。

vstart_runner.py 的内部工作原理 -

vstart_runner.py 主要做三件事 -

  • 收集和运行测试

    vstart_runner.py 设置/拆解集群并收集和运行测试。这是通过方法scan_tests(), load_tests()exec_test()实现的。这是所有 vstart_runner.py 接受的选项以及其他功能(如日志记录和将跟踪信息复制到日志底部)的实现位置。

  • 提供一个接口来发出和测试 shell 命令

    测试假定集群存在于远程机器上。vstart_runner.py 提供一个接口来使用本地机器中存在的集群运行相同的测试。这是通过类LocalRemote实现的。类LocalRemoteProcess可以管理从LocalRemote执行命令的过程,类LocalDaemon提供一个接口来处理 Ceph 守护进程,类LocalFuseMount可以创建和处理 FUSE 挂载。

  • 提供一个接口来操作 Ceph 集群

    LocalCephManager提供方法来使用和不需要管理员套接字运行 Ceph 集群命令和LocalCephCluster提供方法来设置或清除ceph.conf.

Note

vstart_runner.py 无条件地从命令参数中删除“adjust-ulimits”和“ceph-coverage”,因为当在开发人员的机器上运行测试时它们不适用。

Note

在命令“passwd”和“chown”的情况下,“omit_sudo”会无条件地重置为 False。

Note

<ceph-repo-root>/build/bin/中检查以第一个参数命名的二进制文件是否存在。如果存在,则用二进制文件路径替换第一个参数。

使用 vstart_enviroment.sh 运行工作单元

通过从源代码本地构建 Ceph、启动 vstart 集群,并对它运行任何套件来测试代码。

设置环境

配置您的环境:

$ . ./build/vstart_enviroment.sh

运行测试

要运行工作单元(例如mon/osd.sh)请执行以下操作:

$ ./qa/workunits/mon/osd.sh

由 Ceph 基金会带给您

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