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 @@