注意
本文档适用于 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