注意
本文档适用于 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. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.