xref: /aosp_15_r20/build/bazel/rules/apex/apex_mk_test.bzl (revision 7594170e27e0732bc44b93d1440d87a54b6ffe7c)
1*7594170eSAndroid Build Coastguard Worker# Copyright (C) 2022 The Android Open Source Project
2*7594170eSAndroid Build Coastguard Worker#
3*7594170eSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*7594170eSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*7594170eSAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*7594170eSAndroid Build Coastguard Worker#
7*7594170eSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
8*7594170eSAndroid Build Coastguard Worker#
9*7594170eSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*7594170eSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*7594170eSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*7594170eSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*7594170eSAndroid Build Coastguard Worker# limitations under the License.
14*7594170eSAndroid Build Coastguard Worker
15*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
16*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules:prebuilt_file.bzl", "prebuilt_file")
17*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules:sh_binary.bzl", "sh_binary")
18*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/cc:cc_binary.bzl", "cc_binary")
19*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/cc:cc_library_shared.bzl", "cc_library_shared")
20*7594170eSAndroid Build Coastguard Workerload(":apex_info.bzl", "ApexMkInfo")
21*7594170eSAndroid Build Coastguard Workerload(":apex_test_helpers.bzl", "test_apex")
22*7594170eSAndroid Build Coastguard Worker
23*7594170eSAndroid Build Coastguard Workerdef _apex_files_info_test(ctx):
24*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
25*7594170eSAndroid Build Coastguard Worker    target = analysistest.target_under_test(env)
26*7594170eSAndroid Build Coastguard Worker
27*7594170eSAndroid Build Coastguard Worker    # no attr.string_keyed_string_dict_list.. so we'll have to make do :-)
28*7594170eSAndroid Build Coastguard Worker    expected_files_info = [json.decode(i) for i in ctx.attr.expected_files_info]
29*7594170eSAndroid Build Coastguard Worker    actual_files_info = target[ApexMkInfo].files_info
30*7594170eSAndroid Build Coastguard Worker
31*7594170eSAndroid Build Coastguard Worker    asserts.equals(env, len(expected_files_info), len(actual_files_info))
32*7594170eSAndroid Build Coastguard Worker
33*7594170eSAndroid Build Coastguard Worker    for idx, expected in enumerate(expected_files_info):
34*7594170eSAndroid Build Coastguard Worker        actual = actual_files_info[idx]
35*7594170eSAndroid Build Coastguard Worker
36*7594170eSAndroid Build Coastguard Worker        asserts.equals(env, len(expected), len(actual))
37*7594170eSAndroid Build Coastguard Worker        for k, v in expected.items():
38*7594170eSAndroid Build Coastguard Worker            if k in ["built_file", "unstripped_built_file"]:
39*7594170eSAndroid Build Coastguard Worker                # don't test the part that contains the configuration hash, which is sensitive to changes.
40*7594170eSAndroid Build Coastguard Worker                expected_path_without_config = v.split("bazel-out/")[-1]
41*7594170eSAndroid Build Coastguard Worker                asserts.true(env, actual[k].endswith(expected_path_without_config))
42*7594170eSAndroid Build Coastguard Worker            else:
43*7594170eSAndroid Build Coastguard Worker                asserts.equals(env, v, actual[k])
44*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
45*7594170eSAndroid Build Coastguard Worker
46*7594170eSAndroid Build Coastguard Workerapex_files_info_test = analysistest.make(
47*7594170eSAndroid Build Coastguard Worker    _apex_files_info_test,
48*7594170eSAndroid Build Coastguard Worker    attrs = {
49*7594170eSAndroid Build Coastguard Worker        "expected_files_info": attr.string_list(
50*7594170eSAndroid Build Coastguard Worker            doc = "expected files info",
51*7594170eSAndroid Build Coastguard Worker        ),
52*7594170eSAndroid Build Coastguard Worker    },
53*7594170eSAndroid Build Coastguard Worker)
54*7594170eSAndroid Build Coastguard Worker
55*7594170eSAndroid Build Coastguard Workerdef _test_apex_files_info_basic():
56*7594170eSAndroid Build Coastguard Worker    name = "apex_files_info_basic"
57*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
58*7594170eSAndroid Build Coastguard Worker
59*7594170eSAndroid Build Coastguard Worker    test_apex(name = name)
60*7594170eSAndroid Build Coastguard Worker
61*7594170eSAndroid Build Coastguard Worker    apex_files_info_test(
62*7594170eSAndroid Build Coastguard Worker        name = test_name,
63*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
64*7594170eSAndroid Build Coastguard Worker        expected_files_info = [
65*7594170eSAndroid Build Coastguard Worker            # deliberately empty.
66*7594170eSAndroid Build Coastguard Worker        ],
67*7594170eSAndroid Build Coastguard Worker    )
68*7594170eSAndroid Build Coastguard Worker
69*7594170eSAndroid Build Coastguard Worker    return test_name
70*7594170eSAndroid Build Coastguard Worker
71*7594170eSAndroid Build Coastguard Workerdef _test_apex_files_info_complex():
72*7594170eSAndroid Build Coastguard Worker    name = "apex_files_info_complex"
73*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
74*7594170eSAndroid Build Coastguard Worker
75*7594170eSAndroid Build Coastguard Worker    prebuilt_file(
76*7594170eSAndroid Build Coastguard Worker        name = name + "_file",
77*7594170eSAndroid Build Coastguard Worker        src = name + "_file.txt",
78*7594170eSAndroid Build Coastguard Worker        dir = "etc",
79*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
80*7594170eSAndroid Build Coastguard Worker    )
81*7594170eSAndroid Build Coastguard Worker
82*7594170eSAndroid Build Coastguard Worker    sh_binary(
83*7594170eSAndroid Build Coastguard Worker        name = name + "_bin_sh",
84*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_bin.sh"],
85*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
86*7594170eSAndroid Build Coastguard Worker    )
87*7594170eSAndroid Build Coastguard Worker
88*7594170eSAndroid Build Coastguard Worker    cc_binary(
89*7594170eSAndroid Build Coastguard Worker        name = name + "_bin_cc",
90*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_bin.cc"],
91*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
92*7594170eSAndroid Build Coastguard Worker    )
93*7594170eSAndroid Build Coastguard Worker
94*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
95*7594170eSAndroid Build Coastguard Worker        name = name + "_lib_cc",
96*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib.cc"],
97*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
98*7594170eSAndroid Build Coastguard Worker    )
99*7594170eSAndroid Build Coastguard Worker
100*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
101*7594170eSAndroid Build Coastguard Worker        name = name + "_lib2_cc",
102*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib2.cc"],
103*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
104*7594170eSAndroid Build Coastguard Worker    )
105*7594170eSAndroid Build Coastguard Worker
106*7594170eSAndroid Build Coastguard Worker    test_apex(
107*7594170eSAndroid Build Coastguard Worker        name = name,
108*7594170eSAndroid Build Coastguard Worker        binaries = [name + "_bin_sh", name + "_bin_cc"],
109*7594170eSAndroid Build Coastguard Worker        prebuilts = [name + "_file"],
110*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [name + "_lib_cc"],
111*7594170eSAndroid Build Coastguard Worker        native_shared_libs_64 = [name + "_lib2_cc"],
112*7594170eSAndroid Build Coastguard Worker    )
113*7594170eSAndroid Build Coastguard Worker
114*7594170eSAndroid Build Coastguard Worker    apex_files_info_test(
115*7594170eSAndroid Build Coastguard Worker        name = test_name,
116*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
117*7594170eSAndroid Build Coastguard Worker        target_compatible_with = ["//build/bazel_common_rules/platforms/os:android", "//build/bazel_common_rules/platforms/arch:arm64"],
118*7594170eSAndroid Build Coastguard Worker        expected_files_info = [json.encode(i) for i in [
119*7594170eSAndroid Build Coastguard Worker            {
120*7594170eSAndroid Build Coastguard Worker                "built_file": "bazel-out/bin/build/bazel/rules/apex/bin/apex_files_info_complex_bin_cc/apex_files_info_complex_bin_cc",
121*7594170eSAndroid Build Coastguard Worker                "class": "nativeExecutable",
122*7594170eSAndroid Build Coastguard Worker                "install_dir": "bin",
123*7594170eSAndroid Build Coastguard Worker                "basename": "apex_files_info_complex_bin_cc",
124*7594170eSAndroid Build Coastguard Worker                "package": "build/bazel/rules/apex",
125*7594170eSAndroid Build Coastguard Worker                "make_module_name": "apex_files_info_complex_bin_cc",
126*7594170eSAndroid Build Coastguard Worker                "arch": "arm64",
127*7594170eSAndroid Build Coastguard Worker                "unstripped_built_file": "bazel-out/build/bazel/rules/apex/apex_files_info_complex_bin_cc_unstripped",
128*7594170eSAndroid Build Coastguard Worker            },
129*7594170eSAndroid Build Coastguard Worker            {
130*7594170eSAndroid Build Coastguard Worker                "built_file": "bazel-out/bin/build/bazel/rules/apex/apex_files_info_complex_bin_sh",
131*7594170eSAndroid Build Coastguard Worker                "class": "shBinary",
132*7594170eSAndroid Build Coastguard Worker                "install_dir": "bin",
133*7594170eSAndroid Build Coastguard Worker                "basename": "apex_files_info_complex_bin_sh",
134*7594170eSAndroid Build Coastguard Worker                "package": "build/bazel/rules/apex",
135*7594170eSAndroid Build Coastguard Worker                "make_module_name": "apex_files_info_complex_bin_sh",
136*7594170eSAndroid Build Coastguard Worker                "arch": "arm64",
137*7594170eSAndroid Build Coastguard Worker            },
138*7594170eSAndroid Build Coastguard Worker            {
139*7594170eSAndroid Build Coastguard Worker                "built_file": "build/bazel/rules/apex/apex_files_info_complex_file.txt",
140*7594170eSAndroid Build Coastguard Worker                "class": "etc",
141*7594170eSAndroid Build Coastguard Worker                "install_dir": "etc",
142*7594170eSAndroid Build Coastguard Worker                "basename": "apex_files_info_complex_file",
143*7594170eSAndroid Build Coastguard Worker                "package": "build/bazel/rules/apex",
144*7594170eSAndroid Build Coastguard Worker                "make_module_name": "apex_files_info_complex_file",
145*7594170eSAndroid Build Coastguard Worker                "arch": "arm64",
146*7594170eSAndroid Build Coastguard Worker            },
147*7594170eSAndroid Build Coastguard Worker            {
148*7594170eSAndroid Build Coastguard Worker                "built_file": "bazel-out/bin/build/bazel/rules/apex/apex_files_info_complex_lib2_cc/apex_files_info_complex_lib2_cc.so",
149*7594170eSAndroid Build Coastguard Worker                "class": "nativeSharedLib",
150*7594170eSAndroid Build Coastguard Worker                "install_dir": "lib64",
151*7594170eSAndroid Build Coastguard Worker                "basename": "apex_files_info_complex_lib2_cc.so",
152*7594170eSAndroid Build Coastguard Worker                "package": "build/bazel/rules/apex",
153*7594170eSAndroid Build Coastguard Worker                "make_module_name": "apex_files_info_complex_lib2_cc",
154*7594170eSAndroid Build Coastguard Worker                "arch": "arm64",
155*7594170eSAndroid Build Coastguard Worker                "unstripped_built_file": "bazel-out/bin/build/bazel/rules/apex/libapex_files_info_complex_lib2_cc_unstripped.so",
156*7594170eSAndroid Build Coastguard Worker            },
157*7594170eSAndroid Build Coastguard Worker            {
158*7594170eSAndroid Build Coastguard Worker                "built_file": "bazel-out/bin/build/bazel/rules/apex/apex_files_info_complex_lib_cc/apex_files_info_complex_lib_cc.so",
159*7594170eSAndroid Build Coastguard Worker                "class": "nativeSharedLib",
160*7594170eSAndroid Build Coastguard Worker                "install_dir": "lib",
161*7594170eSAndroid Build Coastguard Worker                "basename": "apex_files_info_complex_lib_cc.so",
162*7594170eSAndroid Build Coastguard Worker                "package": "build/bazel/rules/apex",
163*7594170eSAndroid Build Coastguard Worker                "make_module_name": "apex_files_info_complex_lib_cc",
164*7594170eSAndroid Build Coastguard Worker                "arch": "arm",
165*7594170eSAndroid Build Coastguard Worker                "unstripped_built_file": "bazel-out/bin/build/bazel/rules/apex/libapex_files_info_complex_lib_cc_unstripped.so",
166*7594170eSAndroid Build Coastguard Worker            },
167*7594170eSAndroid Build Coastguard Worker            {
168*7594170eSAndroid Build Coastguard Worker                "built_file": "bazel-out/bin/external/libcxx/libc++/libc++.so",
169*7594170eSAndroid Build Coastguard Worker                "class": "nativeSharedLib",
170*7594170eSAndroid Build Coastguard Worker                "install_dir": "lib",
171*7594170eSAndroid Build Coastguard Worker                "basename": "libc++.so",
172*7594170eSAndroid Build Coastguard Worker                "package": "external/libcxx",
173*7594170eSAndroid Build Coastguard Worker                "make_module_name": "libc++",
174*7594170eSAndroid Build Coastguard Worker                "arch": "arm",
175*7594170eSAndroid Build Coastguard Worker                "unstripped_built_file": "bazel-out/bin/external/libcxx/liblibc++_unstripped.so",
176*7594170eSAndroid Build Coastguard Worker            },
177*7594170eSAndroid Build Coastguard Worker            {
178*7594170eSAndroid Build Coastguard Worker                "built_file": "bazel-out/bin/external/libcxx/libc++/libc++.so",
179*7594170eSAndroid Build Coastguard Worker                "class": "nativeSharedLib",
180*7594170eSAndroid Build Coastguard Worker                "install_dir": "lib64",
181*7594170eSAndroid Build Coastguard Worker                "basename": "libc++.so",
182*7594170eSAndroid Build Coastguard Worker                "package": "external/libcxx",
183*7594170eSAndroid Build Coastguard Worker                "make_module_name": "libc++",
184*7594170eSAndroid Build Coastguard Worker                "arch": "arm64",
185*7594170eSAndroid Build Coastguard Worker                "unstripped_built_file": "bazel-out/bin/external/libcxx/liblibc++_unstripped.so",
186*7594170eSAndroid Build Coastguard Worker            },
187*7594170eSAndroid Build Coastguard Worker        ]],
188*7594170eSAndroid Build Coastguard Worker    )
189*7594170eSAndroid Build Coastguard Worker
190*7594170eSAndroid Build Coastguard Worker    return test_name
191*7594170eSAndroid Build Coastguard Worker
192*7594170eSAndroid Build Coastguard Workerdef apex_mk_test_suite(name):
193*7594170eSAndroid Build Coastguard Worker    native.test_suite(
194*7594170eSAndroid Build Coastguard Worker        name = name,
195*7594170eSAndroid Build Coastguard Worker        tests = [
196*7594170eSAndroid Build Coastguard Worker            _test_apex_files_info_basic(),
197*7594170eSAndroid Build Coastguard Worker            _test_apex_files_info_complex(),
198*7594170eSAndroid Build Coastguard Worker        ],
199*7594170eSAndroid Build Coastguard Worker    )
200