Skip to content

Commit 0317a55

Browse files
authored
Create libvirt-test.nd(draft)
1 parent 7dcfa3c commit 0317a55

File tree

1 file changed

+129
-0
lines changed

1 file changed

+129
-0
lines changed

posts/libvirt-test.nd(draft)

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
测试 (Testing)
2+
1. 单元测试 (Unit tests)
3+
作用与目的:
4+
5+
单元测试是源代码中自带的一套测试套件,主要用于测试 libvirt 的核心、低级功能。
6+
7+
核心测试内容包括:XML 解析器/格式化程序、QEMU 命令行生成器、QEMU 能力探测 等。
8+
9+
要求与运行:
10+
11+
强制性要求: 开发者在向上游(libvirt 主仓库)提交任何代码补丁之前,必须运行并通过所有单元测试。这是代码被接受的前提条件。
12+
13+
运行命令: 在源代码目录下,可以通过以下命令运行测试套件:
14+
15+
Bash
16+
17+
$ ninja test
18+
2. 容器构建 (Container builds)
19+
作用与目的:
20+
21+
严格来说,容器构建并非传统意义上的“测试”,但它提供了一种在预定义、广泛可用的环境中构建 libvirt 的方法。
22+
23+
它的价值在于能够扩大代码覆盖范围,确保代码在不同的 发行版 (distros)、架构 (architectures)、工具链版本 (toolchain flavors) 和库版本 (library versions) 下都能干净地编译和运行。
24+
25+
因此,它是接受上游贡献时的一个非常有价值的标记 (marker)。
26+
27+
推荐做法:
28+
29+
开发者被推荐在各种容器中针对其修改运行 libvirt 构建,以确保在提交补丁之前一切运行正常。
30+
31+
注册表 (Registry)
32+
libvirt 项目的容器镜像托管在 GitLab 容器注册表 (registry.gitlab.com/libvirt/libvirt)。
33+
34+
使用该注册表可以自动拉取预构建的层,从而避免了在本地使用 ci/containers/ 中的 Dockerfile 从头构建所有容器。
35+
36+
使用 GitLab CI 运行容器构建
37+
只要 GitLab 账户有可用的 CI 分钟数,在你 fork (分叉) 的仓库的每个分支推送时,流水线(pipelines)都会自动运行。
38+
39+
在本地运行容器作业 (Running container jobs locally)
40+
配置来源: GitLab CI 配置文件是上游流水线执行各种作业规范的唯一真相来源 (only source of truth)。
41+
42+
辅助脚本: 所有的 Bash 脚本都被提取到 ci/jobs.sh 中的独立 Shell 函数中。
43+
44+
本地执行工具: ci/helper 脚本可以拉取、构建和测试(如果适用)当前本地分支上的更改。
45+
46+
它支持 Docker 和 Podman 两种容器运行时,并会自动选择系统中已配置的运行时。
47+
48+
Podman 先决条件
49+
推荐原因: 推荐使用 Podman,因为它采用无守护进程 (daemonless) 架构,并且默认以 无根 (rootless) 方式执行容器,安全性更高。
50+
51+
安装和验证:
52+
53+
Bash
54+
55+
$ sudo dnf install -y podman
56+
$ podman ps # 验证系统是否就绪(应打印空表)
57+
Docker 先决条件
58+
安装和启动: 需要安装 Docker 并启动 Docker 服务。
59+
60+
Bash
61+
62+
$ sudo dnf install -y docker
63+
$ sudo systemctl start docker
64+
$ sudo docker ps # 验证系统是否就绪(应打印空表)
65+
权限设置(安全警告): 为了避免使用 sudo,可以添加当前用户到 docker 组。
66+
67+
Bash
68+
69+
$ sudo groupadd docker
70+
$ sudo usermod $USER -a -G docker
71+
$ sudo chown :docker /var/run/docker.sock
72+
注意: 任何上述配置都可能允许用户利用 Docker 绑定挂载或其他特权操作来攻击整个宿主机,因此只应在开发机器上执行。
73+
74+
本地执行容器构建示例 (Examples)
75+
所有示例都使用 ci/helper 脚本:
76+
77+
列出可用镜像:
78+
79+
Bash
80+
81+
$ ./helper list-images
82+
运行 GitLab 上的 website 作业,针对 debian-10 镜像:
83+
84+
Bash
85+
86+
$ ci/helper run --job website debian-10
87+
运行 rpmbuild 作业,针对 fedora-38 镜像:
88+
89+
Bash
90+
91+
$ ci/helper run --job rpmbuild fedora-38
92+
使用自定义注册表的镜像运行 build 作业:
93+
94+
Bash
95+
96+
$ ci/helper run --job build --image-prefix registry.gitlab.com/<user>/libvirt/ci- alpine-edge
97+
进入交互式 shell 进行调试:
98+
99+
Bash
100+
101+
$ ci/helper run --job shell alpine-edge
102+
3. 集成测试 (Integration tests)
103+
作用与目的:
104+
105+
集成测试,也称为功能测试 (functional tests),用于编写和运行测试 libvirt 功能的测试。
106+
107+
TCK 是目前在上游 CI 中运行的主要集成测试框架。
108+
109+
可用的功能测试框架:
110+
111+
TCK 测试套件 (TCK test suite):
112+
113+
推荐框架: 这是目前推荐用于编写上游功能测试的框架。
114+
115+
实现语言: 使用 libvirt 的 Perl 绑定 实现。
116+
117+
仓库地址: 可以克隆 TCK git repo <https://gitlab.com/libvirt/libvirt-tck>__ 获取。
118+
119+
Avocado VT:
120+
121+
另一个功能测试框架,使用 Avocado 测试框架。
122+
123+
尽管是用 Python 编写的,但绝大多数测试是通过命令行客户端 virsh 来操作 libvirt。
124+
125+
libvirt-test-API:
126+
127+
也是一个功能测试套件,使用 libvirt 的 Python 绑定 实现。
128+
129+
不推荐: 这个框架是最不推荐的,因为它几乎无人维护,未来可能会被 TCK 完全弃用。

0 commit comments

Comments
 (0)