| 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 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 -s <your_device_serial_number> |
| .... |
| ======================================================= |
| =============== 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. |
| |
| Check the test module dependency with `modinfo <module_name>.ko` on your local |
| host machine or on the Android device with `adb shell modinfo <module_name.ko>`. |
| All dependent modules need to be installed before the test module can be |
| installed successfully. |
| |
| Check if the module is already installed with `adb shell lsmod`. The `adb shell |
| rmmod` can be used to remove the already installed test module, and installing |
| the test module again will trigger the test rerun. |
| |
| `adb shell lsmod` will also show the module dependency for your test module in |
| the `Used by` column. You can not remove a module with `adb shell rmmod` if it |
| is being used by another module. Other modules that are using it need to be |
| removed first. |
| |
| 2. Test module loaded but no test results |
| |
| Check dmesg for KUnit errors. |
| $ dmesg | grep kunit |
| |
| If "kunit: disabled" is shown then kunit.ko is not installed with `enable=1`. |
| |
| If kunit.ko or kunit_<*test>.ko fails to install, check for whether they are |
| already installed with `adb shell lsmod`. |