diff --git a/BUILD.bazel b/BUILD.bazel
index 74a8a523cd4d..2f75900117d5 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -1,7 +1,6 @@
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2021 The Android Open Source Project
-load("@bazel_skylib//lib:paths.bzl", "paths")
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")
@@ -27,7 +26,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 = [
@@ -76,6 +75,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.
"",
@@ -85,7 +85,8 @@ write_file(
write_file(
name = "gki_system_dlkm_modules_x86_64",
out = "android/gki_system_dlkm_modules_x86_64",
- content = get_gki_modules_list("x86_64") + [
+ # Do not built kunit modules into system_dlkm
+ content = get_gki_modules_list("arm64") + [
# Ensure new line at the end.
"",
],
@@ -93,7 +94,7 @@ write_file(
define_common_kernels(target_configs = {
"kernel_aarch64": {
- "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": [
@@ -103,7 +104,7 @@ define_common_kernels(target_configs = {
},
"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",
@@ -613,7 +614,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"],
)
@@ -637,7 +638,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"],
)
@@ -727,153 +728,84 @@ kernel_build(
)
# KUnit test targets
-
-# 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",
- ],
- make_goals = ["modules"],
- module_outs = _KUNIT_COMMON_MODULES + _KUNIT_CLK_MODULES,
-)
-
-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
- ],
- make_goals = ["modules"],
- module_outs = _KUNIT_COMMON_MODULES,
-)
-
-copy_to_dist_dir(
- name = "kunit_x86_64_dist",
- data = [":kunit_x86_64"],
- dist_dir = "out/kunit_x86_64/dist",
- flat = True,
- log = "info",
-)
-
_KUNIT_DIR = "testcases/kunit"
pkg_files(
- name = "kunit_arm64_stripped",
- srcs = [":kunit_aarch64"],
- prefix = "arm64",
- strip_prefix = paths.join(
- strip_prefix.from_pkg(),
- "kunit_aarch64",
- ),
+ name = "kunit_tests_config_arm64",
+ srcs = [
+ "tools/testing/kunit/android/tradefed_configs/config_arm64.xml",
+ ],
+ renames = {
+ "tools/testing/kunit/android/tradefed_configs/config_arm64.xml": _KUNIT_DIR + "/kunit.config",
+ },
visibility = ["//visibility:private"],
)
pkg_files(
- name = "kunit_arm64_test_config",
- srcs = [":tools/testing/kunit/android/tradefed_configs/config_arm64.xml"],
+ name = "kunit_tests_config_x86_64",
+ srcs = [
+ "tools/testing/kunit/android/tradefed_configs/config_x86_64.xml",
+ ],
renames = {
- "tools/testing/kunit/android/tradefed_configs/config_arm64.xml": "kunit.config",
+ "tools/testing/kunit/android/tradefed_configs/config_x86_64.xml": _KUNIT_DIR + "/kunit.config",
},
visibility = ["//visibility:private"],
)
+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_pkg_files",
srcs = [
- ":kunit_arm64_stripped",
- ":kunit_arm64_test_config",
+ ":kunit_modules_arm64",
+ ":kunit_tests_config_arm64",
],
- prefix = _KUNIT_DIR,
- visibility = ["//visibility:private"],
-)
-
-pkg_install(
- name = "kunit_tests_arm64_install",
- srcs = [
- ":kunit_tests_arm64_pkg_files",
- ],
-)
-
-pkg_files(
- name = "kunit_x86_64_stripped",
- srcs = [":kunit_x86_64"],
- prefix = "x86_64",
- strip_prefix = paths.join(
- strip_prefix.from_pkg(),
- "kunit_x86_64",
- ),
- visibility = ["//visibility:private"],
-)
-
-pkg_files(
- name = "kunit_x86_64_test_config",
- srcs = [":tools/testing/kunit/android/tradefed_configs/config_x86_64.xml"],
- renames = {
- "tools/testing/kunit/android/tradefed_configs/config_x86_64.xml": "kunit.config",
- },
visibility = ["//visibility:private"],
)
pkg_filegroup(
name = "kunit_tests_x86_64_pkg_files",
srcs = [
- ":kunit_x86_64_stripped",
- ":kunit_x86_64_test_config",
+ ":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",
],
- prefix = _KUNIT_DIR,
visibility = ["//visibility:private"],
)
pkg_install(
- name = "kunit_tests_x86_64_install",
+ name = "kunit_tests_x86_64",
srcs = [
":kunit_tests_x86_64_pkg_files",
],
+ visibility = ["//visibility:private"],
)
# DDK Headers
diff --git a/arch/arm64/configs/gki_defconfig b/arch/arm64/configs/gki_defconfig
index e9d7068f08b4..3fe99c971216 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
@@ -278,6 +279,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
@@ -290,6 +292,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
@@ -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
@@ -458,6 +462,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
@@ -481,6 +487,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
@@ -533,6 +540,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
@@ -542,6 +550,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_MAILBOX=y
@@ -560,6 +570,7 @@ CONFIG_PM_DEVFREQ_EVENT=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
@@ -572,6 +583,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
@@ -588,6 +600,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
@@ -713,7 +726,9 @@ CONFIG_SCHEDSTATS=y
CONFIG_PROVE_LOCKING=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 7c999b474498..0f490720bce3 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
@@ -273,6 +274,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_HOTPLUG_PCI_PCIE=y
@@ -284,6 +286,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
@@ -351,6 +354,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
@@ -428,6 +432,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
@@ -451,6 +457,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
@@ -502,6 +509,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_UIO=y
CONFIG_VHOST_VSOCK=y
@@ -514,6 +522,7 @@ CONFIG_PM_DEVFREQ_EVENT=y
CONFIG_IIO=y
CONFIG_IIO_BUFFER=y
CONFIG_IIO_TRIGGER=y
+CONFIG_IIO_FORMAT_KUNIT_TEST=m
CONFIG_POWERCAP=y
CONFIG_IDLE_INJECT=y
CONFIG_ANDROID_BINDER_IPC=y
@@ -524,6 +533,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
@@ -540,6 +550,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
@@ -662,6 +673,8 @@ CONFIG_SCHEDSTATS=y
CONFIG_PROVE_LOCKING=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 53437a788cfb..058b264f3593 100644
--- a/modules.bzl
+++ b/modules.bzl
@@ -125,3 +125,61 @@ def get_gki_modules_list(arch = None):
))
return gki_modules_list
+
+_KUNIT_FRAMEWORK_MODULES = [
+ "lib/kunit/kunit.ko",
+]
+
+# Modules defined by tools/testing/kunit/configs/android/kunit_defconfig
+_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",
+]
+
+# Modules defined by tools/testing/kunit/configs/android/kunit_clk_defconfig
+_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 13161d75a1da..c6574d35ba46 100755
--- a/tools/testing/android/bin/kselftest.sh
+++ b/tools/testing/android/bin/kselftest.sh
@@ -6,7 +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=${TMPDIR:-/tmp}/kselftest_$USER/$(date +%Y%m%d_%H%M%S)
+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]"
@@ -129,6 +130,13 @@ if $BUILD_KERNEL; then
# TODO: add support to build kernel for physical device
$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
@@ -163,6 +171,13 @@ case $ABI in
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..."
@@ -171,8 +186,8 @@ 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 \
+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"
diff --git a/tools/testing/android/bin/kunit.sh b/tools/testing/android/bin/kunit.sh
new file mode 100755
index 000000000000..3f20c8b11482
--- /dev/null
+++ b/tools/testing/android/bin/kunit.sh
@@ -0,0 +1,197 @@
+#!/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=out/
+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 ..."
+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
index bbf91c347b8e..80f05ac73396 100644
--- a/tools/testing/kunit/android/tradefed_configs/config_arm64.xml
+++ b/tools/testing/kunit/android/tradefed_configs/config_arm64.xml
@@ -6,27 +6,32 @@
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
diff --git a/tools/testing/kunit/android/tradefed_configs/config_x86_64.xml b/tools/testing/kunit/android/tradefed_configs/config_x86_64.xml
index d5d375feaa54..6beabe709f10 100644
--- a/tools/testing/kunit/android/tradefed_configs/config_x86_64.xml
+++ b/tools/testing/kunit/android/tradefed_configs/config_x86_64.xml
@@ -6,24 +6,29 @@
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+