diff options
author | Ulises Mendez Martinez <umendez@google.com> | 2024-02-07 21:53:33 +0000 |
---|---|---|
committer | Ulises Mendez Martinez <umendez@google.com> | 2024-02-08 14:15:08 +0000 |
commit | afb0c95c33794df724fb30d5b1a5cad7a8e9535e (patch) | |
tree | cf2b3890b21b0c24cc7ce49679d70ee807b1a9d9 | |
parent | 72026a25a1055af8a4ae4860142a28e31264923c (diff) | |
download | build-afb0c95c33794df724fb30d5b1a5cad7a8e9535e.tar.gz |
Kleaf: Add testing for images with ddk modules
Bug: 306122000
Change-Id: I43d17a45caf81e2be7a281bd8498baa0b7b2ef80
Signed-off-by: Ulises Mendez Martinez <umendez@google.com>
(cherry picked from commit cf40b51691f3690a198c6aaeccb55baa8d4cc0b0)
-rw-r--r-- | kleaf/tests/ddk_test/BUILD.bazel | 3 | ||||
-rw-r--r-- | kleaf/tests/ddk_test/ddk_images_test.bzl | 166 | ||||
-rw-r--r-- | kleaf/tests/ddk_test/license.c | 2 |
3 files changed, 171 insertions, 0 deletions
diff --git a/kleaf/tests/ddk_test/BUILD.bazel b/kleaf/tests/ddk_test/BUILD.bazel index 4d6b7bbf..cd2ada24 100644 --- a/kleaf/tests/ddk_test/BUILD.bazel +++ b/kleaf/tests/ddk_test/BUILD.bazel @@ -16,12 +16,15 @@ load("//build/kernel/kleaf/impl:ddk/ddk_module.bzl", "ddk_module") load("//build/kernel/kleaf/impl:kernel_build.bzl", "kernel_build") load("//build/kernel/kleaf/tests:failure_test.bzl", "failure_test") load(":ddk_headers_test.bzl", "ddk_headers_test_suite") +load(":ddk_images_test.bzl", "ddk_images_test_suite") load(":ddk_module_test.bzl", "ddk_module_test_suite") load(":ddk_submodule_test.bzl", "ddk_submodule_test") load(":makefiles_test.bzl", "makefiles_test_suite") ddk_headers_test_suite(name = "ddk_headers_test_suite") +ddk_images_test_suite(name = "ddk_images_test_suite") + ddk_module_test_suite(name = "ddk_module_test_suite") ddk_submodule_test(name = "ddk_submodule_test") diff --git a/kleaf/tests/ddk_test/ddk_images_test.bzl b/kleaf/tests/ddk_test/ddk_images_test.bzl new file mode 100644 index 00000000..7a05d7a2 --- /dev/null +++ b/kleaf/tests/ddk_test/ddk_images_test.bzl @@ -0,0 +1,166 @@ +# Copyright (C) 2024 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Tests for `kernel_images` with `ddk_module`'s.""" + +load("@bazel_skylib//lib:paths.bzl", "paths") +load("@bazel_skylib//rules:write_file.bzl", "write_file") +load( + "//build/kernel/kleaf:kernel.bzl", + "ddk_module", + "kernel_images", + "kernel_module_group", + "kernel_modules_install", +) +load("//build/kernel/kleaf/impl:hermetic_toolchain.bzl", "hermetic_toolchain") +load("//build/kernel/kleaf/tests/utils:contain_lines_test.bzl", "contain_lines_test") + +def _get_top_level_file_impl(ctx): + out = ctx.actions.declare_file(paths.join(ctx.attr.name, ctx.attr.filename)) + src = None + for file in ctx.files.target: + if file.basename == ctx.attr.filename: + src = file + break + + hermetic_tools = hermetic_toolchain.get(ctx) + command = hermetic_tools.setup + """ + if [[ -f {src} ]]; then + cp -pL {src} {out} + else + : > {out} + fi + """.format( + src = src.path, + out = out.path, + ) + ctx.actions.run_shell( + outputs = [out], + inputs = ctx.files.target, + tools = hermetic_tools.deps, + command = command, + ) + return DefaultInfo( + files = depset([out]), + runfiles = ctx.runfiles(files = [out]), + ) + +get_top_level_file = rule( + implementation = _get_top_level_file_impl, + doc = "Gets the top level file from a rule.", + attrs = { + "target": attr.label(allow_files = True), + "filename": attr.string(), + }, + toolchains = [hermetic_toolchain.type], +) + +def ddk_images_test_suite(name): + """Defines analysis test for `kernel_images` with `ddk_module`'s. + + Args: + name: Name for this test suite. + """ + + # Setup BEGIN + # TODO: Find a way to remove this dependency on ACK. + kernel_build_name = "//common:kernel_aarch64" + ddk_deps = ["//common:all_headers_aarch64"] + + ddk_module( + name = name + "_base", + out = name + "_base.ko", + srcs = ["license.c"], + kernel_build = kernel_build_name, + deps = ddk_deps, + tags = ["manual"], + ) + + ddk_module( + name = name + "_self", + out = name + "_self.ko", + srcs = ["license.c"], + kernel_build = kernel_build_name, + deps = ddk_deps, + tags = ["manual"], + ) + + ddk_module( + name = name + "_dep", + out = name + "_dep.ko", + srcs = ["license.c"], + kernel_build = kernel_build_name, + deps = ddk_deps, + tags = ["manual"], + ) + + kernel_module_group( + name = name + "_group", + srcs = [ + name + "_self", + name + "_base", + ], + tags = ["manual"], + ) + + kernel_modules_install( + name = name + "_modules_install", + kernel_build = kernel_build_name, + kernel_modules = [ + name + "_group", + name + "_dep", + ], + tags = ["manual"], + ) + + kernel_images( + name = name + "_image", + kernel_modules_install = name + "_modules_install", + build_initramfs = True, + tags = ["manual"], + ) + # Setup END + + tests = [] + module_prefix = "extra/build/kernel/kleaf/tests/ddk_test/" + write_file( + name = name + "_expected", + out = name + "_expected/modules.load", + content = [ + module_prefix + name + "_self.ko", + module_prefix + name + "_base.ko", + module_prefix + name + "_dep.ko", + ], + tags = ["manual"], + ) + + get_top_level_file( + name = name + "_modules_load", + filename = "modules.load", + target = name + "_image_initramfs", + tags = ["manual"], + ) + + contain_lines_test( + name = name + "_modules_load_test", + expected = name + "_expected", + actual = name + "_modules_load", + order = True, + ) + tests.append(name + "_modules_load_test") + + native.test_suite( + name = name, + tests = tests, + ) diff --git a/kleaf/tests/ddk_test/license.c b/kleaf/tests/ddk_test/license.c new file mode 100644 index 00000000..5b221984 --- /dev/null +++ b/kleaf/tests/ddk_test/license.c @@ -0,0 +1,2 @@ +#include <linux/module.h> +MODULE_LICENSE("GPL v2");
\ No newline at end of file |