为测试创建存储
userstorage的Python项目详细描述
用户存储
用于设置测试存储的帮助程序。
概述
有些测试需要的不仅仅是本地文件上的临时目录 系统。一个例子是测试4K扇区大小的块设备,或者 在这种块设备上测试文件系统。
您可以使用循环设备创建存储,并在测试设备中安装, 但是创建设备和挂载需要根目录。你真的想跑吗 所有的测试都是根的,当被测试的代码不应该作为根运行时?
userstorage工具通过为测试创建存储来解决这个问题 在运行测试并使存储可用于 当前用户。创建存储后,可以运行测试 就像你自己直接从你的编辑那里。
要求
在Fedora/CentOS上,您需要安装这些软件包:
yum install e2fsprogs sudo util-linux xfsprogs
有些软件包通常安装在您的计算机上,但您可能需要 将它们添加到CI环境或容器。
安装
使用pip:
python3 -m pip install --user userstorage
如果需要在没有python3的分发版上运行,请使用python2。
创建配置文件
userstorage工具基于配置文件创建存储 你必须提供。
用户存储工具使用配置模块来 提供存储空间,并通过测试使用存储空间。
配置模块通常通过导入所需的 后端:
from userstorage import File
配置模块必须定义这些名称:
# Where storage is provisioned.
BASE_DIR = "/path/to/my/storage"
# Storage configurations needed by the tests.
BACKENDS = {}
见example_config.py 例如,此项目的测试使用的配置。
创建存储
要创建example_config.py中描述的存储,请运行:
userstorage create example_config.py
在创建开发环境时可以运行一次,并且必须 重新启动主机后再次运行。
如果要删除存储,请运行:
userstorage delete example_config.py
正常情况下无需删除存储器。回路装置是 由稀疏文件备份,不消耗太多资源。
在测试中消耗存储空间
请参阅test/consume_test.py,例如测试模块使用存储 由userstorage工具设置,以及示例配置py模块。
请注意,某些系统上可能无法使用某些存储。你的测试 可以检查存储是否可用,并跳过或将测试标记为xFail 如果需要的话。
确保测试隔离
对所有测试重用相同的存储会引入旧测试的问题 数据破坏了其他测试,或导致测试在应该时通过 失败。
为了避免这个问题,您应该在 在测试中使用存储,并在运行测试后删除()。 这样可以确保其他测试的旧数据不会被此 测试。
它是怎么工作的?
用户存储工具在基本目录中创建此目录布局 在配置模块中定义:
$ tree /var/tmp/example-storage/
/var/tmp/example-storage/
├── block-4k-backing
├── block-4k-loop -> /dev/loop2
├── block-512-backing
├── block-512-loop -> /dev/loop3
├── file-4k-backing
├── file-4k-loop -> /dev/loop4
├── file-4k-mount
│ ├── file
│ └── lost+found [error opening dir]
├── file-512-backing
├── file-512-loop -> /dev/loop5
└── file-512-mount
├── file
└── lost+found [error opening dir]
符号链接(例如file-4k-loop)链接到创建的循环设备 通过工具(/dev/loop4),用于以后删除存储。
用于测试的实际文件是在装入的 文件系统(/var/tmp/example storage/file-4k-mount/file)。
使用用户存储的项目
- sanlock-使用此工具的早期版本
- VDSM-使用此工具的最新版本
(请在此处添加您的项目)
贡献
如果你发现一个错误,请打开一个问题。
如果您有改进此工具的想法,请向 讨论这个想法。
对于微不足道的更改,请发送一个拉取请求。
运行测试
要运行测试,需要安装tox。你可以用你体内的毒素 分发(python2 tox或python3 tox on fedora),或使用 皮普。
在运行测试之前,请创建示例存储:
python3 -m userstorage create example_config.py
运行测试:
tox
如果要更改存储布局,最好删除示例存储:
python3 -m userstorage delete example_config.py