======= HOW TO RUN KUNIT TESTS IN ANDROID ================================= Prerequisites * If you want to run a vendor module KUnit tests, please run the tests with a "no trim" kernel (e.g. add `--notrim` to bazel build command) Run test with a single shell script command: $ common/tools/testing/android/bin/kunit.sh By default, the script will build the kernel and launch an Android virtual device and then run the tests. Additional options may be passed to change the default behavior. The following are some examples on how to use it: * Build kernel, launch a virtual device, run KUnit tests: $ common/tools/testing/android/bin/kunit.sh * Run KUnit tests on a connected device directly: $ common/tools/testing/android/bin/kunit.sh -s 127.0.0.1:37693 * Check other available options: $ common/tools/testing/android/bin/kunit.sh -h Load and run a test module on Android device manually * Push the KUnit test framework module kunit.ko over to the device. For example: $ adb push kunit.ko /data * Load test module on device: $ cd /data $ insmod kunit.ko enable=1 * Push the KUnit test module over to the device. For example using adb: $ adb push kunit-test-example.ko /data * (Optional) - Mount debugfs on device: $ mount -t debugfs /sys/kernel/debug * Load test module on device: $ cd /data $ insmod kunit-test-example.ko View test results * If debugfs is mounted: $ cat /sys/kernel/debug/kunit/<test name>/results KTAP version 1 1..1 KTAP version 1 # Subtest: example 1..4 # example_simple_test: initializing ok 1 example_simple_test <truncated> * Via dmesg (check before log cycles out): $ dmesg .... [172434.032618] 1..1 [172434.032618] KTAP version 1 [172434.032618] # Subtest: example [172434.032618] 1..4 [172434.032618] # example_simple_test: initializing [172434.032618] [172434.032618] ok 1 example_simple_test <truncated> .... Run KUnit tests on Android Device via test automation infrastructure tradefed * Build ACK KUnit tests and install (e.g. /tmp/kunit_tests): $ tools/bazel run -- //common:kunit_tests_x86_64_install -v --destdir /tmp/kunit_tests * With device connected and accessible via adb run the tests: $ prebuilts/tradefed/filegroups/tradefed/tradefed.sh run commandAndExit \ template/local_min --template:map test=suite/test_mapping_suite \ --include-filter kunit --tests-dir=/tmp/kunit_tests --primary-abi-only .... ======================================================= =============== Summary =============== Total Run time: 23s 1/1 modules completed Total Tests : 9 PASSED : 9 FAILED : 0 ============== End of Results ============== ============================================ .... TROUBLESHOOTING =============== 1. Test module fails to load. Check dmesg for load errors. If undefined symbol errors are shown, you're likely running with a trimmed kernel where the symbols are not available. Run with a "no trim" kernel. 2. Test module loaded but no test results Check dmesg for KUnit errors. $ dmesg | grep kunit If "kunit: disabled" is shown then `kunit.enable=1` has not been set.