searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

在x86平台上使用KUnit

2023-11-28 06:11:22
56
0

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 文件中。

0条评论
0 / 1000
c****w
5文章数
0粉丝数
c****w
5 文章 | 0 粉丝
原创

在x86平台上使用KUnit

2023-11-28 06:11:22
56
0

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 文件中。

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0