Kernel Test eXpressions(KTX) is the most simple testing framework for kernel projects. It's compatible with C99 standards and supports all versions of Linux kernel. Inspired by Catch2.
#include<linux/kernel.h>#include<linux/module.h>#include"ktx.h"KTX_DEFINE(testcase_simple)
{
staticconstinttest_01=10;
staticconstvoid*test_02=NULL;
staticconstchartest_03='a';
staticconstchar*test_04="Hello, there";
KTX_CHECK(testcase_simple, test_01, 10);
KTX_CHECK(testcase_simple, test_02, 10);
KTX_CHECK(testcase_simple, test_03, 'a');
KTX_CHECK(testcase_simple, test_04, NULL);
}
staticint__inittestmod_init(void)
{
KTX_LOGGER("Init Module\n");
KTX_RUN(testcase_simple);
return0;
}
staticvoid__exittestmod_exit(void)
{
unsigned longfails=KTX_RESULT(testcase_simple);
KTX_LOGGER("Fail Counts: %lu\n", fails);
KTX_REPORT(testcase_simple);
KTX_LOGGER("Exit Module\n");
return;
}
module_init(testmod_init);
module_exit(testmod_exit);$ sudo insmod testmod.ko
$ sudo rmmod testmod
$ sudo dmesg
[ 4455.007871] Init Module
[ 4455.007872] testcase_simple: PASS
[ 4455.007872] Evaluation: 10 == 10
[ 4455.007872] Expression: test_01 == 10
[ 4455.007872] testcase_simple: FAILED
[ 4455.007873] Evaluation: 0 == 10
[ 4455.007873] Expression: test_02 == 10
[ 4455.007873] testcase_simple: PASS
[ 4455.007873] Evaluation: 97 == 97
[ 4455.007874] Expression: test_03 == 'a'
[ 4455.007874] testcase_simple: FAILED
[ 4455.007874] Evaluation: 18446744072657121427 == 0
[ 4455.007874] Expression: test_04 == ((void *)0)
[ 4456.745734] Fail Counts: 2
[ 4456.745734] [*] TESTCASE Report
[ 4456.745735] | TC Name : testcase_simple
[ 4456.745735] | Testnum : 4
[ 4456.745735] | Result : FAILED
[ 4456.745735] | Tested : 4
[ 4456.745735] | Passed : 2
[ 4456.745736] | Failed : 2
[ 4456.745736] [*]
[ 4456.745736] Exit Module
#ifndef_TESTCASE_H#define_TESTCASE_H#include"ktx.h"KTX_DECLARE(testcase_modular);
#endif#include"testcase.h"KTX_DEFINE(testcase_modular)
{
staticconstinttest_01=1;
staticconstlongtest_02=2;
staticconstunsigned inttest_03=3;
staticconstunsigned longtest_04=4;
KTX_CHECK(testcase_modular, test_01, 1);
KTX_CHECK(testcase_modular, test_02, 2);
KTX_REQUIRE(testcase_modular, test_03, -3);
/* Cannot reach here */KTX_CHECK(testcase_modular, test_04, 4);
}#include<linux/kernel.h>#include<linux/module.h>#include"testcase.h"staticint__inittestmod_init(void)
{
KTX_LOGGER("Init Module\n");
KTX_RUN(testcase_modular);
return0;
}
staticvoid__exittestmod_exit(void)
{
unsigned longfails=KTX_RESULT(testcase_modular);
KTX_LOGGER("Fail Counts: %lu\n", fails);
KTX_REPORT(testcase_modular);
KTX_LOGGER("Exit Module\n");
return;
}
module_init(testmod_init);
module_exit(testmod_exit);$ sudo insmod testmod.ko
$ sudo rmmod testmod
$ sudo dmesg
[ 4767.529209] Init Module
[ 4767.529211] testcase_modular: PASS
[ 4767.529214] Evaluation: 1 == 1
[ 4767.529215] Expression: test_01 == 1
[ 4767.529216] testcase_modular: PASS
[ 4767.529218] Evaluation: 2 == 2
[ 4767.529219] Expression: test_02 == 2
[ 4767.529221] testcase_modular: FAILED
[ 4767.529223] Evaluation: 3 == 18446744073709551613
[ 4767.529224] Expression: test_03 == -3
[ 4769.120650] Fail Counts: 1
[ 4769.120651] [*] TESTCASE Report
[ 4769.120651] | TC Name : testcase_modular
[ 4769.120651] | Testnum : 4
[ 4769.120651] | Result : FAILED
[ 4769.120652] | Tested : 3
[ 4769.120652] | Passed : 2
[ 4769.120652] | Failed : 1
[ 4769.120652] [*]
[ 4769.120652] Exit Module
- Issues can be reported on Github Issue Tracker
- Kernel Test eXpressions(KTX) is released under the Beerware License
