注意

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

运行单元测试

如何在本地运行 s3-tests

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

以下说明适用于 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 Manager 代码使用 vstart_runner.py 进行测试。

运行你的第一个测试

可以使用 vstart_runner.py 在本地计算机上执行 Ceph 存储库中的 Python 测试。为此,你需要安装 teuthology

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

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

如果你想在自定义虚拟环境中安装 teuthology,也可以通过 pip 安装 teuthology,克隆 teuthology 存储库使用 git

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

如果由于某种不可预见的原因(例如 boostrap 脚本由于错误而无法工作,或者你暂时无法下载 teuthology)上述方法不起作用,则可以从计算机上已有的 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

要运行特定测试,例如 qa/tasks/cephfs/test_client_recovery 中的 TestClientRecovery 中的 test_reconnect_timeout,你可以执行:

$ 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)

注意

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

注意

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

注意

内核客户端上的故障可能会导致主机崩溃,因此建议在虚拟机中使用此功能。

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 提供运行带或不带 admin socket 的 Ceph 集群命令的方法,LocalCephCluster 提供设置或清除 ceph.conf 的方法。

注意

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

注意

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

注意

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

使用 vstart_enviroment.sh 运行 Workunits

可以通过在本地从源代码构建 Ceph、启动 vstart 集群并对其运行任何套件来测试代码。与 S3-Tests 类似,可以通过配置环境来运行其他 workunits。

设置环境

配置你的环境

$ . ./build/vstart_enviroment.sh

运行测试

要运行 workunit(例如 mon/osd.sh),请执行以下操作:

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

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入