KUnit是一种Linux Kernel的单元测试工具。kunit_tool是一个Python脚本,用于配置和构建内核、运行测试并格式化测试结果,使用kunit_tool需要在um架构下运行。本篇将介绍如何在不使用kunit_tool的情况下运行KUnit测试例。
1、编写kunit测试代码
这里以/lib/rational.c中的接口为例,编写kunit测试代码rational_test.c,kunit相关api可参考kunit官方文档。
#include <linux/kernel.h>
#include <linux/kunit/test.h>
#include <linux/rational.h>
static void rational_best_approximation_basic(struct kunit *test)
{
unsigned long best_numerator, best_denominator;
rational_best_approximation(22, 7, 100, 1000, &best_numerator, &best_denominator);
KUNIT_EXPECT_EQ(test, best_numerator, 22UL);
KUNIT_EXPECT_EQ(test, best_denominator, 7UL);
}
static struct kunit_case rational_test_cases[] = {
KUNIT_CASE(rational_best_approximation_basic),
{},
};
static struct kunit_suite rational_test_suite = {
.name = "rational_test_suite",
.test_cases = rational_test_cases,
};
kunit_test_suite(rational_test_suite);
MODULE_LICENSE("GPL v2");
2、添加kunit相关配置项
在Kconfig配置文件中添加以下内容:
config KUNIT_RATIONAL_TEST
tristate "Kunit test for rational"
depends on KUNIT
help
This builds the rational kunit test.
Additional descriptive information.
在.config中添加配置项:CONFIG_KUNIT_RATIONAL_TEST=m。
同时还需要修改相关的Makefile文件。
3、编译内核
由于 KUnit 与 Linux 内核有相同的依赖关系。因此只要能编译内核,就能运行 KUnit。编译完成后,可以看到源码所在的目录下会生成rational_test.ko文件。为了执行测试,需要加载生成的测试模块。可以使用 insmod
命令加载模块,并检查测试结果。例如:
sudo insmod rational_test.ko
或者,也可以使用modprobe命令。
4、查看测试结果
KUnit的测试结果会以TAP格式写入内核日志中,安装rational_test.ko(需要注意的是,rational_test依赖kunit模块,需要先确保kunit相关模块已安装),执行dmesg -c查看测试结果:
可以看到测试通过。
此外,如果启用了 CONFIG_KUNIT_DEBUGFS选项,KUnit 测试结果将可从 debugfs 文件系统(如果已挂载)访问。它们将以 TAP 格式存在于 /sys/kernel/debug/kunit/<test_suite>/results 文件中。