diff --git a/BUILD.bazel b/BUILD.bazel
index b3605fa441c8..92789ba05590 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -3,8 +3,10 @@
load("@bazel_skylib//rules:copy_file.bzl", "copy_file")
load("@bazel_skylib//rules:write_file.bzl", "write_file")
+load("@rules_pkg//pkg:install.bzl", "pkg_install")
load(
"@rules_pkg//pkg:mappings.bzl",
+ "pkg_filegroup",
"pkg_files",
"strip_prefix",
)
@@ -25,7 +27,7 @@ load(
"merged_kernel_uapi_headers",
)
load(":abi.bzl", "cc_binary_with_abi")
-load(":modules.bzl", "get_gki_modules_list")
+load(":modules.bzl", "get_gki_modules_list", "get_kunit_modules_list")
package(
default_visibility = [
@@ -74,6 +76,7 @@ alias(
write_file(
name = "gki_system_dlkm_modules_arm64",
out = "android/gki_system_dlkm_modules_arm64",
+ # Do not built kunit modules into system_dlkm
content = get_gki_modules_list("arm64") + [
# Ensure new line at the end.
"",
@@ -83,6 +86,7 @@ write_file(
write_file(
name = "gki_system_dlkm_modules_x86_64",
out = "android/gki_system_dlkm_modules_x86_64",
+ # Do not built kunit modules into system_dlkm
content = get_gki_modules_list("x86_64") + [
# Ensure new line at the end.
"",
@@ -128,7 +132,7 @@ define_common_kernels(target_configs = {
"trim_nonlisted_kmi": True,
"protected_exports_list": "android/abi_gki_protected_exports_aarch64",
"protected_modules_list": "android/gki_aarch64_protected_modules",
- "module_implicit_outs": get_gki_modules_list("arm64"),
+ "module_implicit_outs": get_gki_modules_list("arm64") + get_kunit_modules_list("arm64"),
"make_goals": _GKI_AARCH64_MAKE_GOALS,
"ddk_headers_archive": ":kernel_aarch64_ddk_headers_archive",
"extra_dist": [
@@ -138,13 +142,13 @@ define_common_kernels(target_configs = {
},
"kernel_aarch64_16k": {
"kmi_symbol_list_strict_mode": False,
- "module_implicit_outs": get_gki_modules_list("arm64"),
+ "module_implicit_outs": get_gki_modules_list("arm64") + get_kunit_modules_list("arm64"),
"make_goals": _GKI_AARCH64_MAKE_GOALS,
"extra_dist": [":test_mappings_zip"],
},
"kernel_x86_64": {
"kmi_symbol_list_strict_mode": False,
- "module_implicit_outs": get_gki_modules_list("x86_64"),
+ "module_implicit_outs": get_gki_modules_list("x86_64") + get_kunit_modules_list("x86_64"),
"make_goals": _GKI_X86_64_MAKE_GOALS,
"extra_dist": [
":test_mappings_zip",
@@ -608,7 +612,7 @@ kernel_build(
"modules",
"rk3399-rock-pi-4b.dtb",
],
- module_outs = get_gki_modules_list("arm64") + _ROCKPI4_MODULE_OUTS + _ROCKPI4_WATCHDOG_MODULE_OUTS,
+ module_outs = get_gki_modules_list("arm64") + get_kunit_modules_list("arm64") + _ROCKPI4_MODULE_OUTS + _ROCKPI4_WATCHDOG_MODULE_OUTS,
visibility = ["//visibility:private"],
)
@@ -632,7 +636,7 @@ kernel_build(
"modules",
"rk3399-rock-pi-4b.dtb",
],
- module_outs = get_gki_modules_list("arm64") + _ROCKPI4_MODULE_OUTS,
+ module_outs = get_gki_modules_list("arm64") + get_kunit_modules_list("arm64") + _ROCKPI4_MODULE_OUTS,
visibility = ["//visibility:private"],
)
@@ -746,77 +750,84 @@ kernel_build(
)
# KUnit test targets
+_KUNIT_DIR = "testcases/kunit"
-# Modules defined by tools/testing/kunit/configs/android/kunit_defconfig
-_KUNIT_COMMON_MODULES = [
- # keep sorted
- "drivers/base/regmap/regmap-kunit.ko",
- "drivers/base/regmap/regmap-ram.ko",
- "drivers/base/regmap/regmap-raw-ram.ko",
- "drivers/hid/hid-uclogic-test.ko",
- "drivers/iio/test/iio-test-format.ko",
- "drivers/input/tests/input_test.ko",
- "drivers/rtc/lib_test.ko",
- "fs/ext4/ext4-inode-test.ko",
- "fs/fat/fat_test.ko",
- "kernel/time/time_test.ko",
- "lib/kunit/kunit-example-test.ko",
- "lib/kunit/kunit-test.ko",
- "mm/kfence/kfence_test.ko",
- "net/core/dev_addr_lists_test.ko",
- "sound/soc/soc-topology-test.ko",
- "sound/soc/soc-utils-test.ko",
-]
-
-_KUNIT_CLK_MODULES = [
- "drivers/clk/clk-gate_test.ko",
- "drivers/clk/clk_test.ko",
-]
-
-kernel_build(
- name = "kunit_aarch64",
- srcs = [":kernel_aarch64_sources"],
- outs = [],
- arch = "arm64",
- base_kernel = ":kernel_aarch64",
- build_config = "build.config.kunit.aarch64",
- defconfig_fragments = [
- "tools/testing/kunit/configs/android/kunit_defconfig",
- "tools/testing/kunit/configs/android/kunit_clk_defconfig",
+pkg_files(
+ name = "kunit_tests_config_arm64",
+ srcs = [
+ "tools/testing/kunit/android/tradefed_configs/config_arm64.xml",
],
- make_goals = ["modules"],
- module_outs = _KUNIT_COMMON_MODULES + _KUNIT_CLK_MODULES,
+ renames = {
+ "tools/testing/kunit/android/tradefed_configs/config_arm64.xml": _KUNIT_DIR + "/kunit.config",
+ },
+ visibility = ["//visibility:private"],
)
-copy_to_dist_dir(
- name = "kunit_aarch64_dist",
- data = [":kunit_aarch64"],
- dist_dir = "out/kunit_aarch64/dist",
- flat = True,
- log = "info",
-)
-
-kernel_build(
- name = "kunit_x86_64",
- srcs = [":kernel_x86_64_sources"],
- outs = [],
- arch = "x86_64",
- base_kernel = ":kernel_x86_64",
- build_config = "build.config.kunit.x86_64",
- defconfig_fragments = [
- "tools/testing/kunit/configs/android/kunit_defconfig",
- # x86_64 does not set CONFIG_COMMON_CLK
+pkg_files(
+ name = "kunit_tests_config_x86_64",
+ srcs = [
+ "tools/testing/kunit/android/tradefed_configs/config_x86_64.xml",
],
- make_goals = ["modules"],
- module_outs = _KUNIT_COMMON_MODULES,
+ renames = {
+ "tools/testing/kunit/android/tradefed_configs/config_x86_64.xml": _KUNIT_DIR + "/kunit.config",
+ },
+ visibility = ["//visibility:private"],
)
-copy_to_dist_dir(
- name = "kunit_x86_64_dist",
- data = [":kunit_x86_64"],
- dist_dir = "out/kunit_x86_64/dist",
- flat = True,
- log = "info",
+pkg_files(
+ name = "kunit_modules_arm64",
+ srcs = [
+ ":kernel_aarch64/" + e
+ for e in get_kunit_modules_list("arm64")
+ ],
+ prefix = _KUNIT_DIR + "/arm64",
+ visibility = ["//visibility:private"],
+)
+
+pkg_files(
+ name = "kunit_modules_x86_64",
+ srcs = [
+ ":kernel_x86_64/" + e
+ for e in get_kunit_modules_list("x86_64")
+ ],
+ prefix = _KUNIT_DIR + "/x86_64/",
+ visibility = ["//visibility:private"],
+)
+
+pkg_filegroup(
+ name = "kunit_tests_arm64_pgk_files",
+ srcs = [
+ ":kunit_modules_arm64",
+ ":kunit_tests_config_arm64",
+ ],
+ visibility = ["//visibility:private"],
+)
+
+pkg_filegroup(
+ name = "kunit_tests_x86_64_pkg_files",
+ srcs = [
+ ":kunit_modules_x86_64",
+ ":kunit_tests_config_x86_64",
+ ],
+ visibility = ["//visibility:private"],
+)
+
+# KUnit build rules for local execution workflow
+# Run by bazel run //common:kunit_tests_arm64 -- -v --destdir /tmp/kernel_tests/
+pkg_install(
+ name = "kunit_tests_arm64",
+ srcs = [
+ ":kunit_tests_arm64_pkg_files",
+ ],
+ visibility = ["//visibility:private"],
+)
+
+pkg_install(
+ name = "kunit_tests_x86_64",
+ srcs = [
+ ":kunit_tests_x86_64_pkg_files",
+ ],
+ visibility = ["//visibility:private"],
)
# DDK Headers
@@ -1360,6 +1371,7 @@ cc_binary_with_abi(
visibility = ["//visibility:private"],
deps = [
":kselftest_headers_lib",
+ ":kselftest_mm_vm_util",
"@libcap",
],
)
@@ -1449,8 +1461,15 @@ cc_binary_with_abi(
cc_library(
name = "kselftest_mm_vm_util",
srcs = ["tools/testing/selftests/mm/vm_util.c"],
- hdrs = ["tools/testing/selftests/mm/vm_util.h"],
+ hdrs = [
+ "include/uapi/linux/fs.h",
+ "tools/testing/selftests/mm/vm_util.h",
+ ],
copts = _KSELFTEST_COPTS,
+ includes = [
+ "include/uapi/",
+ "tools/testing/selftests",
+ ],
visibility = ["//visibility:private"],
deps = [
":kselftest_headers_lib",
@@ -2282,14 +2301,20 @@ pkg_files(
pkg_zip(
name = "tests_zip_x86_64",
- srcs = [":kselftest_tests_x86_64_pkg_files"],
+ srcs = [
+ ":kselftest_tests_x86_64_pkg_files",
+ ":kunit_tests_x86_64_pkg_files",
+ ],
out = "x86_64/tests.zip",
visibility = ["//visibility:public"],
)
pkg_zip(
name = "tests_zip_arm64",
- srcs = [":kselftest_tests_arm64_pkg_files"],
+ srcs = [
+ ":kselftest_tests_arm64_pkg_files",
+ ":kunit_tests_arm64_pgk_files",
+ ],
out = "arm64/tests.zip",
visibility = ["//visibility:public"],
)
diff --git a/arch/arm64/configs/gki_defconfig b/arch/arm64/configs/gki_defconfig
index dd0e969f4df0..e03b63f00968 100644
--- a/arch/arm64/configs/gki_defconfig
+++ b/arch/arm64/configs/gki_defconfig
@@ -1,6 +1,7 @@
CONFIG_UAPI_HEADER_TEST=y
CONFIG_LOCALVERSION="-4k"
CONFIG_AUDIT=y
+CONFIG_TIME_KUNIT_TEST=m
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_BPF_SYSCALL=y
@@ -291,6 +292,7 @@ CONFIG_BT_HCIUART_QCA=y
CONFIG_RFKILL=m
CONFIG_NET_9P=m
CONFIG_NFC=m
+CONFIG_NETDEV_ADDR_LIST_TEST=m
CONFIG_PCI=y
CONFIG_PCIEPORTBUS=y
CONFIG_PCIEAER=y
@@ -303,6 +305,7 @@ CONFIG_PCIE_QCOM=y
CONFIG_PCI_ENDPOINT=y
CONFIG_FW_LOADER_USER_HELPER=y
# CONFIG_FW_CACHE is not set
+CONFIG_REGMAP_KUNIT=m
# CONFIG_SUN50I_DE2_BUS is not set
# CONFIG_SUNXI_RSB is not set
CONFIG_ARM_SCMI_PROTOCOL=y
@@ -381,6 +384,7 @@ CONFIG_USB_NET_AQC111=m
CONFIG_WWAN=m
# CONFIG_WWAN_DEBUGFS is not set
CONFIG_INPUT_EVDEV=y
+CONFIG_INPUT_KUNIT_TEST=m
CONFIG_KEYBOARD_GPIO=y
# CONFIG_MOUSE_PS2 is not set
CONFIG_INPUT_JOYSTICK=y
@@ -480,6 +484,8 @@ CONFIG_SND_HRTIMER=y
# CONFIG_SND_DRIVERS is not set
CONFIG_SND_USB_AUDIO=y
CONFIG_SND_SOC=y
+CONFIG_SND_SOC_TOPOLOGY_KUNIT_TEST=m
+CONFIG_SND_SOC_UTILS_KUNIT_TEST=m
CONFIG_HID_BATTERY_STRENGTH=y
CONFIG_HIDRAW=y
CONFIG_UHID=y
@@ -503,6 +509,7 @@ CONFIG_SONY_FF=y
CONFIG_HID_STEAM=y
CONFIG_HID_WACOM=y
CONFIG_HID_WIIMOTE=y
+CONFIG_HID_KUNIT_TEST=m
CONFIG_USB_HIDDEV=y
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
CONFIG_USB_OTG=y
@@ -557,6 +564,7 @@ CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_TRANSIENT=y
CONFIG_EDAC=y
CONFIG_RTC_CLASS=y
+CONFIG_RTC_LIB_KUNIT_TEST=m
CONFIG_RTC_DRV_PL030=y
CONFIG_RTC_DRV_PL031=y
CONFIG_DMABUF_HEAPS=y
@@ -578,6 +586,8 @@ CONFIG_STAGING=y
CONFIG_ASHMEM=y
CONFIG_COMMON_CLK_SCPI=y
# CONFIG_SUNXI_CCU is not set
+CONFIG_CLK_KUNIT_TEST=m
+CONFIG_CLK_GATE_KUNIT_TEST=m
CONFIG_HWSPINLOCK=y
# CONFIG_SUN50I_ERRATUM_UNKNOWN1 is not set
CONFIG_IOMMU_IO_PGTABLE_ARMV7S=y
@@ -595,6 +605,7 @@ CONFIG_MEMORY=y
CONFIG_IIO=y
CONFIG_IIO_BUFFER=y
CONFIG_IIO_TRIGGER=y
+CONFIG_IIO_FORMAT_KUNIT_TEST=m
CONFIG_PWM=y
CONFIG_POWERCAP=y
CONFIG_IDLE_INJECT=y
@@ -610,6 +621,7 @@ CONFIG_LIBNVDIMM=y
CONFIG_EXT4_FS=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
+CONFIG_EXT4_KUNIT_TESTS=m
CONFIG_F2FS_FS=y
CONFIG_F2FS_FS_SECURITY=y
CONFIG_F2FS_FS_COMPRESSION=y
@@ -627,6 +639,7 @@ CONFIG_OVERLAY_FS=y
CONFIG_INCREMENTAL_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
+CONFIG_FAT_KUNIT_TEST=m
CONFIG_EXFAT_FS=y
CONFIG_TMPFS=y
# CONFIG_EFIVAR_FS is not set
@@ -754,7 +767,9 @@ CONFIG_WQ_WATCHDOG=y
CONFIG_SCHEDSTATS=y
CONFIG_HIST_TRIGGERS=y
CONFIG_PID_IN_CONTEXTIDR=y
-CONFIG_KUNIT=y
+CONFIG_KUNIT=m
CONFIG_KUNIT_DEBUGFS=y
+CONFIG_KUNIT_TEST=m
+CONFIG_KUNIT_EXAMPLE_TEST=m
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
# CONFIG_RUNTIME_TESTING_MENU is not set
diff --git a/arch/x86/configs/gki_defconfig b/arch/x86/configs/gki_defconfig
index 5e54de7f7577..10f830c61384 100644
--- a/arch/x86/configs/gki_defconfig
+++ b/arch/x86/configs/gki_defconfig
@@ -1,6 +1,7 @@
CONFIG_UAPI_HEADER_TEST=y
CONFIG_KERNEL_LZ4=y
CONFIG_AUDIT=y
+CONFIG_TIME_KUNIT_TEST=m
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_BPF_SYSCALL=y
@@ -282,6 +283,7 @@ CONFIG_BT_HCIUART_QCA=y
CONFIG_RFKILL=m
CONFIG_NET_9P=m
CONFIG_NFC=m
+CONFIG_NETDEV_ADDR_LIST_TEST=m
CONFIG_PCI=y
CONFIG_PCIEPORTBUS=y
CONFIG_PCIEAER=y
@@ -291,6 +293,7 @@ CONFIG_PCIE_DW_PLAT_EP=y
CONFIG_PCI_ENDPOINT=y
CONFIG_FW_LOADER_USER_HELPER=y
# CONFIG_FW_CACHE is not set
+CONFIG_REGMAP_KUNIT=m
CONFIG_GNSS=y
CONFIG_OF=y
CONFIG_ZRAM=m
@@ -361,6 +364,7 @@ CONFIG_USB_NET_AQC111=m
CONFIG_WWAN=m
# CONFIG_WWAN_DEBUGFS is not set
CONFIG_INPUT_EVDEV=y
+CONFIG_INPUT_KUNIT_TEST=m
CONFIG_KEYBOARD_GPIO=y
# CONFIG_MOUSE_PS2 is not set
CONFIG_INPUT_JOYSTICK=y
@@ -438,6 +442,8 @@ CONFIG_SND_HRTIMER=y
# CONFIG_SND_DRIVERS is not set
CONFIG_SND_USB_AUDIO=y
CONFIG_SND_SOC=y
+CONFIG_SND_SOC_TOPOLOGY_KUNIT_TEST=m
+CONFIG_SND_SOC_UTILS_KUNIT_TEST=m
CONFIG_HID_BATTERY_STRENGTH=y
CONFIG_HIDRAW=y
CONFIG_UHID=y
@@ -461,6 +467,7 @@ CONFIG_SONY_FF=y
CONFIG_HID_STEAM=y
CONFIG_HID_WACOM=y
CONFIG_HID_WIIMOTE=y
+CONFIG_HID_KUNIT_TEST=m
CONFIG_USB_HIDDEV=y
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
CONFIG_USB_MON=m
@@ -514,6 +521,7 @@ CONFIG_LEDS_TRIGGER_TRANSIENT=y
CONFIG_EDAC=y
CONFIG_RTC_CLASS=y
# CONFIG_RTC_HCTOSYS is not set
+CONFIG_RTC_LIB_KUNIT_TEST=m
CONFIG_DMABUF_HEAPS=y
CONFIG_DMABUF_SYSFS_STATS=y
CONFIG_DMABUF_HEAPS_DEFERRED_FREE=y
@@ -532,6 +540,7 @@ CONFIG_PM_DEVFREQ_EVENT=y
CONFIG_IIO=y
CONFIG_IIO_BUFFER=y
CONFIG_IIO_TRIGGER=y
+CONFIG_IIO_FORMAT_KUNIT_TEST=m
CONFIG_GENERIC_PHY=y
CONFIG_POWERCAP=y
CONFIG_IDLE_INJECT=y
@@ -546,6 +555,7 @@ CONFIG_INTERCONNECT=y
CONFIG_EXT4_FS=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
+CONFIG_EXT4_KUNIT_TESTS=m
CONFIG_F2FS_FS=y
CONFIG_F2FS_FS_SECURITY=y
CONFIG_F2FS_FS_COMPRESSION=y
@@ -563,6 +573,7 @@ CONFIG_OVERLAY_FS=y
CONFIG_INCREMENTAL_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
+CONFIG_FAT_KUNIT_TEST=m
CONFIG_EXFAT_FS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
@@ -686,6 +697,8 @@ CONFIG_WQ_WATCHDOG=y
CONFIG_SCHEDSTATS=y
CONFIG_HIST_TRIGGERS=y
CONFIG_UNWINDER_FRAME_POINTER=y
-CONFIG_KUNIT=y
+CONFIG_KUNIT=m
CONFIG_KUNIT_DEBUGFS=y
+CONFIG_KUNIT_TEST=m
+CONFIG_KUNIT_EXAMPLE_TEST=m
# CONFIG_KUNIT_DEFAULT_ENABLED is not set
diff --git a/modules.bzl b/modules.bzl
index 791348705ec3..89f580121bd0 100644
--- a/modules.bzl
+++ b/modules.bzl
@@ -134,3 +134,61 @@ def get_gki_modules_list(arch = None):
))
return gki_modules_list
+
+_KUNIT_FRAMEWORK_MODULES = [
+ "lib/kunit/kunit.ko",
+]
+
+# Common Kunit test modules
+_KUNIT_COMMON_MODULES_LIST = [
+ # keep sorted
+ "drivers/base/regmap/regmap-kunit.ko",
+ "drivers/base/regmap/regmap-ram.ko",
+ "drivers/base/regmap/regmap-raw-ram.ko",
+ "drivers/hid/hid-uclogic-test.ko",
+ "drivers/iio/test/iio-test-format.ko",
+ "drivers/input/tests/input_test.ko",
+ "drivers/rtc/lib_test.ko",
+ "fs/ext4/ext4-inode-test.ko",
+ "fs/fat/fat_test.ko",
+ "kernel/time/time_test.ko",
+ "lib/kunit/kunit-example-test.ko",
+ "lib/kunit/kunit-test.ko",
+ # "mm/kfence/kfence_test.ko",
+ "net/core/dev_addr_lists_test.ko",
+ "sound/soc/soc-topology-test.ko",
+ "sound/soc/soc-utils-test.ko",
+]
+
+# KUnit test module for arm64 only
+_KUNIT_CLK_MODULES_LIST = [
+ "drivers/clk/clk-gate_test.ko",
+ "drivers/clk/clk_test.ko",
+]
+
+# buildifier: disable=unnamed-macro
+def get_kunit_modules_list(arch = None):
+ """ Provides the list of GKI modules.
+
+ Args:
+ arch: One of [arm, arm64, i386, x86_64].
+
+ Returns:
+ The list of KUnit modules for the given |arch|.
+ """
+ kunit_modules_list = _KUNIT_FRAMEWORK_MODULES + _KUNIT_COMMON_MODULES_LIST
+ if arch == "arm":
+ kunit_modules_list += _KUNIT_CLK_MODULES_LIST
+ elif arch == "arm64":
+ kunit_modules_list += _KUNIT_CLK_MODULES_LIST
+ elif arch == "i386":
+ kunit_modules_list += []
+ elif arch == "x86_64":
+ kunit_modules_list += []
+ else:
+ fail("{}: arch {} not supported. Use one of [arm, arm64, i386, x86_64]".format(
+ str(native.package_relative_label(":x")).removesuffix(":x"),
+ arch,
+ ))
+
+ return kunit_modules_list
diff --git a/tools/testing/android/bin/kselftest.sh b/tools/testing/android/bin/kselftest.sh
index adeaa64429f5..136151447e8b 100755
--- a/tools/testing/android/bin/kselftest.sh
+++ b/tools/testing/android/bin/kselftest.sh
@@ -6,6 +6,8 @@ BIN_DIR=common/tools/testing/android/bin
ACLOUD=$BIN_DIR/acloudb.sh
TRADEFED=prebuilts/tradefed/filegroups/tradefed/tradefed.sh
TESTSDIR=bazel-bin/common/
+LOG_DIR=$PWD/out/test_logs/$(date +%Y%m%d_%H%M%S)
+JDK_PATH=prebuilts/jdk/jdk11/linux-x86
print_help() {
echo "Usage: $0 [OPTIONS]"
@@ -116,7 +118,15 @@ done
if $BUILD_KERNEL; then
echo "Building kernel..."
# TODO: add support to build kernel for physical device
- $BAZEL run //common-modules/virtual-device:virtual_device_x86_64_dist -- --dist_dir=$DIST_DIR
+ $BAZEL run $BUILD_FLAGS //common-modules/virtual-device:virtual_device_x86_64_dist -- \
+ --dist_dir=$DIST_DIR
+ exit_code=$?
+ if [ $exit_code -eq 0 ]; then
+ echo "Build kernel succeeded"
+ else
+ echo "Build kernel failed with exit code $exit_code"
+ exit 1
+ fi
fi
if $LAUNCH_CVD; then
@@ -140,17 +150,24 @@ echo "Get abi from device $SERIAL_NUMBER"
ABI=$(adb -s $SERIAL_NUMBER shell getprop ro.product.cpu.abi)
echo "Building kselftests according to device $SERIAL_NUMBER ro.product.cpu.abi $ABI ..."
case $ABI in
- arm64*)
- $BAZEL build //common:kselftest_tests_arm64
- ;;
- x86_64*)
- $BAZEL build //common:kselftest_tests_x86_64
- ;;
- *)
- echo "$ABI not supported"
- exit 1
- ;;
+ arm64*)
+ $BAZEL build //common:kselftest_tests_arm64
+ ;;
+ x86_64*)
+ $BAZEL build //common:kselftest_tests_x86_64
+ ;;
+ *)
+ echo "$ABI not supported"
+ exit 1
+ ;;
esac
+exit_code=$?
+if [ $exit_code -eq 0 ]; then
+ echo "Build kselftest succeeded"
+else
+ echo "Build kselftest failed with exit code $exit_code"
+ exit 1
+fi
if [ -z "$SELECTED_TESTS" ]; then
echo "Running all kselftests with device $SERIAL_NUMBER..."
@@ -159,9 +176,10 @@ else
echo "Running $SELECTED_TESTS with device $SERIAL_NUMBER ..."
fi
-tf_cli="$TRADEFED run commandAndExit template/local_min \
---template:map test=suite/test_mapping_suite \
-$TEST_FILTERS --tests-dir=$TESTSDIR --primary-abi-only -s $SERIAL_NUMBER"
+tf_cli="JAVA_HOME=$JDK_PATH PATH=$JDK_PATH/bin:$PATH $TRADEFED run commandAndExit \
+template/local_min --template:map test=suite/test_mapping_suite \
+$TEST_FILTERS --tests-dir=$TESTSDIR --log-file-path=$LOG_DIR \
+--primary-abi-only -s $SERIAL_NUMBER"
echo "Runing tradefed command: $tf_cli"
diff --git a/tools/testing/android/bin/kunit.sh b/tools/testing/android/bin/kunit.sh
new file mode 100755
index 000000000000..2e9762197df4
--- /dev/null
+++ b/tools/testing/android/bin/kunit.sh
@@ -0,0 +1,198 @@
+#!/usr/bin/env bash
+# SPDX-License-Identifier: GPL-2.0
+
+BAZEL=tools/bazel
+BIN_DIR=common/tools/testing/android/bin
+ACLOUD=$BIN_DIR/acloudb.sh
+TRADEFED=prebuilts/tradefed/filegroups/tradefed/tradefed.sh
+TESTSDIR=$PWD/out/tests
+LOG_DIR=$PWD/out/test_logs/$(date +%Y%m%d_%H%M%S)
+JDK_PATH=prebuilts/jdk/jdk11/linux-x86
+
+print_help() {
+ echo "Usage: $0 [OPTIONS]"
+ echo ""
+ echo "This script builds kernel, launches cvd and runs selftests on it."
+ echo "Available options:"
+ echo " --skip-kernel-build Skip the kernel building step"
+ echo " --skip-cvd-launch Skip the CVD launch step"
+ echo " --skip-cvd-kill Do not kill CVD launched by running this script"
+ echo " -d, --dist-dir=DIR The kernel dist dir (default is /tmp/kernel_dist)"
+ echo " -s, --serial=SERIAL The device serial number."
+ echo " If serial is specified, cuttlefish device launch will be skipped"
+ echo " -t, --test=TEST_NAME The test target name. Can be repeated"
+ echo " If test is not specified, all kselftests will be run"
+ echo " -h, --help Display this help message and exit"
+ echo ""
+ echo "Examples:"
+ echo "$0"
+ echo "$0 -t regmap-kunit.ko -t lib_test.ko"
+ echo "$0 -s 127.0.0.1:45549"
+ echo ""
+ exit 0
+}
+
+BUILD_KERNEL=true
+LAUNCH_CVD=true
+KILL_CVD=true
+DIST_DIR=/tmp/kernel_dist
+SERIAL_NUMBER=
+MODULE_NAME="kunit"
+TEST_FILTERS=
+SELECTED_TESTS=
+
+while test $# -gt 0; do
+ case "$1" in
+ -h|--help)
+ print_help
+ ;;
+ --skip-kernel-build)
+ BUILD_KERNEL=false
+ shift
+ ;;
+ --skip-cvd-launch)
+ LAUNCH_CVD=false
+ shift
+ ;;
+ --skip-cvd-kill)
+ KILL_CVD=false
+ shift
+ ;;
+ -d)
+ shift
+ if test $# -gt 0; then
+ DIST_DIR=$1
+ else
+ echo "kernel distribution directory is not specified"
+ exit 1
+ fi
+ shift
+ ;;
+ --dist-dir*)
+ DIST_DIR=$(echo $1 | sed -e "s/^[^=]*=//g")
+ shift
+ ;;
+ -s)
+ shift
+ if test $# -gt 0; then
+ SERIAL_NUMBER=$1
+ BUILD_KERNEL=false
+ LAUNCH_CVD=false
+ KILL_CVD=false
+ else
+ echo "device serial is not specified"
+ exit 1
+ fi
+ shift
+ ;;
+ --serial*)
+ BUILD_KERNEL=false
+ LAUNCH_CVD=false
+ KILL_CVD=false
+ SERIAL_NUMBER=$(echo $1 | sed -e "s/^[^=]*=//g")
+ shift
+ ;;
+ -t)
+ shift
+ if test $# -gt 0; then
+ TEST_NAME=$1
+ SELECTED_TESTS+="$TEST_NAME "
+ TEST_FILTERS+="--include-filter '$MODULE_NAME $TEST_NAME' "
+ else
+ echo "test name is not specified"
+ exit 1
+ fi
+ shift
+ ;;
+ --test*)
+ TEST_NAME=$(echo $1 | sed -e "s/^[^=]*=//g")
+ SELECTED_TESTS+="$TEST_NAME "
+ TEST_FILTERS+="--include-filter '$MODULE_NAME $TEST_NAME'"
+ shift
+ ;;
+ *)
+ ;;
+ esac
+done
+
+if $BUILD_KERNEL; then
+ echo "Building kernel..."
+ # TODO: add support to build kernel for physical device
+ $BAZEL run //common-modules/virtual-device:virtual_device_x86_64_dist -- --dist_dir=$DIST_DIR
+ exit_code=$?
+ if [ $exit_code -eq 0 ]; then
+ echo "Command succeeded"
+ else
+ echo "Command failed with exit code $exit_code"
+ exit 1
+ fi
+ exit_code=$?
+ if [ $exit_code -eq 0 ]; then
+ echo "Build kernel succeeded"
+ else
+ echo "Build kernel failed with exit code $exit_code"
+ exit 1
+ fi
+fi
+
+if $LAUNCH_CVD; then
+ echo "Launching cvd..."
+ CVD_OUT=$($ACLOUD create --local-kernel-image $DIST_DIR)
+ echo $CVD_OUT
+ INSTANCE_NAME=$(echo "$CVD_OUT" | grep -o "ins-[^\[]*")
+ SERIAL_STRING=$(echo "$CVD_OUT" | grep -oE 'device serial: ([0-9]+\.){3}[0-9]+:[0-9]+')
+ SERIAL_NUMBER=$(echo "$SERIAL_STRING" | sed 's/device serial: //')
+ echo "acloud launched device $SERIAL_NUMBER with instance $INSTANCE_NAME"
+fi
+
+if [ -z "$SERIAL_NUMBER" ]; then
+ echo "Device serial is not provided by acloud or by command line flag -s|--serial flag"
+ exit 1
+else
+ echo "Test with device: $SERIAL_NUMBER"
+fi
+
+echo "Get abi from device $SERIAL_NUMBER"
+ABI=$(adb -s $SERIAL_NUMBER shell getprop ro.product.cpu.abi)
+echo "Building kunit tests according to device $SERIAL_NUMBER ro.product.cpu.abi $ABI ..."
+# $ tools/bazel run -- //common:kunit_tests_x86_64_install -v --destdir /tmp/kunit_tests
+case $ABI in
+ arm64*)
+ $BAZEL run //common:kunit_tests_arm64 -- -v --destdir $TESTSDIR
+ ;;
+ x86_64*)
+ $BAZEL run //common:kunit_tests_x86_64 -- -v --destdir $TESTSDIR
+ ;;
+ *)
+ echo "$ABI not supported"
+ exit 1
+ ;;
+esac
+exit_code=$?
+if [ $exit_code -eq 0 ]; then
+ echo "Build kunit succeeded"
+else
+ echo "Build kunit failed with exit code $exit_code"
+ exit 1
+fi
+
+if [ -z "$SELECTED_TESTS" ]; then
+ echo "Running all KUnit tests with device $SERIAL_NUMBER..."
+ TEST_FILTERS="--include-filter $MODULE_NAME"
+else
+ echo "Running $SELECTED_TESTS with device $SERIAL_NUMBER ..."
+fi
+
+tf_cli="JAVA_HOME=$JDK_PATH PATH=$JDK_PATH/bin:$PATH $TRADEFED run commandAndExit \
+template/local_min --template:map test=suite/test_mapping_suite \
+$TEST_FILTERS --tests-dir=$TESTSDIR --log-file-path=$LOG_DIR \
+--primary-abi-only -s $SERIAL_NUMBER"
+
+echo "Runing tradefed command: $tf_cli"
+
+eval $tf_cli
+
+if $LAUNCH_CVD && $KILL_CVD; then
+ echo "Test finished. Deleting cvd instance $INSTANCE_NAME ..."
+ $ACLOUD delete --instance-names $INSTANCE_NAME
+fi
diff --git a/tools/testing/kunit/android/tradefed_configs/config_arm64.xml b/tools/testing/kunit/android/tradefed_configs/config_arm64.xml
new file mode 100644
index 000000000000..b5976dc5e5cb
--- /dev/null
+++ b/tools/testing/kunit/android/tradefed_configs/config_arm64.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tools/testing/kunit/android/tradefed_configs/config_x86_64.xml b/tools/testing/kunit/android/tradefed_configs/config_x86_64.xml
new file mode 100644
index 000000000000..79f98ba4a4ff
--- /dev/null
+++ b/tools/testing/kunit/android/tradefed_configs/config_x86_64.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tools/testing/kunit/configs/android/kunit_defconfig b/tools/testing/kunit/configs/android/kunit_defconfig
index a3c43e3912e7..f3a96fcf5ade 100644
--- a/tools/testing/kunit/configs/android/kunit_defconfig
+++ b/tools/testing/kunit/configs/android/kunit_defconfig
@@ -20,7 +20,7 @@ CONFIG_RTC_LIB_KUNIT_TEST=m
CONFIG_IIO_FORMAT_KUNIT_TEST=m
CONFIG_EXT4_KUNIT_TESTS=m
CONFIG_FAT_KUNIT_TEST=m
-CONFIG_KFENCE_KUNIT_TEST=m
+# CONFIG_KFENCE_KUNIT_TEST=m
CONFIG_KUNIT_TEST=m
CONFIG_KUNIT_EXAMPLE_TEST=m