summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlises Mendez Martinez <umendez@google.com>2024-02-07 21:53:33 +0000
committerUlises Mendez Martinez <umendez@google.com>2024-02-08 14:15:08 +0000
commitafb0c95c33794df724fb30d5b1a5cad7a8e9535e (patch)
treecf2b3890b21b0c24cc7ce49679d70ee807b1a9d9
parent72026a25a1055af8a4ae4860142a28e31264923c (diff)
downloadbuild-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.bazel3
-rw-r--r--kleaf/tests/ddk_test/ddk_images_test.bzl166
-rw-r--r--kleaf/tests/ddk_test/license.c2
3 files changed, 171 insertions, 0 deletions
diff --git a/kleaf/tests/ddk_test/BUILD.bazel b/kleaf/tests/ddk_test/BUILD.bazel
index 4d6b7bb..cd2ada2 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 0000000..7a05d7a
--- /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 0000000..5b22198
--- /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