测试

单元测试

单元测试使用 Go 编写,可以用以下命令执行:

go test -v ./...

单元测试不执行实际的虚拟机。

集成测试

集成测试涉及虚拟机的实际执行。

集成测试使用 BATS (Bash Automated Testing System) 编写。

运行以下命令以运行 BATS 测试:

git submodule update --init --recursive
make bats

BATS 测试位于 hack/bats/tests 下。

额外测试

还有额外的测试 (hack/bats/extras) 不会自动 从 make bats 中调用。

运行以下命令以运行额外的 BATS 测试:

./hack/bats/lib/bats-core/bin/bats ./hack/bats/extras

模板特定测试

特定于模板文件的测试使用 bash 编写,并部分使用 Perl 编写。

使用 hack/test-templates.sh 来执行测试,配合虚拟机模板文件,例如:

./hack/test-templates.sh ./templates/default.yaml
./hack/test-templates.sh ./templates/fedora.yaml
./hack/test-templates.sh ./hack/test-templates/test-misc.yaml

CI

.github/workflows/test.yml 在 GitHub Actions 上使用 “Tier 1” 模板执行测试。

大多数测试在 Linux 运行器上执行,因为 macOS 运行器速度慢且不稳定。

关于 macOS 特定功能(例如 vz 和 vmnet)的测试仍在 macOS 运行器上执行。

目前使用 Intel 版本的 macOS,因为 GitHub Actions 上的 ARM 版本 macOS 仍不支持嵌套虚拟化。