xref: /aosp_15_r20/build/bazel/rules/apex/apex_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:new_sets.bzl", "sets")
16*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
17*7594170eSAndroid Build Coastguard Workerload("@soong_injection//apex_toolchain:constants.bzl", "default_manifest_version")
18*7594170eSAndroid Build Coastguard Workerload("//build/bazel/platforms:platform_utils.bzl", "platforms")
19*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules:common.bzl", "get_dep_targets")
20*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules:prebuilt_file.bzl", "prebuilt_file")
21*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules:sh_binary.bzl", "sh_binary")
22*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/aidl:aidl_interface.bzl", "aidl_interface")
23*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/android:android_app_certificate.bzl", "android_app_certificate")
24*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/cc:cc_binary.bzl", "cc_binary")
25*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/cc:cc_library_headers.bzl", "cc_library_headers")
26*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/cc:cc_library_shared.bzl", "cc_library_shared")
27*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/cc:cc_library_static.bzl", "cc_library_static")
28*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/cc:cc_stub_library.bzl", "cc_stub_suite")
29*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/test_common:flags.bzl", "action_flags_present_only_for_mnemonic_test")
30*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/test_common:rules.bzl", "expect_failure_test", "target_under_test_exist_test")
31*7594170eSAndroid Build Coastguard Workerload(":apex_deps_validation.bzl", "ApexDepsInfo", "apex_dep_infos_to_allowlist_strings")
32*7594170eSAndroid Build Coastguard Workerload(":apex_info.bzl", "ApexInfo", "ApexMkInfo")
33*7594170eSAndroid Build Coastguard Workerload(":apex_test_helpers.bzl", "test_apex")
34*7594170eSAndroid Build Coastguard Worker
35*7594170eSAndroid Build Coastguard WorkerActionArgsInfo = provider(
36*7594170eSAndroid Build Coastguard Worker    fields = {
37*7594170eSAndroid Build Coastguard Worker        "argv": "The link action arguments.",
38*7594170eSAndroid Build Coastguard Worker    },
39*7594170eSAndroid Build Coastguard Worker)
40*7594170eSAndroid Build Coastguard Worker
41*7594170eSAndroid Build Coastguard Workerdef _canned_fs_config_test(ctx):
42*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
43*7594170eSAndroid Build Coastguard Worker    actions = analysistest.target_actions(env)
44*7594170eSAndroid Build Coastguard Worker
45*7594170eSAndroid Build Coastguard Worker    found_canned_fs_config_action = False
46*7594170eSAndroid Build Coastguard Worker
47*7594170eSAndroid Build Coastguard Worker    def pretty_print_list(the_list):
48*7594170eSAndroid Build Coastguard Worker        if not the_list:
49*7594170eSAndroid Build Coastguard Worker            return "[]"
50*7594170eSAndroid Build Coastguard Worker        result = "[\n"
51*7594170eSAndroid Build Coastguard Worker        for item in the_list:
52*7594170eSAndroid Build Coastguard Worker            result += "  \"%s\",\n" % item
53*7594170eSAndroid Build Coastguard Worker        return result + "]"
54*7594170eSAndroid Build Coastguard Worker
55*7594170eSAndroid Build Coastguard Worker    if ctx.attr.expected_extra_cat:
56*7594170eSAndroid Build Coastguard Worker        append_custom_fs_config = [a for a in actions if a.mnemonic == "AppendCustomFsConfig"]
57*7594170eSAndroid Build Coastguard Worker        asserts.true(env, len(append_custom_fs_config) == 1, "could not find the AppendCustomFsConfig action")
58*7594170eSAndroid Build Coastguard Worker        a = append_custom_fs_config[0]
59*7594170eSAndroid Build Coastguard Worker        args = a.argv[2].split(" ")  # first 2 are "/bin/bash" and "-c"
60*7594170eSAndroid Build Coastguard Worker        asserts.equals(env, args[0], "cat")
61*7594170eSAndroid Build Coastguard Worker        asserts.true(env, args[1].endswith("_canned_fs_config.txt"))
62*7594170eSAndroid Build Coastguard Worker        asserts.true(env, args[2].endswith(ctx.attr.expected_extra_cat), "expected %s, but got %s" % (ctx.attr.expected_extra_cat, args[2]))
63*7594170eSAndroid Build Coastguard Worker        asserts.equals(env, args[3], ">")
64*7594170eSAndroid Build Coastguard Worker        asserts.true(env, args[4].endswith("_combined_canned_fs_config.txt"))
65*7594170eSAndroid Build Coastguard Worker
66*7594170eSAndroid Build Coastguard Worker    for a in actions:
67*7594170eSAndroid Build Coastguard Worker        if a.mnemonic != "FileWrite":
68*7594170eSAndroid Build Coastguard Worker            # The canned_fs_config uses ctx.actions.write.
69*7594170eSAndroid Build Coastguard Worker            continue
70*7594170eSAndroid Build Coastguard Worker
71*7594170eSAndroid Build Coastguard Worker        outputs = a.outputs.to_list()
72*7594170eSAndroid Build Coastguard Worker        if len(outputs) != 1:
73*7594170eSAndroid Build Coastguard Worker            continue
74*7594170eSAndroid Build Coastguard Worker        if not outputs[0].basename.endswith("_canned_fs_config.txt"):
75*7594170eSAndroid Build Coastguard Worker            continue
76*7594170eSAndroid Build Coastguard Worker
77*7594170eSAndroid Build Coastguard Worker        found_canned_fs_config_action = True
78*7594170eSAndroid Build Coastguard Worker
79*7594170eSAndroid Build Coastguard Worker        # Don't sort -- the order is significant.
80*7594170eSAndroid Build Coastguard Worker        actual_entries = a.content.split("\n")
81*7594170eSAndroid Build Coastguard Worker        replacement = "64" if platforms.get_target_bitness(ctx.attr._platform_utils) == 64 else ""
82*7594170eSAndroid Build Coastguard Worker        expected_entries = [x.replace("{64_OR_BLANK}", replacement) for x in ctx.attr.expected_entries]
83*7594170eSAndroid Build Coastguard Worker        asserts.equals(env, pretty_print_list(expected_entries), pretty_print_list(actual_entries))
84*7594170eSAndroid Build Coastguard Worker
85*7594170eSAndroid Build Coastguard Worker        break
86*7594170eSAndroid Build Coastguard Worker
87*7594170eSAndroid Build Coastguard Worker    # Ensures that we actually found the canned_fs_config.txt generation action.
88*7594170eSAndroid Build Coastguard Worker    asserts.true(env, found_canned_fs_config_action, "did not find the canned fs config generating action")
89*7594170eSAndroid Build Coastguard Worker
90*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
91*7594170eSAndroid Build Coastguard Worker
92*7594170eSAndroid Build Coastguard Workercanned_fs_config_test = analysistest.make(
93*7594170eSAndroid Build Coastguard Worker    _canned_fs_config_test,
94*7594170eSAndroid Build Coastguard Worker    attrs = {
95*7594170eSAndroid Build Coastguard Worker        "expected_entries": attr.string_list(
96*7594170eSAndroid Build Coastguard Worker            doc = "Expected lines in the canned_fs_config.txt",
97*7594170eSAndroid Build Coastguard Worker        ),
98*7594170eSAndroid Build Coastguard Worker        "expected_extra_cat": attr.string(
99*7594170eSAndroid Build Coastguard Worker            doc = "Filename of the custom canned fs config to be found in the AppendCustomFsConfig action",
100*7594170eSAndroid Build Coastguard Worker        ),
101*7594170eSAndroid Build Coastguard Worker        "_platform_utils": attr.label(
102*7594170eSAndroid Build Coastguard Worker            default = Label("//build/bazel/platforms:platform_utils"),
103*7594170eSAndroid Build Coastguard Worker        ),
104*7594170eSAndroid Build Coastguard Worker    },
105*7594170eSAndroid Build Coastguard Worker)
106*7594170eSAndroid Build Coastguard Worker
107*7594170eSAndroid Build Coastguard Workerdef _test_canned_fs_config_basic():
108*7594170eSAndroid Build Coastguard Worker    name = "apex_canned_fs_config_basic"
109*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
110*7594170eSAndroid Build Coastguard Worker
111*7594170eSAndroid Build Coastguard Worker    test_apex(name = name)
112*7594170eSAndroid Build Coastguard Worker
113*7594170eSAndroid Build Coastguard Worker    canned_fs_config_test(
114*7594170eSAndroid Build Coastguard Worker        name = test_name,
115*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
116*7594170eSAndroid Build Coastguard Worker        expected_entries = [
117*7594170eSAndroid Build Coastguard Worker            "/ 1000 1000 0755",
118*7594170eSAndroid Build Coastguard Worker            "/apex_manifest.json 1000 1000 0644",
119*7594170eSAndroid Build Coastguard Worker            "/apex_manifest.pb 1000 1000 0644",
120*7594170eSAndroid Build Coastguard Worker            "",  # ends with a newline
121*7594170eSAndroid Build Coastguard Worker        ],
122*7594170eSAndroid Build Coastguard Worker    )
123*7594170eSAndroid Build Coastguard Worker
124*7594170eSAndroid Build Coastguard Worker    return test_name
125*7594170eSAndroid Build Coastguard Worker
126*7594170eSAndroid Build Coastguard Workerdef _test_canned_fs_config_custom():
127*7594170eSAndroid Build Coastguard Worker    name = "apex_canned_fs_config_custom"
128*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
129*7594170eSAndroid Build Coastguard Worker
130*7594170eSAndroid Build Coastguard Worker    native.genrule(
131*7594170eSAndroid Build Coastguard Worker        name = name + ".custom_config",
132*7594170eSAndroid Build Coastguard Worker        outs = [name + ".custom.config"],
133*7594170eSAndroid Build Coastguard Worker        cmd = "echo -e \"/2.bin 0 1000 0750\n/1.bin 0 1000 0777\n\" > $@",
134*7594170eSAndroid Build Coastguard Worker    )
135*7594170eSAndroid Build Coastguard Worker
136*7594170eSAndroid Build Coastguard Worker    test_apex(
137*7594170eSAndroid Build Coastguard Worker        name = name,
138*7594170eSAndroid Build Coastguard Worker        canned_fs_config = name + "_custom.config",
139*7594170eSAndroid Build Coastguard Worker    )
140*7594170eSAndroid Build Coastguard Worker
141*7594170eSAndroid Build Coastguard Worker    canned_fs_config_test(
142*7594170eSAndroid Build Coastguard Worker        name = test_name,
143*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
144*7594170eSAndroid Build Coastguard Worker        expected_entries = [
145*7594170eSAndroid Build Coastguard Worker            "/ 1000 1000 0755",
146*7594170eSAndroid Build Coastguard Worker            "/apex_manifest.json 1000 1000 0644",
147*7594170eSAndroid Build Coastguard Worker            "/apex_manifest.pb 1000 1000 0644",
148*7594170eSAndroid Build Coastguard Worker            "",  # ends with a newline
149*7594170eSAndroid Build Coastguard Worker            # unfortunately, due to bazel analysis not being able to read the
150*7594170eSAndroid Build Coastguard Worker            # contents of inputs (i.e. dynamic dependencies), we cannot test for
151*7594170eSAndroid Build Coastguard Worker            # the contents of the custom config here. but, we can test that the
152*7594170eSAndroid Build Coastguard Worker            # custom config is concatenated in the action command with
153*7594170eSAndroid Build Coastguard Worker            # 'expected_extra_cat' below.
154*7594170eSAndroid Build Coastguard Worker        ],
155*7594170eSAndroid Build Coastguard Worker        expected_extra_cat = name + "_custom.config",
156*7594170eSAndroid Build Coastguard Worker    )
157*7594170eSAndroid Build Coastguard Worker
158*7594170eSAndroid Build Coastguard Worker    return test_name
159*7594170eSAndroid Build Coastguard Worker
160*7594170eSAndroid Build Coastguard Workerdef _test_canned_fs_config_binaries():
161*7594170eSAndroid Build Coastguard Worker    name = "apex_canned_fs_config_binaries"
162*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
163*7594170eSAndroid Build Coastguard Worker
164*7594170eSAndroid Build Coastguard Worker    sh_binary(
165*7594170eSAndroid Build Coastguard Worker        name = "bin_sh",
166*7594170eSAndroid Build Coastguard Worker        srcs = ["bin.sh"],
167*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
168*7594170eSAndroid Build Coastguard Worker    )
169*7594170eSAndroid Build Coastguard Worker
170*7594170eSAndroid Build Coastguard Worker    cc_binary(
171*7594170eSAndroid Build Coastguard Worker        name = "bin_cc",
172*7594170eSAndroid Build Coastguard Worker        srcs = ["bin.cc"],
173*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
174*7594170eSAndroid Build Coastguard Worker    )
175*7594170eSAndroid Build Coastguard Worker
176*7594170eSAndroid Build Coastguard Worker    test_apex(
177*7594170eSAndroid Build Coastguard Worker        name = name,
178*7594170eSAndroid Build Coastguard Worker        binaries = ["bin_sh", "bin_cc"],
179*7594170eSAndroid Build Coastguard Worker    )
180*7594170eSAndroid Build Coastguard Worker
181*7594170eSAndroid Build Coastguard Worker    canned_fs_config_test(
182*7594170eSAndroid Build Coastguard Worker        name = test_name,
183*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
184*7594170eSAndroid Build Coastguard Worker        expected_entries = [
185*7594170eSAndroid Build Coastguard Worker            "/ 1000 1000 0755",
186*7594170eSAndroid Build Coastguard Worker            "/apex_manifest.json 1000 1000 0644",
187*7594170eSAndroid Build Coastguard Worker            "/apex_manifest.pb 1000 1000 0644",
188*7594170eSAndroid Build Coastguard Worker            "/lib{64_OR_BLANK}/libc++.so 1000 1000 0644",
189*7594170eSAndroid Build Coastguard Worker            "/bin/bin_cc 0 2000 0755",
190*7594170eSAndroid Build Coastguard Worker            "/bin/bin_sh 0 2000 0755",
191*7594170eSAndroid Build Coastguard Worker            "/bin 0 2000 0755",
192*7594170eSAndroid Build Coastguard Worker            "/lib{64_OR_BLANK} 0 2000 0755",
193*7594170eSAndroid Build Coastguard Worker            "",  # ends with a newline
194*7594170eSAndroid Build Coastguard Worker        ],
195*7594170eSAndroid Build Coastguard Worker        target_compatible_with = ["//build/bazel_common_rules/platforms/os:android"],
196*7594170eSAndroid Build Coastguard Worker    )
197*7594170eSAndroid Build Coastguard Worker
198*7594170eSAndroid Build Coastguard Worker    return test_name
199*7594170eSAndroid Build Coastguard Worker
200*7594170eSAndroid Build Coastguard Workerdef _test_canned_fs_config_native_shared_libs_arm():
201*7594170eSAndroid Build Coastguard Worker    name = "apex_canned_fs_config_native_shared_libs_arm"
202*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
203*7594170eSAndroid Build Coastguard Worker
204*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
205*7594170eSAndroid Build Coastguard Worker        name = name + "_lib_cc",
206*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib.cc"],
207*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
208*7594170eSAndroid Build Coastguard Worker    )
209*7594170eSAndroid Build Coastguard Worker
210*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
211*7594170eSAndroid Build Coastguard Worker        name = name + "_lib2_cc",
212*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib2.cc"],
213*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
214*7594170eSAndroid Build Coastguard Worker    )
215*7594170eSAndroid Build Coastguard Worker
216*7594170eSAndroid Build Coastguard Worker    test_apex(
217*7594170eSAndroid Build Coastguard Worker        name = name,
218*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [name + "_lib_cc"],
219*7594170eSAndroid Build Coastguard Worker        native_shared_libs_64 = [name + "_lib2_cc"],
220*7594170eSAndroid Build Coastguard Worker    )
221*7594170eSAndroid Build Coastguard Worker
222*7594170eSAndroid Build Coastguard Worker    canned_fs_config_test(
223*7594170eSAndroid Build Coastguard Worker        name = test_name,
224*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
225*7594170eSAndroid Build Coastguard Worker        expected_entries = [
226*7594170eSAndroid Build Coastguard Worker            "/ 1000 1000 0755",
227*7594170eSAndroid Build Coastguard Worker            "/apex_manifest.json 1000 1000 0644",
228*7594170eSAndroid Build Coastguard Worker            "/apex_manifest.pb 1000 1000 0644",
229*7594170eSAndroid Build Coastguard Worker            "/lib/apex_canned_fs_config_native_shared_libs_arm_lib_cc.so 1000 1000 0644",
230*7594170eSAndroid Build Coastguard Worker            "/lib/libc++.so 1000 1000 0644",
231*7594170eSAndroid Build Coastguard Worker            "/lib 0 2000 0755",
232*7594170eSAndroid Build Coastguard Worker            "",  # ends with a newline
233*7594170eSAndroid Build Coastguard Worker        ],
234*7594170eSAndroid Build Coastguard Worker        target_compatible_with = ["//build/bazel_common_rules/platforms/arch:arm"],
235*7594170eSAndroid Build Coastguard Worker    )
236*7594170eSAndroid Build Coastguard Worker
237*7594170eSAndroid Build Coastguard Worker    return test_name
238*7594170eSAndroid Build Coastguard Worker
239*7594170eSAndroid Build Coastguard Workerdef _test_canned_fs_config_native_shared_libs_arm64():
240*7594170eSAndroid Build Coastguard Worker    name = "apex_canned_fs_config_native_shared_libs_arm64"
241*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
242*7594170eSAndroid Build Coastguard Worker
243*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
244*7594170eSAndroid Build Coastguard Worker        name = name + "_lib_cc",
245*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib.cc"],
246*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
247*7594170eSAndroid Build Coastguard Worker    )
248*7594170eSAndroid Build Coastguard Worker
249*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
250*7594170eSAndroid Build Coastguard Worker        name = name + "_lib2_cc",
251*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib2.cc"],
252*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
253*7594170eSAndroid Build Coastguard Worker    )
254*7594170eSAndroid Build Coastguard Worker
255*7594170eSAndroid Build Coastguard Worker    test_apex(
256*7594170eSAndroid Build Coastguard Worker        name = name,
257*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [name + "_lib_cc"],
258*7594170eSAndroid Build Coastguard Worker        native_shared_libs_64 = [name + "_lib2_cc"],
259*7594170eSAndroid Build Coastguard Worker    )
260*7594170eSAndroid Build Coastguard Worker
261*7594170eSAndroid Build Coastguard Worker    canned_fs_config_test(
262*7594170eSAndroid Build Coastguard Worker        name = test_name,
263*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
264*7594170eSAndroid Build Coastguard Worker        expected_entries = [
265*7594170eSAndroid Build Coastguard Worker            "/ 1000 1000 0755",
266*7594170eSAndroid Build Coastguard Worker            "/apex_manifest.json 1000 1000 0644",
267*7594170eSAndroid Build Coastguard Worker            "/apex_manifest.pb 1000 1000 0644",
268*7594170eSAndroid Build Coastguard Worker            "/lib/apex_canned_fs_config_native_shared_libs_arm64_lib_cc.so 1000 1000 0644",
269*7594170eSAndroid Build Coastguard Worker            "/lib/libc++.so 1000 1000 0644",
270*7594170eSAndroid Build Coastguard Worker            "/lib64/apex_canned_fs_config_native_shared_libs_arm64_lib2_cc.so 1000 1000 0644",
271*7594170eSAndroid Build Coastguard Worker            "/lib64/libc++.so 1000 1000 0644",
272*7594170eSAndroid Build Coastguard Worker            "/lib 0 2000 0755",
273*7594170eSAndroid Build Coastguard Worker            "/lib64 0 2000 0755",
274*7594170eSAndroid Build Coastguard Worker            "",  # ends with a newline
275*7594170eSAndroid Build Coastguard Worker        ],
276*7594170eSAndroid Build Coastguard Worker        target_compatible_with = ["//build/bazel_common_rules/platforms/arch:arm64"],
277*7594170eSAndroid Build Coastguard Worker    )
278*7594170eSAndroid Build Coastguard Worker
279*7594170eSAndroid Build Coastguard Worker    return test_name
280*7594170eSAndroid Build Coastguard Worker
281*7594170eSAndroid Build Coastguard Workerdef _test_canned_fs_config_prebuilts():
282*7594170eSAndroid Build Coastguard Worker    name = "apex_canned_fs_config_prebuilts"
283*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
284*7594170eSAndroid Build Coastguard Worker
285*7594170eSAndroid Build Coastguard Worker    prebuilt_file(
286*7594170eSAndroid Build Coastguard Worker        name = "file",
287*7594170eSAndroid Build Coastguard Worker        src = "file.txt",
288*7594170eSAndroid Build Coastguard Worker        dir = "etc",
289*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
290*7594170eSAndroid Build Coastguard Worker    )
291*7594170eSAndroid Build Coastguard Worker
292*7594170eSAndroid Build Coastguard Worker    prebuilt_file(
293*7594170eSAndroid Build Coastguard Worker        name = "nested_file_in_dir",
294*7594170eSAndroid Build Coastguard Worker        src = "file2.txt",
295*7594170eSAndroid Build Coastguard Worker        dir = "etc/nested",
296*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
297*7594170eSAndroid Build Coastguard Worker    )
298*7594170eSAndroid Build Coastguard Worker
299*7594170eSAndroid Build Coastguard Worker    prebuilt_file(
300*7594170eSAndroid Build Coastguard Worker        name = "renamed_file_in_dir",
301*7594170eSAndroid Build Coastguard Worker        src = "file3.txt",
302*7594170eSAndroid Build Coastguard Worker        dir = "etc",
303*7594170eSAndroid Build Coastguard Worker        filename = "renamed_file3.txt",
304*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
305*7594170eSAndroid Build Coastguard Worker    )
306*7594170eSAndroid Build Coastguard Worker
307*7594170eSAndroid Build Coastguard Worker    test_apex(
308*7594170eSAndroid Build Coastguard Worker        name = name,
309*7594170eSAndroid Build Coastguard Worker        prebuilts = [
310*7594170eSAndroid Build Coastguard Worker            ":file",
311*7594170eSAndroid Build Coastguard Worker            ":nested_file_in_dir",
312*7594170eSAndroid Build Coastguard Worker            ":renamed_file_in_dir",
313*7594170eSAndroid Build Coastguard Worker        ],
314*7594170eSAndroid Build Coastguard Worker    )
315*7594170eSAndroid Build Coastguard Worker
316*7594170eSAndroid Build Coastguard Worker    canned_fs_config_test(
317*7594170eSAndroid Build Coastguard Worker        name = test_name,
318*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
319*7594170eSAndroid Build Coastguard Worker        expected_entries = [
320*7594170eSAndroid Build Coastguard Worker            "/ 1000 1000 0755",
321*7594170eSAndroid Build Coastguard Worker            "/apex_manifest.json 1000 1000 0644",
322*7594170eSAndroid Build Coastguard Worker            "/apex_manifest.pb 1000 1000 0644",
323*7594170eSAndroid Build Coastguard Worker            "/etc/file 1000 1000 0644",
324*7594170eSAndroid Build Coastguard Worker            "/etc/nested/nested_file_in_dir 1000 1000 0644",
325*7594170eSAndroid Build Coastguard Worker            "/etc/renamed_file3.txt 1000 1000 0644",
326*7594170eSAndroid Build Coastguard Worker            "/etc 0 2000 0755",
327*7594170eSAndroid Build Coastguard Worker            "/etc/nested 0 2000 0755",
328*7594170eSAndroid Build Coastguard Worker            "",  # ends with a newline
329*7594170eSAndroid Build Coastguard Worker        ],
330*7594170eSAndroid Build Coastguard Worker    )
331*7594170eSAndroid Build Coastguard Worker
332*7594170eSAndroid Build Coastguard Worker    return test_name
333*7594170eSAndroid Build Coastguard Worker
334*7594170eSAndroid Build Coastguard Workerdef _test_canned_fs_config_prebuilts_sort_order():
335*7594170eSAndroid Build Coastguard Worker    name = "apex_canned_fs_config_prebuilts_sort_order"
336*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
337*7594170eSAndroid Build Coastguard Worker
338*7594170eSAndroid Build Coastguard Worker    prebuilt_file(
339*7594170eSAndroid Build Coastguard Worker        name = "file_a",
340*7594170eSAndroid Build Coastguard Worker        src = "file_a.txt",
341*7594170eSAndroid Build Coastguard Worker        dir = "etc/a",
342*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
343*7594170eSAndroid Build Coastguard Worker    )
344*7594170eSAndroid Build Coastguard Worker
345*7594170eSAndroid Build Coastguard Worker    prebuilt_file(
346*7594170eSAndroid Build Coastguard Worker        name = "file_b",
347*7594170eSAndroid Build Coastguard Worker        src = "file_b.txt",
348*7594170eSAndroid Build Coastguard Worker        dir = "etc/b",
349*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
350*7594170eSAndroid Build Coastguard Worker    )
351*7594170eSAndroid Build Coastguard Worker
352*7594170eSAndroid Build Coastguard Worker    prebuilt_file(
353*7594170eSAndroid Build Coastguard Worker        name = "file_a_c",
354*7594170eSAndroid Build Coastguard Worker        src = "file_a_c.txt",
355*7594170eSAndroid Build Coastguard Worker        dir = "etc/a/c",
356*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
357*7594170eSAndroid Build Coastguard Worker    )
358*7594170eSAndroid Build Coastguard Worker
359*7594170eSAndroid Build Coastguard Worker    test_apex(
360*7594170eSAndroid Build Coastguard Worker        name = name,
361*7594170eSAndroid Build Coastguard Worker        prebuilts = [
362*7594170eSAndroid Build Coastguard Worker            ":file_a",
363*7594170eSAndroid Build Coastguard Worker            ":file_b",
364*7594170eSAndroid Build Coastguard Worker            ":file_a_c",
365*7594170eSAndroid Build Coastguard Worker        ],
366*7594170eSAndroid Build Coastguard Worker    )
367*7594170eSAndroid Build Coastguard Worker
368*7594170eSAndroid Build Coastguard Worker    canned_fs_config_test(
369*7594170eSAndroid Build Coastguard Worker        name = test_name,
370*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
371*7594170eSAndroid Build Coastguard Worker        expected_entries = [
372*7594170eSAndroid Build Coastguard Worker            "/ 1000 1000 0755",
373*7594170eSAndroid Build Coastguard Worker            "/apex_manifest.json 1000 1000 0644",
374*7594170eSAndroid Build Coastguard Worker            "/apex_manifest.pb 1000 1000 0644",
375*7594170eSAndroid Build Coastguard Worker            "/etc/a/c/file_a_c 1000 1000 0644",
376*7594170eSAndroid Build Coastguard Worker            "/etc/a/file_a 1000 1000 0644",
377*7594170eSAndroid Build Coastguard Worker            "/etc/b/file_b 1000 1000 0644",
378*7594170eSAndroid Build Coastguard Worker            "/etc 0 2000 0755",
379*7594170eSAndroid Build Coastguard Worker            "/etc/a 0 2000 0755",
380*7594170eSAndroid Build Coastguard Worker            "/etc/a/c 0 2000 0755",
381*7594170eSAndroid Build Coastguard Worker            "/etc/b 0 2000 0755",
382*7594170eSAndroid Build Coastguard Worker            "",  # ends with a newline
383*7594170eSAndroid Build Coastguard Worker        ],
384*7594170eSAndroid Build Coastguard Worker    )
385*7594170eSAndroid Build Coastguard Worker
386*7594170eSAndroid Build Coastguard Worker    return test_name
387*7594170eSAndroid Build Coastguard Worker
388*7594170eSAndroid Build Coastguard Workerdef _test_canned_fs_config_runtime_deps():
389*7594170eSAndroid Build Coastguard Worker    name = "apex_canned_fs_config_runtime_deps"
390*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
391*7594170eSAndroid Build Coastguard Worker
392*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
393*7594170eSAndroid Build Coastguard Worker        name = name + "_runtime_dep_3",
394*7594170eSAndroid Build Coastguard Worker        srcs = ["lib2.cc"],
395*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
396*7594170eSAndroid Build Coastguard Worker    )
397*7594170eSAndroid Build Coastguard Worker
398*7594170eSAndroid Build Coastguard Worker    cc_library_static(
399*7594170eSAndroid Build Coastguard Worker        name = name + "_static_lib",
400*7594170eSAndroid Build Coastguard Worker        srcs = ["lib3.cc"],
401*7594170eSAndroid Build Coastguard Worker        runtime_deps = [name + "_runtime_dep_3"],
402*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
403*7594170eSAndroid Build Coastguard Worker    )
404*7594170eSAndroid Build Coastguard Worker
405*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
406*7594170eSAndroid Build Coastguard Worker        name = name + "_runtime_dep_2",
407*7594170eSAndroid Build Coastguard Worker        srcs = ["lib2.cc"],
408*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
409*7594170eSAndroid Build Coastguard Worker    )
410*7594170eSAndroid Build Coastguard Worker
411*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
412*7594170eSAndroid Build Coastguard Worker        name = name + "_runtime_dep_1",
413*7594170eSAndroid Build Coastguard Worker        srcs = ["lib.cc"],
414*7594170eSAndroid Build Coastguard Worker        runtime_deps = [name + "_runtime_dep_2"],
415*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
416*7594170eSAndroid Build Coastguard Worker    )
417*7594170eSAndroid Build Coastguard Worker
418*7594170eSAndroid Build Coastguard Worker    cc_binary(
419*7594170eSAndroid Build Coastguard Worker        name = name + "_bin_cc",
420*7594170eSAndroid Build Coastguard Worker        srcs = ["bin.cc"],
421*7594170eSAndroid Build Coastguard Worker        runtime_deps = [name + "_runtime_dep_1"],
422*7594170eSAndroid Build Coastguard Worker        deps = [name + "_static_lib"],
423*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
424*7594170eSAndroid Build Coastguard Worker    )
425*7594170eSAndroid Build Coastguard Worker
426*7594170eSAndroid Build Coastguard Worker    test_apex(
427*7594170eSAndroid Build Coastguard Worker        name = name,
428*7594170eSAndroid Build Coastguard Worker        binaries = [name + "_bin_cc"],
429*7594170eSAndroid Build Coastguard Worker    )
430*7594170eSAndroid Build Coastguard Worker
431*7594170eSAndroid Build Coastguard Worker    canned_fs_config_test(
432*7594170eSAndroid Build Coastguard Worker        name = test_name,
433*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
434*7594170eSAndroid Build Coastguard Worker        expected_entries = [
435*7594170eSAndroid Build Coastguard Worker            "/ 1000 1000 0755",
436*7594170eSAndroid Build Coastguard Worker            "/apex_manifest.json 1000 1000 0644",
437*7594170eSAndroid Build Coastguard Worker            "/apex_manifest.pb 1000 1000 0644",
438*7594170eSAndroid Build Coastguard Worker            "/lib{64_OR_BLANK}/%s_runtime_dep_1.so 1000 1000 0644" % name,
439*7594170eSAndroid Build Coastguard Worker            "/lib{64_OR_BLANK}/%s_runtime_dep_2.so 1000 1000 0644" % name,
440*7594170eSAndroid Build Coastguard Worker            "/lib{64_OR_BLANK}/libc++.so 1000 1000 0644",
441*7594170eSAndroid Build Coastguard Worker            "/bin/%s_bin_cc 0 2000 0755" % name,
442*7594170eSAndroid Build Coastguard Worker            "/bin 0 2000 0755",
443*7594170eSAndroid Build Coastguard Worker            "/lib{64_OR_BLANK} 0 2000 0755",
444*7594170eSAndroid Build Coastguard Worker            "",  # ends with a newline
445*7594170eSAndroid Build Coastguard Worker        ],
446*7594170eSAndroid Build Coastguard Worker        target_compatible_with = ["//build/bazel_common_rules/platforms/os:android"],
447*7594170eSAndroid Build Coastguard Worker    )
448*7594170eSAndroid Build Coastguard Worker
449*7594170eSAndroid Build Coastguard Worker    return test_name
450*7594170eSAndroid Build Coastguard Worker
451*7594170eSAndroid Build Coastguard Workerdef _apex_manifest_test(ctx):
452*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
453*7594170eSAndroid Build Coastguard Worker    actions = analysistest.target_actions(env)
454*7594170eSAndroid Build Coastguard Worker
455*7594170eSAndroid Build Coastguard Worker    conv_apex_manifest_action = [a for a in actions if a.mnemonic == "ConvApexManifest"][0]
456*7594170eSAndroid Build Coastguard Worker
457*7594170eSAndroid Build Coastguard Worker    apexer_action = [a for a in actions if a.mnemonic == "Apexer"][0]
458*7594170eSAndroid Build Coastguard Worker    argv = apexer_action.argv[:-1] + apexer_action.argv[-1].split(" ")
459*7594170eSAndroid Build Coastguard Worker    manifest_index = argv.index("--manifest")
460*7594170eSAndroid Build Coastguard Worker    manifest_path = argv[manifest_index + 1]
461*7594170eSAndroid Build Coastguard Worker
462*7594170eSAndroid Build Coastguard Worker    asserts.equals(
463*7594170eSAndroid Build Coastguard Worker        env,
464*7594170eSAndroid Build Coastguard Worker        conv_apex_manifest_action.outputs.to_list()[0].path,
465*7594170eSAndroid Build Coastguard Worker        manifest_path,
466*7594170eSAndroid Build Coastguard Worker        "the generated apex manifest protobuf is used as input to apexer",
467*7594170eSAndroid Build Coastguard Worker    )
468*7594170eSAndroid Build Coastguard Worker    asserts.true(
469*7594170eSAndroid Build Coastguard Worker        env,
470*7594170eSAndroid Build Coastguard Worker        manifest_path.endswith(".pb"),
471*7594170eSAndroid Build Coastguard Worker        "the generated apex manifest should be a .pb file",
472*7594170eSAndroid Build Coastguard Worker    )
473*7594170eSAndroid Build Coastguard Worker
474*7594170eSAndroid Build Coastguard Worker    if ctx.attr.expected_min_sdk_version != "":
475*7594170eSAndroid Build Coastguard Worker        flag_index = argv.index("--min_sdk_version")
476*7594170eSAndroid Build Coastguard Worker        min_sdk_version_argv = argv[flag_index + 1]
477*7594170eSAndroid Build Coastguard Worker        asserts.equals(
478*7594170eSAndroid Build Coastguard Worker            env,
479*7594170eSAndroid Build Coastguard Worker            ctx.attr.expected_min_sdk_version,
480*7594170eSAndroid Build Coastguard Worker            min_sdk_version_argv,
481*7594170eSAndroid Build Coastguard Worker        )
482*7594170eSAndroid Build Coastguard Worker
483*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
484*7594170eSAndroid Build Coastguard Worker
485*7594170eSAndroid Build Coastguard Workerapex_manifest_test_attr = dict(
486*7594170eSAndroid Build Coastguard Worker    impl = _apex_manifest_test,
487*7594170eSAndroid Build Coastguard Worker    attrs = {
488*7594170eSAndroid Build Coastguard Worker        "expected_min_sdk_version": attr.string(),
489*7594170eSAndroid Build Coastguard Worker    },
490*7594170eSAndroid Build Coastguard Worker)
491*7594170eSAndroid Build Coastguard Worker
492*7594170eSAndroid Build Coastguard Workerapex_manifest_test = analysistest.make(
493*7594170eSAndroid Build Coastguard Worker    **apex_manifest_test_attr
494*7594170eSAndroid Build Coastguard Worker)
495*7594170eSAndroid Build Coastguard Worker
496*7594170eSAndroid Build Coastguard Workerapex_manifest_global_min_sdk_current_test = analysistest.make(
497*7594170eSAndroid Build Coastguard Worker    config_settings = {
498*7594170eSAndroid Build Coastguard Worker        "@//build/bazel/rules/apex:unbundled_build_target_sdk_with_api_fingerprint": False,
499*7594170eSAndroid Build Coastguard Worker    },
500*7594170eSAndroid Build Coastguard Worker    **apex_manifest_test_attr
501*7594170eSAndroid Build Coastguard Worker)
502*7594170eSAndroid Build Coastguard Worker
503*7594170eSAndroid Build Coastguard Workerapex_manifest_global_min_sdk_override_tiramisu_test = analysistest.make(
504*7594170eSAndroid Build Coastguard Worker    config_settings = {
505*7594170eSAndroid Build Coastguard Worker        "//command_line_option:platforms": "@//build/bazel/tests/products:aosp_arm64_for_testing_min_sdk_version_override_tiramisu",
506*7594170eSAndroid Build Coastguard Worker        "@//build/bazel/rules/apex:unbundled_build_target_sdk_with_api_fingerprint": False,
507*7594170eSAndroid Build Coastguard Worker    },
508*7594170eSAndroid Build Coastguard Worker    **apex_manifest_test_attr
509*7594170eSAndroid Build Coastguard Worker)
510*7594170eSAndroid Build Coastguard Worker
511*7594170eSAndroid Build Coastguard Workerdef _test_apex_manifest():
512*7594170eSAndroid Build Coastguard Worker    name = "apex_manifest"
513*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
514*7594170eSAndroid Build Coastguard Worker
515*7594170eSAndroid Build Coastguard Worker    test_apex(name = name)
516*7594170eSAndroid Build Coastguard Worker
517*7594170eSAndroid Build Coastguard Worker    apex_manifest_test(
518*7594170eSAndroid Build Coastguard Worker        name = test_name,
519*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
520*7594170eSAndroid Build Coastguard Worker    )
521*7594170eSAndroid Build Coastguard Worker
522*7594170eSAndroid Build Coastguard Worker    return test_name
523*7594170eSAndroid Build Coastguard Worker
524*7594170eSAndroid Build Coastguard Workerdef _test_apex_manifest_min_sdk_version():
525*7594170eSAndroid Build Coastguard Worker    name = "apex_manifest_min_sdk_version"
526*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
527*7594170eSAndroid Build Coastguard Worker
528*7594170eSAndroid Build Coastguard Worker    test_apex(
529*7594170eSAndroid Build Coastguard Worker        name = name,
530*7594170eSAndroid Build Coastguard Worker        min_sdk_version = "30",
531*7594170eSAndroid Build Coastguard Worker    )
532*7594170eSAndroid Build Coastguard Worker
533*7594170eSAndroid Build Coastguard Worker    apex_manifest_test(
534*7594170eSAndroid Build Coastguard Worker        name = test_name,
535*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
536*7594170eSAndroid Build Coastguard Worker        expected_min_sdk_version = "30",
537*7594170eSAndroid Build Coastguard Worker    )
538*7594170eSAndroid Build Coastguard Worker
539*7594170eSAndroid Build Coastguard Worker    return test_name
540*7594170eSAndroid Build Coastguard Worker
541*7594170eSAndroid Build Coastguard Workerdef _test_apex_manifest_min_sdk_version_current():
542*7594170eSAndroid Build Coastguard Worker    name = "apex_manifest_min_sdk_version_current"
543*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
544*7594170eSAndroid Build Coastguard Worker
545*7594170eSAndroid Build Coastguard Worker    test_apex(
546*7594170eSAndroid Build Coastguard Worker        name = name,
547*7594170eSAndroid Build Coastguard Worker        min_sdk_version = "current",
548*7594170eSAndroid Build Coastguard Worker    )
549*7594170eSAndroid Build Coastguard Worker
550*7594170eSAndroid Build Coastguard Worker    # this test verifies min_sdk_version without use_api_fingerprint
551*7594170eSAndroid Build Coastguard Worker    apex_manifest_global_min_sdk_current_test(
552*7594170eSAndroid Build Coastguard Worker        name = test_name,
553*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
554*7594170eSAndroid Build Coastguard Worker        expected_min_sdk_version = "10000",
555*7594170eSAndroid Build Coastguard Worker    )
556*7594170eSAndroid Build Coastguard Worker
557*7594170eSAndroid Build Coastguard Worker    return test_name
558*7594170eSAndroid Build Coastguard Worker
559*7594170eSAndroid Build Coastguard Workerdef _test_apex_manifest_min_sdk_version_override():
560*7594170eSAndroid Build Coastguard Worker    name = "apex_manifest_min_sdk_version_override"
561*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
562*7594170eSAndroid Build Coastguard Worker
563*7594170eSAndroid Build Coastguard Worker    test_apex(
564*7594170eSAndroid Build Coastguard Worker        name = name,
565*7594170eSAndroid Build Coastguard Worker        min_sdk_version = "30",
566*7594170eSAndroid Build Coastguard Worker    )
567*7594170eSAndroid Build Coastguard Worker
568*7594170eSAndroid Build Coastguard Worker    # this test verifies min_sdk_version without use_api_fingerprint
569*7594170eSAndroid Build Coastguard Worker    apex_manifest_global_min_sdk_override_tiramisu_test(
570*7594170eSAndroid Build Coastguard Worker        name = test_name,
571*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
572*7594170eSAndroid Build Coastguard Worker        expected_min_sdk_version = "33",  # overriden to 33
573*7594170eSAndroid Build Coastguard Worker    )
574*7594170eSAndroid Build Coastguard Worker
575*7594170eSAndroid Build Coastguard Worker    return test_name
576*7594170eSAndroid Build Coastguard Worker
577*7594170eSAndroid Build Coastguard Workerdef _apex_native_libs_requires_provides_test(ctx):
578*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
579*7594170eSAndroid Build Coastguard Worker    target_under_test = analysistest.target_under_test(env)
580*7594170eSAndroid Build Coastguard Worker    asserts.equals(
581*7594170eSAndroid Build Coastguard Worker        env,
582*7594170eSAndroid Build Coastguard Worker        [t.label for t in ctx.attr.requires_native_libs],  # expected
583*7594170eSAndroid Build Coastguard Worker        target_under_test[ApexInfo].requires_native_libs,  # actual
584*7594170eSAndroid Build Coastguard Worker        "did not get expected requires_native_libs",
585*7594170eSAndroid Build Coastguard Worker    )
586*7594170eSAndroid Build Coastguard Worker    asserts.equals(
587*7594170eSAndroid Build Coastguard Worker        env,
588*7594170eSAndroid Build Coastguard Worker        [t.label for t in ctx.attr.provides_native_libs],
589*7594170eSAndroid Build Coastguard Worker        target_under_test[ApexInfo].provides_native_libs,
590*7594170eSAndroid Build Coastguard Worker        "did not get expected provides_native_libs",
591*7594170eSAndroid Build Coastguard Worker    )
592*7594170eSAndroid Build Coastguard Worker    asserts.equals(
593*7594170eSAndroid Build Coastguard Worker        env,
594*7594170eSAndroid Build Coastguard Worker        ctx.attr.make_modules_to_install,
595*7594170eSAndroid Build Coastguard Worker        target_under_test[ApexMkInfo].make_modules_to_install,
596*7594170eSAndroid Build Coastguard Worker        "did not get expected make_modules_to_install",
597*7594170eSAndroid Build Coastguard Worker    )
598*7594170eSAndroid Build Coastguard Worker
599*7594170eSAndroid Build Coastguard Worker    # Compare the argv of the jsonmodify action that updates the apex
600*7594170eSAndroid Build Coastguard Worker    # manifest with information about provided and required libs.
601*7594170eSAndroid Build Coastguard Worker    actions = analysistest.target_actions(env)
602*7594170eSAndroid Build Coastguard Worker    action = [a for a in actions if a.mnemonic == "ApexManifestModify"][0]
603*7594170eSAndroid Build Coastguard Worker    requires_argv_index = action.argv.index("requireNativeLibs") + 1
604*7594170eSAndroid Build Coastguard Worker    provides_argv_index = action.argv.index("provideNativeLibs") + 1
605*7594170eSAndroid Build Coastguard Worker
606*7594170eSAndroid Build Coastguard Worker    for idx, requires in enumerate(ctx.attr.requires_native_libs):
607*7594170eSAndroid Build Coastguard Worker        asserts.equals(
608*7594170eSAndroid Build Coastguard Worker            env,
609*7594170eSAndroid Build Coastguard Worker            requires.label.name + ".so",  # expected
610*7594170eSAndroid Build Coastguard Worker            action.argv[requires_argv_index + idx],  # actual
611*7594170eSAndroid Build Coastguard Worker        )
612*7594170eSAndroid Build Coastguard Worker
613*7594170eSAndroid Build Coastguard Worker    for idx, provides in enumerate(ctx.attr.provides_native_libs):
614*7594170eSAndroid Build Coastguard Worker        asserts.equals(
615*7594170eSAndroid Build Coastguard Worker            env,
616*7594170eSAndroid Build Coastguard Worker            provides.label.name + ".so",
617*7594170eSAndroid Build Coastguard Worker            action.argv[provides_argv_index + idx],
618*7594170eSAndroid Build Coastguard Worker        )
619*7594170eSAndroid Build Coastguard Worker
620*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
621*7594170eSAndroid Build Coastguard Worker
622*7594170eSAndroid Build Coastguard Workerapex_native_libs_requires_provides_test = analysistest.make(
623*7594170eSAndroid Build Coastguard Worker    _apex_native_libs_requires_provides_test,
624*7594170eSAndroid Build Coastguard Worker    attrs = {
625*7594170eSAndroid Build Coastguard Worker        "make_modules_to_install": attr.string_list(doc = "make module names that should be installed to system"),
626*7594170eSAndroid Build Coastguard Worker        "provides_argv": attr.string_list(),
627*7594170eSAndroid Build Coastguard Worker        "provides_native_libs": attr.label_list(doc = "bazel target names of libs provided for dynamic linking"),
628*7594170eSAndroid Build Coastguard Worker        "requires_argv": attr.string_list(),
629*7594170eSAndroid Build Coastguard Worker        "requires_native_libs": attr.label_list(doc = "bazel target names of libs required for dynamic linking"),
630*7594170eSAndroid Build Coastguard Worker    },
631*7594170eSAndroid Build Coastguard Worker)
632*7594170eSAndroid Build Coastguard Worker
633*7594170eSAndroid Build Coastguard Workerdef _test_apex_manifest_dependencies_nodep():
634*7594170eSAndroid Build Coastguard Worker    name = "apex_manifest_dependencies_nodep"
635*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
636*7594170eSAndroid Build Coastguard Worker
637*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
638*7594170eSAndroid Build Coastguard Worker        name = name + "_lib_nodep",
639*7594170eSAndroid Build Coastguard Worker        stl = "none",
640*7594170eSAndroid Build Coastguard Worker        system_dynamic_deps = [],
641*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
642*7594170eSAndroid Build Coastguard Worker    )
643*7594170eSAndroid Build Coastguard Worker
644*7594170eSAndroid Build Coastguard Worker    test_apex(
645*7594170eSAndroid Build Coastguard Worker        name = name,
646*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [name + "_lib_nodep"],
647*7594170eSAndroid Build Coastguard Worker        native_shared_libs_64 = [name + "_lib_nodep"],
648*7594170eSAndroid Build Coastguard Worker    )
649*7594170eSAndroid Build Coastguard Worker
650*7594170eSAndroid Build Coastguard Worker    apex_native_libs_requires_provides_test(
651*7594170eSAndroid Build Coastguard Worker        name = test_name,
652*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
653*7594170eSAndroid Build Coastguard Worker        requires_native_libs = [],
654*7594170eSAndroid Build Coastguard Worker        provides_native_libs = [],
655*7594170eSAndroid Build Coastguard Worker        make_modules_to_install = [],
656*7594170eSAndroid Build Coastguard Worker    )
657*7594170eSAndroid Build Coastguard Worker
658*7594170eSAndroid Build Coastguard Worker    return test_name
659*7594170eSAndroid Build Coastguard Worker
660*7594170eSAndroid Build Coastguard Workerdef _test_apex_manifest_dependencies_cc_library_shared_bionic_deps():
661*7594170eSAndroid Build Coastguard Worker    name = "apex_manifest_dependencies_cc_library_shared_bionic_deps"
662*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
663*7594170eSAndroid Build Coastguard Worker
664*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
665*7594170eSAndroid Build Coastguard Worker        name = name + "_lib",
666*7594170eSAndroid Build Coastguard Worker        # implicit bionic system_dynamic_deps
667*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
668*7594170eSAndroid Build Coastguard Worker    )
669*7594170eSAndroid Build Coastguard Worker
670*7594170eSAndroid Build Coastguard Worker    test_apex(
671*7594170eSAndroid Build Coastguard Worker        name = name,
672*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [name + "_lib"],
673*7594170eSAndroid Build Coastguard Worker        native_shared_libs_64 = [name + "_lib"],
674*7594170eSAndroid Build Coastguard Worker    )
675*7594170eSAndroid Build Coastguard Worker
676*7594170eSAndroid Build Coastguard Worker    apex_native_libs_requires_provides_test(
677*7594170eSAndroid Build Coastguard Worker        name = test_name,
678*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
679*7594170eSAndroid Build Coastguard Worker        requires_native_libs = [
680*7594170eSAndroid Build Coastguard Worker            "//bionic/libc",
681*7594170eSAndroid Build Coastguard Worker            "//bionic/libdl",
682*7594170eSAndroid Build Coastguard Worker            "//bionic/libm",
683*7594170eSAndroid Build Coastguard Worker        ],
684*7594170eSAndroid Build Coastguard Worker        provides_native_libs = [],
685*7594170eSAndroid Build Coastguard Worker        make_modules_to_install = [],
686*7594170eSAndroid Build Coastguard Worker    )
687*7594170eSAndroid Build Coastguard Worker
688*7594170eSAndroid Build Coastguard Worker    return test_name
689*7594170eSAndroid Build Coastguard Worker
690*7594170eSAndroid Build Coastguard Workerdef _test_apex_manifest_dependencies_cc_binary_bionic_deps():
691*7594170eSAndroid Build Coastguard Worker    name = "apex_manifest_dependencies_cc_binary_bionic_deps"
692*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
693*7594170eSAndroid Build Coastguard Worker
694*7594170eSAndroid Build Coastguard Worker    cc_binary(
695*7594170eSAndroid Build Coastguard Worker        name = name + "_bin",
696*7594170eSAndroid Build Coastguard Worker        # implicit bionic system_deps
697*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
698*7594170eSAndroid Build Coastguard Worker    )
699*7594170eSAndroid Build Coastguard Worker
700*7594170eSAndroid Build Coastguard Worker    test_apex(
701*7594170eSAndroid Build Coastguard Worker        name = name,
702*7594170eSAndroid Build Coastguard Worker        binaries = [name + "_bin"],
703*7594170eSAndroid Build Coastguard Worker    )
704*7594170eSAndroid Build Coastguard Worker
705*7594170eSAndroid Build Coastguard Worker    apex_native_libs_requires_provides_test(
706*7594170eSAndroid Build Coastguard Worker        name = test_name,
707*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
708*7594170eSAndroid Build Coastguard Worker        requires_native_libs = [
709*7594170eSAndroid Build Coastguard Worker            "//bionic/libc",
710*7594170eSAndroid Build Coastguard Worker            "//bionic/libdl",
711*7594170eSAndroid Build Coastguard Worker            "//bionic/libm",
712*7594170eSAndroid Build Coastguard Worker        ],
713*7594170eSAndroid Build Coastguard Worker        provides_native_libs = [],
714*7594170eSAndroid Build Coastguard Worker        make_modules_to_install = [],
715*7594170eSAndroid Build Coastguard Worker    )
716*7594170eSAndroid Build Coastguard Worker
717*7594170eSAndroid Build Coastguard Worker    return test_name
718*7594170eSAndroid Build Coastguard Worker
719*7594170eSAndroid Build Coastguard Workerdef _test_apex_manifest_dependencies_requires():
720*7594170eSAndroid Build Coastguard Worker    name = "apex_manifest_dependencies_requires"
721*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
722*7594170eSAndroid Build Coastguard Worker
723*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
724*7594170eSAndroid Build Coastguard Worker        name = name + "_lib_with_dep",
725*7594170eSAndroid Build Coastguard Worker        system_dynamic_deps = [],
726*7594170eSAndroid Build Coastguard Worker        stl = "none",
727*7594170eSAndroid Build Coastguard Worker        implementation_dynamic_deps = select({
728*7594170eSAndroid Build Coastguard Worker            "//build/bazel/rules/apex:android-in_apex": [name + "_libfoo_stub_libs_current"],
729*7594170eSAndroid Build Coastguard Worker            "//build/bazel/rules/apex:android-non_apex": [name + "_libfoo"],
730*7594170eSAndroid Build Coastguard Worker        }),
731*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
732*7594170eSAndroid Build Coastguard Worker        stubs_symbol_file = name + "_lib_with_dep" + ".map.txt",
733*7594170eSAndroid Build Coastguard Worker    )
734*7594170eSAndroid Build Coastguard Worker
735*7594170eSAndroid Build Coastguard Worker    native.genrule(
736*7594170eSAndroid Build Coastguard Worker        name = name + "_genrule_lib_with_dep_map_txt",
737*7594170eSAndroid Build Coastguard Worker        outs = [name + "_lib_with_dep.map.txt"],
738*7594170eSAndroid Build Coastguard Worker        cmd = "touch $@",
739*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
740*7594170eSAndroid Build Coastguard Worker    )
741*7594170eSAndroid Build Coastguard Worker
742*7594170eSAndroid Build Coastguard Worker    cc_stub_suite(
743*7594170eSAndroid Build Coastguard Worker        name = name + "_lib_with_dep_stub_libs",
744*7594170eSAndroid Build Coastguard Worker        soname = name + "_lib_with_dep.so",
745*7594170eSAndroid Build Coastguard Worker        source_library_label = ":" + name + "_lib_with_dep",
746*7594170eSAndroid Build Coastguard Worker        symbol_file = name + "_lib_with_dep.map.txt",
747*7594170eSAndroid Build Coastguard Worker        versions = ["30"],
748*7594170eSAndroid Build Coastguard Worker    )
749*7594170eSAndroid Build Coastguard Worker
750*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
751*7594170eSAndroid Build Coastguard Worker        name = name + "_libfoo",
752*7594170eSAndroid Build Coastguard Worker        system_dynamic_deps = [],
753*7594170eSAndroid Build Coastguard Worker        stl = "none",
754*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
755*7594170eSAndroid Build Coastguard Worker        stubs_symbol_file = name + "_libfoo" + ".map.txt",
756*7594170eSAndroid Build Coastguard Worker    )
757*7594170eSAndroid Build Coastguard Worker
758*7594170eSAndroid Build Coastguard Worker    native.genrule(
759*7594170eSAndroid Build Coastguard Worker        name = name + "_genrule_libfoo_map_txt",
760*7594170eSAndroid Build Coastguard Worker        outs = [name + "_libfoo.map.txt"],
761*7594170eSAndroid Build Coastguard Worker        cmd = "touch $@",
762*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
763*7594170eSAndroid Build Coastguard Worker    )
764*7594170eSAndroid Build Coastguard Worker
765*7594170eSAndroid Build Coastguard Worker    cc_stub_suite(
766*7594170eSAndroid Build Coastguard Worker        name = name + "_libfoo_stub_libs",
767*7594170eSAndroid Build Coastguard Worker        soname = name + "_libfoo.so",
768*7594170eSAndroid Build Coastguard Worker        source_library_label = ":" + name + "_libfoo",
769*7594170eSAndroid Build Coastguard Worker        symbol_file = name + "_libfoo.map.txt",
770*7594170eSAndroid Build Coastguard Worker        versions = ["30"],
771*7594170eSAndroid Build Coastguard Worker    )
772*7594170eSAndroid Build Coastguard Worker
773*7594170eSAndroid Build Coastguard Worker    test_apex(
774*7594170eSAndroid Build Coastguard Worker        name = name,
775*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [name + "_lib_with_dep"],
776*7594170eSAndroid Build Coastguard Worker        native_shared_libs_64 = [name + "_lib_with_dep"],
777*7594170eSAndroid Build Coastguard Worker    )
778*7594170eSAndroid Build Coastguard Worker
779*7594170eSAndroid Build Coastguard Worker    apex_native_libs_requires_provides_test(
780*7594170eSAndroid Build Coastguard Worker        name = test_name,
781*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
782*7594170eSAndroid Build Coastguard Worker        requires_native_libs = [name + "_libfoo"],
783*7594170eSAndroid Build Coastguard Worker        provides_native_libs = [name + "_lib_with_dep"],
784*7594170eSAndroid Build Coastguard Worker        make_modules_to_install = [name + "_libfoo"],
785*7594170eSAndroid Build Coastguard Worker        target_compatible_with = ["//build/bazel_common_rules/platforms/os:android"],
786*7594170eSAndroid Build Coastguard Worker    )
787*7594170eSAndroid Build Coastguard Worker
788*7594170eSAndroid Build Coastguard Worker    return test_name
789*7594170eSAndroid Build Coastguard Worker
790*7594170eSAndroid Build Coastguard Workerdef _test_apex_manifest_dependencies_provides():
791*7594170eSAndroid Build Coastguard Worker    name = "apex_manifest_dependencies_provides"
792*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
793*7594170eSAndroid Build Coastguard Worker
794*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
795*7594170eSAndroid Build Coastguard Worker        name = name + "_libfoo",
796*7594170eSAndroid Build Coastguard Worker        system_dynamic_deps = [],
797*7594170eSAndroid Build Coastguard Worker        stl = "none",
798*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
799*7594170eSAndroid Build Coastguard Worker        stubs_symbol_file = name + "_libfoo" + ".map.txt",
800*7594170eSAndroid Build Coastguard Worker    )
801*7594170eSAndroid Build Coastguard Worker
802*7594170eSAndroid Build Coastguard Worker    native.genrule(
803*7594170eSAndroid Build Coastguard Worker        name = name + "_genrule_libfoo_map_txt",
804*7594170eSAndroid Build Coastguard Worker        outs = [name + "_libfoo.map.txt"],
805*7594170eSAndroid Build Coastguard Worker        cmd = "touch $@",
806*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
807*7594170eSAndroid Build Coastguard Worker    )
808*7594170eSAndroid Build Coastguard Worker
809*7594170eSAndroid Build Coastguard Worker    cc_stub_suite(
810*7594170eSAndroid Build Coastguard Worker        name = name + "_libfoo_stub_libs",
811*7594170eSAndroid Build Coastguard Worker        soname = name + "_libfoo.so",
812*7594170eSAndroid Build Coastguard Worker        source_library_label = ":" + name + "_libfoo",
813*7594170eSAndroid Build Coastguard Worker        symbol_file = name + "_libfoo.map.txt",
814*7594170eSAndroid Build Coastguard Worker        versions = ["30"],
815*7594170eSAndroid Build Coastguard Worker    )
816*7594170eSAndroid Build Coastguard Worker
817*7594170eSAndroid Build Coastguard Worker    test_apex(
818*7594170eSAndroid Build Coastguard Worker        name = name,
819*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [name + "_libfoo"],
820*7594170eSAndroid Build Coastguard Worker        native_shared_libs_64 = [name + "_libfoo"],
821*7594170eSAndroid Build Coastguard Worker    )
822*7594170eSAndroid Build Coastguard Worker
823*7594170eSAndroid Build Coastguard Worker    apex_native_libs_requires_provides_test(
824*7594170eSAndroid Build Coastguard Worker        name = test_name,
825*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
826*7594170eSAndroid Build Coastguard Worker        requires_native_libs = [],
827*7594170eSAndroid Build Coastguard Worker        provides_native_libs = [name + "_libfoo"],
828*7594170eSAndroid Build Coastguard Worker        make_modules_to_install = [],
829*7594170eSAndroid Build Coastguard Worker    )
830*7594170eSAndroid Build Coastguard Worker
831*7594170eSAndroid Build Coastguard Worker    return test_name
832*7594170eSAndroid Build Coastguard Worker
833*7594170eSAndroid Build Coastguard Workerdef _test_apex_manifest_dependencies_selfcontained():
834*7594170eSAndroid Build Coastguard Worker    name = "apex_manifest_dependencies_selfcontained"
835*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
836*7594170eSAndroid Build Coastguard Worker
837*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
838*7594170eSAndroid Build Coastguard Worker        name = name + "_lib_with_dep",
839*7594170eSAndroid Build Coastguard Worker        system_dynamic_deps = [],
840*7594170eSAndroid Build Coastguard Worker        stl = "none",
841*7594170eSAndroid Build Coastguard Worker        implementation_dynamic_deps = select({
842*7594170eSAndroid Build Coastguard Worker            "//build/bazel/rules/apex:android-in_apex": [name + "_libfoo_stub_libs_current"],
843*7594170eSAndroid Build Coastguard Worker            "//build/bazel/rules/apex:android-non_apex": [name + "_libfoo"],
844*7594170eSAndroid Build Coastguard Worker        }),
845*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
846*7594170eSAndroid Build Coastguard Worker        stubs_symbol_file = name + "_lib_with_dep" + ".map.txt",
847*7594170eSAndroid Build Coastguard Worker    )
848*7594170eSAndroid Build Coastguard Worker
849*7594170eSAndroid Build Coastguard Worker    native.genrule(
850*7594170eSAndroid Build Coastguard Worker        name = name + "_genrule_lib-with_dep_map_txt",
851*7594170eSAndroid Build Coastguard Worker        outs = [name + "_lib_with_dep.map.txt"],
852*7594170eSAndroid Build Coastguard Worker        cmd = "touch $@",
853*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
854*7594170eSAndroid Build Coastguard Worker    )
855*7594170eSAndroid Build Coastguard Worker
856*7594170eSAndroid Build Coastguard Worker    cc_stub_suite(
857*7594170eSAndroid Build Coastguard Worker        name = name + "_lib_with_dep_stub_libs",
858*7594170eSAndroid Build Coastguard Worker        soname = name + "_lib_with_dep.so",
859*7594170eSAndroid Build Coastguard Worker        source_library_label = ":" + name + "_lib_with_dep",
860*7594170eSAndroid Build Coastguard Worker        symbol_file = name + "_lib_with_dep.map.txt",
861*7594170eSAndroid Build Coastguard Worker        versions = ["30"],
862*7594170eSAndroid Build Coastguard Worker    )
863*7594170eSAndroid Build Coastguard Worker
864*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
865*7594170eSAndroid Build Coastguard Worker        name = name + "_libfoo",
866*7594170eSAndroid Build Coastguard Worker        system_dynamic_deps = [],
867*7594170eSAndroid Build Coastguard Worker        stl = "none",
868*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
869*7594170eSAndroid Build Coastguard Worker        stubs_symbol_file = name + "_libfoo" + ".map.txt",
870*7594170eSAndroid Build Coastguard Worker    )
871*7594170eSAndroid Build Coastguard Worker
872*7594170eSAndroid Build Coastguard Worker    native.genrule(
873*7594170eSAndroid Build Coastguard Worker        name = name + "_genrule_libfoo_map_txt",
874*7594170eSAndroid Build Coastguard Worker        outs = [name + "_libfoo.map.txt"],
875*7594170eSAndroid Build Coastguard Worker        cmd = "touch $@",
876*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
877*7594170eSAndroid Build Coastguard Worker    )
878*7594170eSAndroid Build Coastguard Worker
879*7594170eSAndroid Build Coastguard Worker    cc_stub_suite(
880*7594170eSAndroid Build Coastguard Worker        name = name + "_libfoo_stub_libs",
881*7594170eSAndroid Build Coastguard Worker        soname = name + "_libfoo.so",
882*7594170eSAndroid Build Coastguard Worker        source_library_label = ":" + name + "_libfoo",
883*7594170eSAndroid Build Coastguard Worker        symbol_file = name + "_libfoo.map.txt",
884*7594170eSAndroid Build Coastguard Worker        versions = ["30"],
885*7594170eSAndroid Build Coastguard Worker    )
886*7594170eSAndroid Build Coastguard Worker
887*7594170eSAndroid Build Coastguard Worker    test_apex(
888*7594170eSAndroid Build Coastguard Worker        name = name,
889*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [
890*7594170eSAndroid Build Coastguard Worker            name + "_lib_with_dep",
891*7594170eSAndroid Build Coastguard Worker            name + "_libfoo",
892*7594170eSAndroid Build Coastguard Worker        ],
893*7594170eSAndroid Build Coastguard Worker        native_shared_libs_64 = [
894*7594170eSAndroid Build Coastguard Worker            name + "_lib_with_dep",
895*7594170eSAndroid Build Coastguard Worker            name + "_libfoo",
896*7594170eSAndroid Build Coastguard Worker        ],
897*7594170eSAndroid Build Coastguard Worker    )
898*7594170eSAndroid Build Coastguard Worker
899*7594170eSAndroid Build Coastguard Worker    apex_native_libs_requires_provides_test(
900*7594170eSAndroid Build Coastguard Worker        name = test_name,
901*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
902*7594170eSAndroid Build Coastguard Worker        requires_native_libs = [],
903*7594170eSAndroid Build Coastguard Worker        provides_native_libs = [
904*7594170eSAndroid Build Coastguard Worker            name + "_lib_with_dep",
905*7594170eSAndroid Build Coastguard Worker            name + "_libfoo",
906*7594170eSAndroid Build Coastguard Worker        ],
907*7594170eSAndroid Build Coastguard Worker        make_modules_to_install = [],
908*7594170eSAndroid Build Coastguard Worker        target_compatible_with = ["//build/bazel_common_rules/platforms/os:android"],
909*7594170eSAndroid Build Coastguard Worker    )
910*7594170eSAndroid Build Coastguard Worker
911*7594170eSAndroid Build Coastguard Worker    return test_name
912*7594170eSAndroid Build Coastguard Worker
913*7594170eSAndroid Build Coastguard Workerdef _test_apex_manifest_dependencies_cc_binary():
914*7594170eSAndroid Build Coastguard Worker    name = "apex_manifest_dependencies_cc_binary"
915*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
916*7594170eSAndroid Build Coastguard Worker
917*7594170eSAndroid Build Coastguard Worker    cc_binary(
918*7594170eSAndroid Build Coastguard Worker        name = name + "_bin",
919*7594170eSAndroid Build Coastguard Worker        stl = "none",
920*7594170eSAndroid Build Coastguard Worker        system_deps = [],
921*7594170eSAndroid Build Coastguard Worker        dynamic_deps = [
922*7594170eSAndroid Build Coastguard Worker            name + "_lib_with_dep",
923*7594170eSAndroid Build Coastguard Worker        ] + select({
924*7594170eSAndroid Build Coastguard Worker            "//build/bazel/rules/apex:android-in_apex": [name + "_librequires2_stub_libs_current"],
925*7594170eSAndroid Build Coastguard Worker            "//build/bazel/rules/apex:android-non_apex": [name + "_librequires2"],
926*7594170eSAndroid Build Coastguard Worker        }),
927*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
928*7594170eSAndroid Build Coastguard Worker    )
929*7594170eSAndroid Build Coastguard Worker
930*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
931*7594170eSAndroid Build Coastguard Worker        name = name + "_lib_with_dep",
932*7594170eSAndroid Build Coastguard Worker        system_dynamic_deps = [],
933*7594170eSAndroid Build Coastguard Worker        stl = "none",
934*7594170eSAndroid Build Coastguard Worker        implementation_dynamic_deps = select({
935*7594170eSAndroid Build Coastguard Worker            "//build/bazel/rules/apex:android-in_apex": [name + "_librequires_stub_libs_current"],
936*7594170eSAndroid Build Coastguard Worker            "//build/bazel/rules/apex:android-non_apex": [name + "_librequires"],
937*7594170eSAndroid Build Coastguard Worker        }),
938*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
939*7594170eSAndroid Build Coastguard Worker    )
940*7594170eSAndroid Build Coastguard Worker
941*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
942*7594170eSAndroid Build Coastguard Worker        name = name + "_librequires",
943*7594170eSAndroid Build Coastguard Worker        system_dynamic_deps = [],
944*7594170eSAndroid Build Coastguard Worker        stl = "none",
945*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
946*7594170eSAndroid Build Coastguard Worker        stubs_symbol_file = name + "_librequires" + ".map.txt",
947*7594170eSAndroid Build Coastguard Worker    )
948*7594170eSAndroid Build Coastguard Worker
949*7594170eSAndroid Build Coastguard Worker    native.genrule(
950*7594170eSAndroid Build Coastguard Worker        name = name + "_genrule_librequires_map_txt",
951*7594170eSAndroid Build Coastguard Worker        outs = [name + "_librequires.map.txt"],
952*7594170eSAndroid Build Coastguard Worker        cmd = "touch $@",
953*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
954*7594170eSAndroid Build Coastguard Worker    )
955*7594170eSAndroid Build Coastguard Worker
956*7594170eSAndroid Build Coastguard Worker    cc_stub_suite(
957*7594170eSAndroid Build Coastguard Worker        name = name + "_librequires_stub_libs",
958*7594170eSAndroid Build Coastguard Worker        soname = name + "_librequires.so",
959*7594170eSAndroid Build Coastguard Worker        source_library_label = ":" + name + "_librequires",
960*7594170eSAndroid Build Coastguard Worker        symbol_file = name + "_librequires.map.txt",
961*7594170eSAndroid Build Coastguard Worker        versions = ["30"],
962*7594170eSAndroid Build Coastguard Worker    )
963*7594170eSAndroid Build Coastguard Worker
964*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
965*7594170eSAndroid Build Coastguard Worker        name = name + "_librequires2",
966*7594170eSAndroid Build Coastguard Worker        system_dynamic_deps = [],
967*7594170eSAndroid Build Coastguard Worker        stl = "none",
968*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
969*7594170eSAndroid Build Coastguard Worker        stubs_symbol_file = name + "_librequires2.map.txt",
970*7594170eSAndroid Build Coastguard Worker    )
971*7594170eSAndroid Build Coastguard Worker
972*7594170eSAndroid Build Coastguard Worker    native.genrule(
973*7594170eSAndroid Build Coastguard Worker        name = name + "_genrule_librequires2_map_txt",
974*7594170eSAndroid Build Coastguard Worker        outs = [name + "_librequires2.map.txt"],
975*7594170eSAndroid Build Coastguard Worker        cmd = "touch $@",
976*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
977*7594170eSAndroid Build Coastguard Worker    )
978*7594170eSAndroid Build Coastguard Worker
979*7594170eSAndroid Build Coastguard Worker    cc_stub_suite(
980*7594170eSAndroid Build Coastguard Worker        name = name + "_librequires2_stub_libs",
981*7594170eSAndroid Build Coastguard Worker        soname = name + "_librequires2.so",
982*7594170eSAndroid Build Coastguard Worker        source_library_label = ":" + name + "_librequires2",
983*7594170eSAndroid Build Coastguard Worker        symbol_file = name + "_librequires2.map.txt",
984*7594170eSAndroid Build Coastguard Worker        versions = ["30"],
985*7594170eSAndroid Build Coastguard Worker    )
986*7594170eSAndroid Build Coastguard Worker
987*7594170eSAndroid Build Coastguard Worker    test_apex(
988*7594170eSAndroid Build Coastguard Worker        name = name,
989*7594170eSAndroid Build Coastguard Worker        binaries = [name + "_bin"],
990*7594170eSAndroid Build Coastguard Worker    )
991*7594170eSAndroid Build Coastguard Worker
992*7594170eSAndroid Build Coastguard Worker    apex_native_libs_requires_provides_test(
993*7594170eSAndroid Build Coastguard Worker        name = test_name,
994*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
995*7594170eSAndroid Build Coastguard Worker        requires_native_libs = [
996*7594170eSAndroid Build Coastguard Worker            name + "_librequires",
997*7594170eSAndroid Build Coastguard Worker            name + "_librequires2",
998*7594170eSAndroid Build Coastguard Worker        ],
999*7594170eSAndroid Build Coastguard Worker        make_modules_to_install = [
1000*7594170eSAndroid Build Coastguard Worker            name + "_librequires",
1001*7594170eSAndroid Build Coastguard Worker            name + "_librequires2",
1002*7594170eSAndroid Build Coastguard Worker        ],
1003*7594170eSAndroid Build Coastguard Worker        target_compatible_with = ["//build/bazel_common_rules/platforms/os:android"],
1004*7594170eSAndroid Build Coastguard Worker    )
1005*7594170eSAndroid Build Coastguard Worker
1006*7594170eSAndroid Build Coastguard Worker    return test_name
1007*7594170eSAndroid Build Coastguard Worker
1008*7594170eSAndroid Build Coastguard Workerdef _action_args_test(ctx):
1009*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
1010*7594170eSAndroid Build Coastguard Worker    actions = analysistest.target_actions(env)
1011*7594170eSAndroid Build Coastguard Worker
1012*7594170eSAndroid Build Coastguard Worker    action = [a for a in actions if a.mnemonic == ctx.attr.action_mnemonic][0]
1013*7594170eSAndroid Build Coastguard Worker    argv = action.argv[:-1] + action.argv[-1].split(" ")
1014*7594170eSAndroid Build Coastguard Worker    flag_idx = argv.index(ctx.attr.expected_args[0])
1015*7594170eSAndroid Build Coastguard Worker
1016*7594170eSAndroid Build Coastguard Worker    for i, expected_arg in enumerate(ctx.attr.expected_args):
1017*7594170eSAndroid Build Coastguard Worker        asserts.equals(
1018*7594170eSAndroid Build Coastguard Worker            env,
1019*7594170eSAndroid Build Coastguard Worker            expected_arg,
1020*7594170eSAndroid Build Coastguard Worker            argv[flag_idx + i],
1021*7594170eSAndroid Build Coastguard Worker        )
1022*7594170eSAndroid Build Coastguard Worker
1023*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
1024*7594170eSAndroid Build Coastguard Worker
1025*7594170eSAndroid Build Coastguard Worker_action_args_test_attrs = {
1026*7594170eSAndroid Build Coastguard Worker    "action_mnemonic": attr.string(mandatory = True),
1027*7594170eSAndroid Build Coastguard Worker    "expected_args": attr.string_list(mandatory = True),
1028*7594170eSAndroid Build Coastguard Worker}
1029*7594170eSAndroid Build Coastguard Worker
1030*7594170eSAndroid Build Coastguard Workeraction_args_test = analysistest.make(
1031*7594170eSAndroid Build Coastguard Worker    _action_args_test,
1032*7594170eSAndroid Build Coastguard Worker    attrs = _action_args_test_attrs,
1033*7594170eSAndroid Build Coastguard Worker)
1034*7594170eSAndroid Build Coastguard Worker
1035*7594170eSAndroid Build Coastguard Workerdef _test_logging_parent_flag():
1036*7594170eSAndroid Build Coastguard Worker    name = "logging_parent"
1037*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1038*7594170eSAndroid Build Coastguard Worker
1039*7594170eSAndroid Build Coastguard Worker    test_apex(
1040*7594170eSAndroid Build Coastguard Worker        name = name,
1041*7594170eSAndroid Build Coastguard Worker        logging_parent = "logging.parent",
1042*7594170eSAndroid Build Coastguard Worker    )
1043*7594170eSAndroid Build Coastguard Worker
1044*7594170eSAndroid Build Coastguard Worker    action_args_test(
1045*7594170eSAndroid Build Coastguard Worker        name = test_name,
1046*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1047*7594170eSAndroid Build Coastguard Worker        action_mnemonic = "Apexer",
1048*7594170eSAndroid Build Coastguard Worker        expected_args = [
1049*7594170eSAndroid Build Coastguard Worker            "--logging_parent",
1050*7594170eSAndroid Build Coastguard Worker            "logging.parent",
1051*7594170eSAndroid Build Coastguard Worker        ],
1052*7594170eSAndroid Build Coastguard Worker    )
1053*7594170eSAndroid Build Coastguard Worker
1054*7594170eSAndroid Build Coastguard Worker    return test_name
1055*7594170eSAndroid Build Coastguard Worker
1056*7594170eSAndroid Build Coastguard Workerdef _test_default_apex_manifest_version():
1057*7594170eSAndroid Build Coastguard Worker    name = "default_apex_manifest_version"
1058*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1059*7594170eSAndroid Build Coastguard Worker
1060*7594170eSAndroid Build Coastguard Worker    test_apex(
1061*7594170eSAndroid Build Coastguard Worker        name = name,
1062*7594170eSAndroid Build Coastguard Worker    )
1063*7594170eSAndroid Build Coastguard Worker
1064*7594170eSAndroid Build Coastguard Worker    action_args_test(
1065*7594170eSAndroid Build Coastguard Worker        name = test_name,
1066*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1067*7594170eSAndroid Build Coastguard Worker        action_mnemonic = "ApexManifestModify",
1068*7594170eSAndroid Build Coastguard Worker        expected_args = [
1069*7594170eSAndroid Build Coastguard Worker            "-se",
1070*7594170eSAndroid Build Coastguard Worker            "version",
1071*7594170eSAndroid Build Coastguard Worker            "0",
1072*7594170eSAndroid Build Coastguard Worker            str(default_manifest_version),
1073*7594170eSAndroid Build Coastguard Worker        ],
1074*7594170eSAndroid Build Coastguard Worker    )
1075*7594170eSAndroid Build Coastguard Worker
1076*7594170eSAndroid Build Coastguard Worker    return test_name
1077*7594170eSAndroid Build Coastguard Worker
1078*7594170eSAndroid Build Coastguard Workeraction_args_with_overrides_test = analysistest.make(
1079*7594170eSAndroid Build Coastguard Worker    _action_args_test,
1080*7594170eSAndroid Build Coastguard Worker    attrs = _action_args_test_attrs,
1081*7594170eSAndroid Build Coastguard Worker    config_settings = {
1082*7594170eSAndroid Build Coastguard Worker        "//command_line_option:platforms": "@//build/bazel/tests/products:aosp_arm64_for_testing_with_overrides_and_app_cert",
1083*7594170eSAndroid Build Coastguard Worker    },
1084*7594170eSAndroid Build Coastguard Worker)
1085*7594170eSAndroid Build Coastguard Worker
1086*7594170eSAndroid Build Coastguard Workerdef _test_package_name():
1087*7594170eSAndroid Build Coastguard Worker    name = "package_name"
1088*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1089*7594170eSAndroid Build Coastguard Worker
1090*7594170eSAndroid Build Coastguard Worker    test_apex(
1091*7594170eSAndroid Build Coastguard Worker        name = name,
1092*7594170eSAndroid Build Coastguard Worker        package_name = "my.package.name",
1093*7594170eSAndroid Build Coastguard Worker    )
1094*7594170eSAndroid Build Coastguard Worker
1095*7594170eSAndroid Build Coastguard Worker    action_args_test(
1096*7594170eSAndroid Build Coastguard Worker        name = test_name,
1097*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1098*7594170eSAndroid Build Coastguard Worker        action_mnemonic = "Apexer",
1099*7594170eSAndroid Build Coastguard Worker        expected_args = [
1100*7594170eSAndroid Build Coastguard Worker            "--override_apk_package_name",
1101*7594170eSAndroid Build Coastguard Worker            "my.package.name",
1102*7594170eSAndroid Build Coastguard Worker        ],
1103*7594170eSAndroid Build Coastguard Worker    )
1104*7594170eSAndroid Build Coastguard Worker
1105*7594170eSAndroid Build Coastguard Worker    return test_name
1106*7594170eSAndroid Build Coastguard Worker
1107*7594170eSAndroid Build Coastguard Workerdef _test_package_name_override_from_config():
1108*7594170eSAndroid Build Coastguard Worker    name = "package_name_override_from_config"
1109*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1110*7594170eSAndroid Build Coastguard Worker
1111*7594170eSAndroid Build Coastguard Worker    test_apex(name = name)
1112*7594170eSAndroid Build Coastguard Worker
1113*7594170eSAndroid Build Coastguard Worker    action_args_with_overrides_test(
1114*7594170eSAndroid Build Coastguard Worker        name = test_name,
1115*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1116*7594170eSAndroid Build Coastguard Worker        action_mnemonic = "Apexer",
1117*7594170eSAndroid Build Coastguard Worker        expected_args = [
1118*7594170eSAndroid Build Coastguard Worker            "--override_apk_package_name",
1119*7594170eSAndroid Build Coastguard Worker            "another.package",
1120*7594170eSAndroid Build Coastguard Worker        ],
1121*7594170eSAndroid Build Coastguard Worker    )
1122*7594170eSAndroid Build Coastguard Worker
1123*7594170eSAndroid Build Coastguard Worker    return test_name
1124*7594170eSAndroid Build Coastguard Worker
1125*7594170eSAndroid Build Coastguard Workeraction_args_with_override_apex_manifest_default_version_test = analysistest.make(
1126*7594170eSAndroid Build Coastguard Worker    _action_args_test,
1127*7594170eSAndroid Build Coastguard Worker    attrs = _action_args_test_attrs,
1128*7594170eSAndroid Build Coastguard Worker    # Wouldn't it be nice if it's possible to set the config_setting from the test callsite..
1129*7594170eSAndroid Build Coastguard Worker    config_settings = {
1130*7594170eSAndroid Build Coastguard Worker        "@//build/bazel/rules/apex:override_apex_manifest_default_version": "1234567890",
1131*7594170eSAndroid Build Coastguard Worker    },
1132*7594170eSAndroid Build Coastguard Worker)
1133*7594170eSAndroid Build Coastguard Worker
1134*7594170eSAndroid Build Coastguard Workerdef _test_override_apex_manifest_version():
1135*7594170eSAndroid Build Coastguard Worker    name = "override_apex_manifest_version"
1136*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1137*7594170eSAndroid Build Coastguard Worker
1138*7594170eSAndroid Build Coastguard Worker    test_apex(
1139*7594170eSAndroid Build Coastguard Worker        name = name,
1140*7594170eSAndroid Build Coastguard Worker    )
1141*7594170eSAndroid Build Coastguard Worker
1142*7594170eSAndroid Build Coastguard Worker    action_args_with_override_apex_manifest_default_version_test(
1143*7594170eSAndroid Build Coastguard Worker        name = test_name,
1144*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1145*7594170eSAndroid Build Coastguard Worker        action_mnemonic = "ApexManifestModify",
1146*7594170eSAndroid Build Coastguard Worker        expected_args = [
1147*7594170eSAndroid Build Coastguard Worker            "-se",
1148*7594170eSAndroid Build Coastguard Worker            "version",
1149*7594170eSAndroid Build Coastguard Worker            "0",
1150*7594170eSAndroid Build Coastguard Worker            "1234567890",
1151*7594170eSAndroid Build Coastguard Worker        ],
1152*7594170eSAndroid Build Coastguard Worker    )
1153*7594170eSAndroid Build Coastguard Worker
1154*7594170eSAndroid Build Coastguard Worker    return test_name
1155*7594170eSAndroid Build Coastguard Worker
1156*7594170eSAndroid Build Coastguard Workerdef _file_contexts_args_test(ctx):
1157*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
1158*7594170eSAndroid Build Coastguard Worker    actions = analysistest.target_actions(env)
1159*7594170eSAndroid Build Coastguard Worker
1160*7594170eSAndroid Build Coastguard Worker    file_contexts_action = [a for a in actions if a.mnemonic == "GenerateApexFileContexts"][0]
1161*7594170eSAndroid Build Coastguard Worker
1162*7594170eSAndroid Build Coastguard Worker    # GenerateApexFileContexts is a run_shell action.
1163*7594170eSAndroid Build Coastguard Worker    # ["/bin/bash", "c", "<args>"]
1164*7594170eSAndroid Build Coastguard Worker    cmd = file_contexts_action.argv[2]
1165*7594170eSAndroid Build Coastguard Worker
1166*7594170eSAndroid Build Coastguard Worker    for expected_arg in ctx.attr.expected_args:
1167*7594170eSAndroid Build Coastguard Worker        asserts.true(
1168*7594170eSAndroid Build Coastguard Worker            env,
1169*7594170eSAndroid Build Coastguard Worker            expected_arg in cmd,
1170*7594170eSAndroid Build Coastguard Worker            "failed to find '%s' in '%s'" % (expected_arg, cmd),
1171*7594170eSAndroid Build Coastguard Worker        )
1172*7594170eSAndroid Build Coastguard Worker
1173*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
1174*7594170eSAndroid Build Coastguard Worker
1175*7594170eSAndroid Build Coastguard Workerfile_contexts_args_test = analysistest.make(
1176*7594170eSAndroid Build Coastguard Worker    _file_contexts_args_test,
1177*7594170eSAndroid Build Coastguard Worker    attrs = {
1178*7594170eSAndroid Build Coastguard Worker        "expected_args": attr.string_list(mandatory = True),
1179*7594170eSAndroid Build Coastguard Worker    },
1180*7594170eSAndroid Build Coastguard Worker)
1181*7594170eSAndroid Build Coastguard Worker
1182*7594170eSAndroid Build Coastguard Workerdef _test_generate_file_contexts():
1183*7594170eSAndroid Build Coastguard Worker    name = "apex_manifest_pb_file_contexts"
1184*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1185*7594170eSAndroid Build Coastguard Worker
1186*7594170eSAndroid Build Coastguard Worker    test_apex(
1187*7594170eSAndroid Build Coastguard Worker        name = name,
1188*7594170eSAndroid Build Coastguard Worker    )
1189*7594170eSAndroid Build Coastguard Worker
1190*7594170eSAndroid Build Coastguard Worker    file_contexts_args_test(
1191*7594170eSAndroid Build Coastguard Worker        name = test_name,
1192*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1193*7594170eSAndroid Build Coastguard Worker        expected_args = [
1194*7594170eSAndroid Build Coastguard Worker            "/apex_manifest\\\\.pb u:object_r:system_file:s0",
1195*7594170eSAndroid Build Coastguard Worker            "/ u:object_r:system_file:s0",
1196*7594170eSAndroid Build Coastguard Worker        ],
1197*7594170eSAndroid Build Coastguard Worker    )
1198*7594170eSAndroid Build Coastguard Worker
1199*7594170eSAndroid Build Coastguard Worker    return test_name
1200*7594170eSAndroid Build Coastguard Worker
1201*7594170eSAndroid Build Coastguard Workerdef _min_sdk_version_failure_test_impl(ctx):
1202*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
1203*7594170eSAndroid Build Coastguard Worker
1204*7594170eSAndroid Build Coastguard Worker    asserts.expect_failure(
1205*7594170eSAndroid Build Coastguard Worker        env,
1206*7594170eSAndroid Build Coastguard Worker        "min_sdk_version %s cannot be lower than the dep's min_sdk_version %s" %
1207*7594170eSAndroid Build Coastguard Worker        (ctx.attr.apex_min, ctx.attr.dep_min),
1208*7594170eSAndroid Build Coastguard Worker    )
1209*7594170eSAndroid Build Coastguard Worker
1210*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
1211*7594170eSAndroid Build Coastguard Worker
1212*7594170eSAndroid Build Coastguard Workermin_sdk_version_failure_test = analysistest.make(
1213*7594170eSAndroid Build Coastguard Worker    _min_sdk_version_failure_test_impl,
1214*7594170eSAndroid Build Coastguard Worker    expect_failure = True,
1215*7594170eSAndroid Build Coastguard Worker    attrs = {
1216*7594170eSAndroid Build Coastguard Worker        "apex_min": attr.string(),
1217*7594170eSAndroid Build Coastguard Worker        "dep_min": attr.string(),
1218*7594170eSAndroid Build Coastguard Worker    },
1219*7594170eSAndroid Build Coastguard Worker)
1220*7594170eSAndroid Build Coastguard Worker
1221*7594170eSAndroid Build Coastguard Workerdef _test_min_sdk_version_failure():
1222*7594170eSAndroid Build Coastguard Worker    name = "min_sdk_version_failure"
1223*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1224*7594170eSAndroid Build Coastguard Worker
1225*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
1226*7594170eSAndroid Build Coastguard Worker        name = name + "_lib_cc",
1227*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib.cc"],
1228*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
1229*7594170eSAndroid Build Coastguard Worker        min_sdk_version = "32",
1230*7594170eSAndroid Build Coastguard Worker    )
1231*7594170eSAndroid Build Coastguard Worker
1232*7594170eSAndroid Build Coastguard Worker    test_apex(
1233*7594170eSAndroid Build Coastguard Worker        name = name,
1234*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [name + "_lib_cc"],
1235*7594170eSAndroid Build Coastguard Worker        min_sdk_version = "30",
1236*7594170eSAndroid Build Coastguard Worker    )
1237*7594170eSAndroid Build Coastguard Worker
1238*7594170eSAndroid Build Coastguard Worker    min_sdk_version_failure_test(
1239*7594170eSAndroid Build Coastguard Worker        name = test_name,
1240*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1241*7594170eSAndroid Build Coastguard Worker        apex_min = "30",
1242*7594170eSAndroid Build Coastguard Worker        dep_min = "32",
1243*7594170eSAndroid Build Coastguard Worker    )
1244*7594170eSAndroid Build Coastguard Worker
1245*7594170eSAndroid Build Coastguard Worker    return test_name
1246*7594170eSAndroid Build Coastguard Worker
1247*7594170eSAndroid Build Coastguard Workerdef _test_min_sdk_version_failure_transitive():
1248*7594170eSAndroid Build Coastguard Worker    name = "min_sdk_version_failure_transitive"
1249*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1250*7594170eSAndroid Build Coastguard Worker
1251*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
1252*7594170eSAndroid Build Coastguard Worker        name = name + "_lib_cc",
1253*7594170eSAndroid Build Coastguard Worker        dynamic_deps = [name + "_lib2_cc"],
1254*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
1255*7594170eSAndroid Build Coastguard Worker    )
1256*7594170eSAndroid Build Coastguard Worker
1257*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
1258*7594170eSAndroid Build Coastguard Worker        name = name + "_lib2_cc",
1259*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib2.cc"],
1260*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
1261*7594170eSAndroid Build Coastguard Worker        min_sdk_version = "32",
1262*7594170eSAndroid Build Coastguard Worker    )
1263*7594170eSAndroid Build Coastguard Worker
1264*7594170eSAndroid Build Coastguard Worker    test_apex(
1265*7594170eSAndroid Build Coastguard Worker        name = name,
1266*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [name + "_lib_cc"],
1267*7594170eSAndroid Build Coastguard Worker        min_sdk_version = "30",
1268*7594170eSAndroid Build Coastguard Worker    )
1269*7594170eSAndroid Build Coastguard Worker
1270*7594170eSAndroid Build Coastguard Worker    min_sdk_version_failure_test(
1271*7594170eSAndroid Build Coastguard Worker        name = test_name,
1272*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1273*7594170eSAndroid Build Coastguard Worker        apex_min = "30",
1274*7594170eSAndroid Build Coastguard Worker        dep_min = "32",
1275*7594170eSAndroid Build Coastguard Worker    )
1276*7594170eSAndroid Build Coastguard Worker
1277*7594170eSAndroid Build Coastguard Worker    return test_name
1278*7594170eSAndroid Build Coastguard Worker
1279*7594170eSAndroid Build Coastguard Workerdef _apex_certificate_test(ctx):
1280*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
1281*7594170eSAndroid Build Coastguard Worker    target_under_test = analysistest.target_under_test(env)
1282*7594170eSAndroid Build Coastguard Worker    container_key_info = target_under_test[ApexInfo].container_key_info
1283*7594170eSAndroid Build Coastguard Worker
1284*7594170eSAndroid Build Coastguard Worker    asserts.equals(env, ctx.attr.expected_pem_path, container_key_info.pem.path)
1285*7594170eSAndroid Build Coastguard Worker    asserts.equals(env, ctx.attr.expected_pk8_path, container_key_info.pk8.path)
1286*7594170eSAndroid Build Coastguard Worker
1287*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
1288*7594170eSAndroid Build Coastguard Worker
1289*7594170eSAndroid Build Coastguard Workerapex_certificate_test = analysistest.make(
1290*7594170eSAndroid Build Coastguard Worker    _apex_certificate_test,
1291*7594170eSAndroid Build Coastguard Worker    attrs = {
1292*7594170eSAndroid Build Coastguard Worker        "expected_pem_path": attr.string(),
1293*7594170eSAndroid Build Coastguard Worker        "expected_pk8_path": attr.string(),
1294*7594170eSAndroid Build Coastguard Worker    },
1295*7594170eSAndroid Build Coastguard Worker)
1296*7594170eSAndroid Build Coastguard Worker
1297*7594170eSAndroid Build Coastguard Workerapex_certificate_with_overrides_test = analysistest.make(
1298*7594170eSAndroid Build Coastguard Worker    _apex_certificate_test,
1299*7594170eSAndroid Build Coastguard Worker    attrs = {
1300*7594170eSAndroid Build Coastguard Worker        "expected_pem_path": attr.string(),
1301*7594170eSAndroid Build Coastguard Worker        "expected_pk8_path": attr.string(),
1302*7594170eSAndroid Build Coastguard Worker    },
1303*7594170eSAndroid Build Coastguard Worker    config_settings = {
1304*7594170eSAndroid Build Coastguard Worker        "//command_line_option:platforms": "@//build/bazel/tests/products:aosp_arm64_for_testing_with_overrides_and_app_cert",
1305*7594170eSAndroid Build Coastguard Worker    },
1306*7594170eSAndroid Build Coastguard Worker)
1307*7594170eSAndroid Build Coastguard Worker
1308*7594170eSAndroid Build Coastguard Workerdef _test_apex_certificate_none():
1309*7594170eSAndroid Build Coastguard Worker    name = "apex_certificate_none"
1310*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1311*7594170eSAndroid Build Coastguard Worker
1312*7594170eSAndroid Build Coastguard Worker    test_apex(
1313*7594170eSAndroid Build Coastguard Worker        name = name,
1314*7594170eSAndroid Build Coastguard Worker        certificate = None,
1315*7594170eSAndroid Build Coastguard Worker    )
1316*7594170eSAndroid Build Coastguard Worker
1317*7594170eSAndroid Build Coastguard Worker    apex_certificate_test(
1318*7594170eSAndroid Build Coastguard Worker        name = test_name,
1319*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1320*7594170eSAndroid Build Coastguard Worker        expected_pem_path = "build/make/target/product/security/testkey.x509.pem",
1321*7594170eSAndroid Build Coastguard Worker        expected_pk8_path = "build/make/target/product/security/testkey.pk8",
1322*7594170eSAndroid Build Coastguard Worker    )
1323*7594170eSAndroid Build Coastguard Worker
1324*7594170eSAndroid Build Coastguard Worker    return test_name
1325*7594170eSAndroid Build Coastguard Worker
1326*7594170eSAndroid Build Coastguard Workerdef _test_apex_certificate_name():
1327*7594170eSAndroid Build Coastguard Worker    name = "apex_certificate_name"
1328*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1329*7594170eSAndroid Build Coastguard Worker
1330*7594170eSAndroid Build Coastguard Worker    test_apex(
1331*7594170eSAndroid Build Coastguard Worker        name = name,
1332*7594170eSAndroid Build Coastguard Worker        certificate = None,
1333*7594170eSAndroid Build Coastguard Worker        certificate_name = "shared",  # use something other than testkey
1334*7594170eSAndroid Build Coastguard Worker    )
1335*7594170eSAndroid Build Coastguard Worker
1336*7594170eSAndroid Build Coastguard Worker    apex_certificate_test(
1337*7594170eSAndroid Build Coastguard Worker        name = test_name,
1338*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1339*7594170eSAndroid Build Coastguard Worker        expected_pem_path = "build/make/target/product/security/shared.x509.pem",
1340*7594170eSAndroid Build Coastguard Worker        expected_pk8_path = "build/make/target/product/security/shared.pk8",
1341*7594170eSAndroid Build Coastguard Worker    )
1342*7594170eSAndroid Build Coastguard Worker
1343*7594170eSAndroid Build Coastguard Worker    return test_name
1344*7594170eSAndroid Build Coastguard Worker
1345*7594170eSAndroid Build Coastguard Workerdef _test_apex_certificate_label():
1346*7594170eSAndroid Build Coastguard Worker    name = "apex_certificate_label"
1347*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1348*7594170eSAndroid Build Coastguard Worker
1349*7594170eSAndroid Build Coastguard Worker    android_app_certificate(
1350*7594170eSAndroid Build Coastguard Worker        name = name + "_cert",
1351*7594170eSAndroid Build Coastguard Worker        certificate = name,
1352*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
1353*7594170eSAndroid Build Coastguard Worker    )
1354*7594170eSAndroid Build Coastguard Worker
1355*7594170eSAndroid Build Coastguard Worker    test_apex(
1356*7594170eSAndroid Build Coastguard Worker        name = name,
1357*7594170eSAndroid Build Coastguard Worker        certificate = name + "_cert",
1358*7594170eSAndroid Build Coastguard Worker    )
1359*7594170eSAndroid Build Coastguard Worker
1360*7594170eSAndroid Build Coastguard Worker    apex_certificate_test(
1361*7594170eSAndroid Build Coastguard Worker        name = test_name,
1362*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1363*7594170eSAndroid Build Coastguard Worker        expected_pem_path = "build/bazel/rules/apex/apex_certificate_label.x509.pem",
1364*7594170eSAndroid Build Coastguard Worker        expected_pk8_path = "build/bazel/rules/apex/apex_certificate_label.pk8",
1365*7594170eSAndroid Build Coastguard Worker    )
1366*7594170eSAndroid Build Coastguard Worker
1367*7594170eSAndroid Build Coastguard Worker    return test_name
1368*7594170eSAndroid Build Coastguard Worker
1369*7594170eSAndroid Build Coastguard Workerdef _test_apex_certificate_label_with_overrides():
1370*7594170eSAndroid Build Coastguard Worker    name = "apex_certificate_label_with_overrides"
1371*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1372*7594170eSAndroid Build Coastguard Worker
1373*7594170eSAndroid Build Coastguard Worker    android_app_certificate(
1374*7594170eSAndroid Build Coastguard Worker        name = name + "_cert",
1375*7594170eSAndroid Build Coastguard Worker        certificate = name,
1376*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
1377*7594170eSAndroid Build Coastguard Worker    )
1378*7594170eSAndroid Build Coastguard Worker
1379*7594170eSAndroid Build Coastguard Worker    android_app_certificate(
1380*7594170eSAndroid Build Coastguard Worker        name = name + "_another_cert",
1381*7594170eSAndroid Build Coastguard Worker        certificate = name + "_another_cert",
1382*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
1383*7594170eSAndroid Build Coastguard Worker    )
1384*7594170eSAndroid Build Coastguard Worker
1385*7594170eSAndroid Build Coastguard Worker    test_apex(
1386*7594170eSAndroid Build Coastguard Worker        name = name,
1387*7594170eSAndroid Build Coastguard Worker        certificate = name + "_cert",
1388*7594170eSAndroid Build Coastguard Worker    )
1389*7594170eSAndroid Build Coastguard Worker
1390*7594170eSAndroid Build Coastguard Worker    apex_certificate_with_overrides_test(
1391*7594170eSAndroid Build Coastguard Worker        name = test_name,
1392*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1393*7594170eSAndroid Build Coastguard Worker        expected_pem_path = "build/bazel/rules/apex/apex_certificate_label_with_overrides_another_cert.x509.pem",
1394*7594170eSAndroid Build Coastguard Worker        expected_pk8_path = "build/bazel/rules/apex/apex_certificate_label_with_overrides_another_cert.pk8",
1395*7594170eSAndroid Build Coastguard Worker    )
1396*7594170eSAndroid Build Coastguard Worker
1397*7594170eSAndroid Build Coastguard Worker    return test_name
1398*7594170eSAndroid Build Coastguard Worker
1399*7594170eSAndroid Build Coastguard Workerdef _min_sdk_version_apex_inherit_test_impl(ctx):
1400*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
1401*7594170eSAndroid Build Coastguard Worker    target_under_test = analysistest.target_under_test(env)
1402*7594170eSAndroid Build Coastguard Worker    argv = target_under_test[ActionArgsInfo].argv
1403*7594170eSAndroid Build Coastguard Worker
1404*7594170eSAndroid Build Coastguard Worker    found = False
1405*7594170eSAndroid Build Coastguard Worker    for arg in argv:
1406*7594170eSAndroid Build Coastguard Worker        if arg.startswith("--target="):
1407*7594170eSAndroid Build Coastguard Worker            found = True
1408*7594170eSAndroid Build Coastguard Worker            asserts.true(
1409*7594170eSAndroid Build Coastguard Worker                env,
1410*7594170eSAndroid Build Coastguard Worker                arg.endswith(ctx.attr.apex_min),
1411*7594170eSAndroid Build Coastguard Worker                "Incorrect --target flag: %s %s" % (arg, ctx.attr.apex_min),
1412*7594170eSAndroid Build Coastguard Worker            )
1413*7594170eSAndroid Build Coastguard Worker
1414*7594170eSAndroid Build Coastguard Worker    asserts.true(
1415*7594170eSAndroid Build Coastguard Worker        env,
1416*7594170eSAndroid Build Coastguard Worker        found,
1417*7594170eSAndroid Build Coastguard Worker        "No --target flag found: %s" % argv,
1418*7594170eSAndroid Build Coastguard Worker    )
1419*7594170eSAndroid Build Coastguard Worker
1420*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
1421*7594170eSAndroid Build Coastguard Worker
1422*7594170eSAndroid Build Coastguard Workerdef _feature_check_aspect_impl(target, ctx):
1423*7594170eSAndroid Build Coastguard Worker    rules_propagate_src = [
1424*7594170eSAndroid Build Coastguard Worker        "_bssl_hash_injection",
1425*7594170eSAndroid Build Coastguard Worker        "stripped_shared_library",
1426*7594170eSAndroid Build Coastguard Worker        "versioned_shared_library",
1427*7594170eSAndroid Build Coastguard Worker    ]
1428*7594170eSAndroid Build Coastguard Worker
1429*7594170eSAndroid Build Coastguard Worker    argv = []
1430*7594170eSAndroid Build Coastguard Worker    if ctx.rule.kind == "cc_shared_library" and target.label.name == ctx.attr.cc_target:
1431*7594170eSAndroid Build Coastguard Worker        link_actions = [a for a in target.actions if a.mnemonic == "CppLink"]
1432*7594170eSAndroid Build Coastguard Worker        argv = link_actions[0].argv
1433*7594170eSAndroid Build Coastguard Worker    elif ctx.rule.kind in rules_propagate_src and hasattr(ctx.rule.attr, "src"):
1434*7594170eSAndroid Build Coastguard Worker        argv = ctx.rule.attr.src[ActionArgsInfo].argv
1435*7594170eSAndroid Build Coastguard Worker    elif ctx.rule.kind == "_cc_library_shared_proxy" and hasattr(ctx.rule.attr, "shared"):
1436*7594170eSAndroid Build Coastguard Worker        argv = ctx.rule.attr.shared[0][ActionArgsInfo].argv
1437*7594170eSAndroid Build Coastguard Worker    elif ctx.rule.kind == "_apex" and hasattr(ctx.rule.attr, "native_shared_libs_32"):
1438*7594170eSAndroid Build Coastguard Worker        argv = ctx.rule.attr.native_shared_libs_32[0][ActionArgsInfo].argv
1439*7594170eSAndroid Build Coastguard Worker
1440*7594170eSAndroid Build Coastguard Worker    return [
1441*7594170eSAndroid Build Coastguard Worker        ActionArgsInfo(
1442*7594170eSAndroid Build Coastguard Worker            argv = argv,
1443*7594170eSAndroid Build Coastguard Worker        ),
1444*7594170eSAndroid Build Coastguard Worker    ]
1445*7594170eSAndroid Build Coastguard Worker
1446*7594170eSAndroid Build Coastguard Workerfeature_check_aspect = aspect(
1447*7594170eSAndroid Build Coastguard Worker    implementation = _feature_check_aspect_impl,
1448*7594170eSAndroid Build Coastguard Worker    attrs = {
1449*7594170eSAndroid Build Coastguard Worker        "cc_target": attr.string(values = [
1450*7594170eSAndroid Build Coastguard Worker            # This has to mirror the test impl library names
1451*7594170eSAndroid Build Coastguard Worker            "min_sdk_version_apex_inherit_lib_cc_unstripped",
1452*7594170eSAndroid Build Coastguard Worker            "min_sdk_version_apex_inherit_override_min_sdk_tiramisu_lib_cc_unstripped",
1453*7594170eSAndroid Build Coastguard Worker        ]),
1454*7594170eSAndroid Build Coastguard Worker    },
1455*7594170eSAndroid Build Coastguard Worker    attr_aspects = ["native_shared_libs_32", "shared", "src"],
1456*7594170eSAndroid Build Coastguard Worker)
1457*7594170eSAndroid Build Coastguard Worker
1458*7594170eSAndroid Build Coastguard Workermin_sdk_version_apex_inherit_test_attrs = dict(
1459*7594170eSAndroid Build Coastguard Worker    impl = _min_sdk_version_apex_inherit_test_impl,
1460*7594170eSAndroid Build Coastguard Worker    attrs = {
1461*7594170eSAndroid Build Coastguard Worker        "apex_min": attr.string(),
1462*7594170eSAndroid Build Coastguard Worker        "cc_target": attr.string(),
1463*7594170eSAndroid Build Coastguard Worker    },
1464*7594170eSAndroid Build Coastguard Worker    # We need to use aspect to examine the dependencies' actions of the apex
1465*7594170eSAndroid Build Coastguard Worker    # target as the result of the transition, checking the dependencies directly
1466*7594170eSAndroid Build Coastguard Worker    # using names will give you the info before the transition takes effect.
1467*7594170eSAndroid Build Coastguard Worker    extra_target_under_test_aspects = [feature_check_aspect],
1468*7594170eSAndroid Build Coastguard Worker)
1469*7594170eSAndroid Build Coastguard Worker
1470*7594170eSAndroid Build Coastguard Workermin_sdk_version_apex_inherit_test = analysistest.make(
1471*7594170eSAndroid Build Coastguard Worker    **min_sdk_version_apex_inherit_test_attrs
1472*7594170eSAndroid Build Coastguard Worker)
1473*7594170eSAndroid Build Coastguard Worker
1474*7594170eSAndroid Build Coastguard Workermin_sdk_version_apex_inherit_override_min_sdk_tiramisu_test = analysistest.make(
1475*7594170eSAndroid Build Coastguard Worker    config_settings = {
1476*7594170eSAndroid Build Coastguard Worker        "//command_line_option:platforms": "@//build/bazel/tests/products:aosp_arm64_for_testing_min_sdk_version_override_tiramisu",
1477*7594170eSAndroid Build Coastguard Worker    },
1478*7594170eSAndroid Build Coastguard Worker    **min_sdk_version_apex_inherit_test_attrs
1479*7594170eSAndroid Build Coastguard Worker)
1480*7594170eSAndroid Build Coastguard Worker
1481*7594170eSAndroid Build Coastguard Workerdef _test_min_sdk_version_apex_inherit():
1482*7594170eSAndroid Build Coastguard Worker    name = "min_sdk_version_apex_inherit"
1483*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1484*7594170eSAndroid Build Coastguard Worker    cc_name = name + "_lib_cc"
1485*7594170eSAndroid Build Coastguard Worker    apex_min = "29"
1486*7594170eSAndroid Build Coastguard Worker
1487*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
1488*7594170eSAndroid Build Coastguard Worker        name = cc_name,
1489*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib.cc"],
1490*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
1491*7594170eSAndroid Build Coastguard Worker        min_sdk_version = "apex_inherit",
1492*7594170eSAndroid Build Coastguard Worker    )
1493*7594170eSAndroid Build Coastguard Worker
1494*7594170eSAndroid Build Coastguard Worker    test_apex(
1495*7594170eSAndroid Build Coastguard Worker        name = name,
1496*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [cc_name],
1497*7594170eSAndroid Build Coastguard Worker        min_sdk_version = apex_min,
1498*7594170eSAndroid Build Coastguard Worker    )
1499*7594170eSAndroid Build Coastguard Worker
1500*7594170eSAndroid Build Coastguard Worker    min_sdk_version_apex_inherit_test(
1501*7594170eSAndroid Build Coastguard Worker        name = test_name,
1502*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1503*7594170eSAndroid Build Coastguard Worker        apex_min = apex_min,
1504*7594170eSAndroid Build Coastguard Worker        cc_target = cc_name + "_unstripped",
1505*7594170eSAndroid Build Coastguard Worker    )
1506*7594170eSAndroid Build Coastguard Worker
1507*7594170eSAndroid Build Coastguard Worker    return test_name
1508*7594170eSAndroid Build Coastguard Worker
1509*7594170eSAndroid Build Coastguard Workerdef _test_min_sdk_version_apex_inherit_override_min_sdk_tiramisu():
1510*7594170eSAndroid Build Coastguard Worker    name = "min_sdk_version_apex_inherit_override_min_sdk_tiramisu"
1511*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1512*7594170eSAndroid Build Coastguard Worker    cc_name = name + "_lib_cc"
1513*7594170eSAndroid Build Coastguard Worker
1514*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
1515*7594170eSAndroid Build Coastguard Worker        name = cc_name,
1516*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib.cc"],
1517*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
1518*7594170eSAndroid Build Coastguard Worker        min_sdk_version = "apex_inherit",
1519*7594170eSAndroid Build Coastguard Worker    )
1520*7594170eSAndroid Build Coastguard Worker
1521*7594170eSAndroid Build Coastguard Worker    test_apex(
1522*7594170eSAndroid Build Coastguard Worker        name = name,
1523*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [cc_name],
1524*7594170eSAndroid Build Coastguard Worker        min_sdk_version = "29",
1525*7594170eSAndroid Build Coastguard Worker    )
1526*7594170eSAndroid Build Coastguard Worker
1527*7594170eSAndroid Build Coastguard Worker    min_sdk_version_apex_inherit_override_min_sdk_tiramisu_test(
1528*7594170eSAndroid Build Coastguard Worker        name = test_name,
1529*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1530*7594170eSAndroid Build Coastguard Worker        apex_min = "33",  # the apex transition forced the apex min_sdk_version to be 33
1531*7594170eSAndroid Build Coastguard Worker        cc_target = cc_name + "_unstripped",
1532*7594170eSAndroid Build Coastguard Worker    )
1533*7594170eSAndroid Build Coastguard Worker
1534*7594170eSAndroid Build Coastguard Worker    return test_name
1535*7594170eSAndroid Build Coastguard Worker
1536*7594170eSAndroid Build Coastguard Workerdef _apex_provides_base_zip_files_test_impl(ctx):
1537*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
1538*7594170eSAndroid Build Coastguard Worker    target_under_test = analysistest.target_under_test(env)
1539*7594170eSAndroid Build Coastguard Worker
1540*7594170eSAndroid Build Coastguard Worker    # The particular name of the file isn't important as it just gets zipped with the other apex files for other architectures
1541*7594170eSAndroid Build Coastguard Worker    asserts.true(
1542*7594170eSAndroid Build Coastguard Worker        env,
1543*7594170eSAndroid Build Coastguard Worker        target_under_test[ApexInfo].base_file != None,
1544*7594170eSAndroid Build Coastguard Worker        "Expected base_file to exist, but found None %s" % target_under_test[ApexInfo].base_file,
1545*7594170eSAndroid Build Coastguard Worker    )
1546*7594170eSAndroid Build Coastguard Worker
1547*7594170eSAndroid Build Coastguard Worker    asserts.equals(
1548*7594170eSAndroid Build Coastguard Worker        env,
1549*7594170eSAndroid Build Coastguard Worker        target_under_test[ApexInfo].base_with_config_zip.basename,
1550*7594170eSAndroid Build Coastguard Worker        # name is important here because the file gets disted and then referenced by name
1551*7594170eSAndroid Build Coastguard Worker        ctx.attr.apex_name + ".apex-base.zip",
1552*7594170eSAndroid Build Coastguard Worker        "Expected base file with config zip to have name ending with , but found %s" % target_under_test[ApexInfo].base_with_config_zip.basename,
1553*7594170eSAndroid Build Coastguard Worker    )
1554*7594170eSAndroid Build Coastguard Worker
1555*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
1556*7594170eSAndroid Build Coastguard Worker
1557*7594170eSAndroid Build Coastguard Workerapex_provides_base_zip_files_test = analysistest.make(
1558*7594170eSAndroid Build Coastguard Worker    _apex_provides_base_zip_files_test_impl,
1559*7594170eSAndroid Build Coastguard Worker    attrs = {
1560*7594170eSAndroid Build Coastguard Worker        "apex_name": attr.string(),
1561*7594170eSAndroid Build Coastguard Worker    },
1562*7594170eSAndroid Build Coastguard Worker)
1563*7594170eSAndroid Build Coastguard Worker
1564*7594170eSAndroid Build Coastguard Workerdef _test_apex_provides_base_zip_files():
1565*7594170eSAndroid Build Coastguard Worker    name = "apex_provides_base_zip_files"
1566*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1567*7594170eSAndroid Build Coastguard Worker
1568*7594170eSAndroid Build Coastguard Worker    test_apex(name = name)
1569*7594170eSAndroid Build Coastguard Worker
1570*7594170eSAndroid Build Coastguard Worker    apex_provides_base_zip_files_test(
1571*7594170eSAndroid Build Coastguard Worker        name = test_name,
1572*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1573*7594170eSAndroid Build Coastguard Worker        apex_name = name,
1574*7594170eSAndroid Build Coastguard Worker    )
1575*7594170eSAndroid Build Coastguard Worker
1576*7594170eSAndroid Build Coastguard Worker    return test_name
1577*7594170eSAndroid Build Coastguard Worker
1578*7594170eSAndroid Build Coastguard Workerdef _apex_testonly_with_manifest_test_impl(ctx):
1579*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
1580*7594170eSAndroid Build Coastguard Worker    actions = [a for a in analysistest.target_actions(env) if a.mnemonic == "Apexer"]
1581*7594170eSAndroid Build Coastguard Worker    asserts.true(
1582*7594170eSAndroid Build Coastguard Worker        env,
1583*7594170eSAndroid Build Coastguard Worker        len(actions) == 1,
1584*7594170eSAndroid Build Coastguard Worker        "No apexer action found: %s" % actions,
1585*7594170eSAndroid Build Coastguard Worker    )
1586*7594170eSAndroid Build Coastguard Worker    argv = actions[0].argv
1587*7594170eSAndroid Build Coastguard Worker
1588*7594170eSAndroid Build Coastguard Worker    asserts.false(
1589*7594170eSAndroid Build Coastguard Worker        env,
1590*7594170eSAndroid Build Coastguard Worker        "--test_only" in argv,
1591*7594170eSAndroid Build Coastguard Worker        "Calling apexer with --test_only when manifest file is specified: %s" % argv,
1592*7594170eSAndroid Build Coastguard Worker    )
1593*7594170eSAndroid Build Coastguard Worker
1594*7594170eSAndroid Build Coastguard Worker    actions = [a for a in analysistest.target_actions(env) if a.mnemonic == "MarkAndroidManifestTestOnly"]
1595*7594170eSAndroid Build Coastguard Worker    asserts.true(
1596*7594170eSAndroid Build Coastguard Worker        env,
1597*7594170eSAndroid Build Coastguard Worker        len(actions) == 1,
1598*7594170eSAndroid Build Coastguard Worker        "No MarkAndroidManifestTestOnly action found: %s" % actions,
1599*7594170eSAndroid Build Coastguard Worker    )
1600*7594170eSAndroid Build Coastguard Worker    argv = actions[0].argv
1601*7594170eSAndroid Build Coastguard Worker
1602*7594170eSAndroid Build Coastguard Worker    asserts.true(
1603*7594170eSAndroid Build Coastguard Worker        env,
1604*7594170eSAndroid Build Coastguard Worker        "--test-only" in argv,
1605*7594170eSAndroid Build Coastguard Worker        "Calling manifest_fixer without --test-only: %s" % argv,
1606*7594170eSAndroid Build Coastguard Worker    )
1607*7594170eSAndroid Build Coastguard Worker
1608*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
1609*7594170eSAndroid Build Coastguard Worker
1610*7594170eSAndroid Build Coastguard Workerapex_testonly_with_manifest_test = analysistest.make(
1611*7594170eSAndroid Build Coastguard Worker    _apex_testonly_with_manifest_test_impl,
1612*7594170eSAndroid Build Coastguard Worker)
1613*7594170eSAndroid Build Coastguard Worker
1614*7594170eSAndroid Build Coastguard Workerdef _test_apex_testonly_with_manifest():
1615*7594170eSAndroid Build Coastguard Worker    name = "apex_testonly_with_manifest"
1616*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1617*7594170eSAndroid Build Coastguard Worker
1618*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
1619*7594170eSAndroid Build Coastguard Worker        name = name + "_lib_cc",
1620*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib.cc"],
1621*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
1622*7594170eSAndroid Build Coastguard Worker        min_sdk_version = "32",
1623*7594170eSAndroid Build Coastguard Worker    )
1624*7594170eSAndroid Build Coastguard Worker
1625*7594170eSAndroid Build Coastguard Worker    test_apex(
1626*7594170eSAndroid Build Coastguard Worker        name = name,
1627*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [name + "_lib_cc"],
1628*7594170eSAndroid Build Coastguard Worker        # This will not cause the validation failure because it is testonly.
1629*7594170eSAndroid Build Coastguard Worker        min_sdk_version = "30",
1630*7594170eSAndroid Build Coastguard Worker        testonly = True,
1631*7594170eSAndroid Build Coastguard Worker        tests = [name + "_cc_test"],
1632*7594170eSAndroid Build Coastguard Worker        android_manifest = "AndroidManifest.xml",
1633*7594170eSAndroid Build Coastguard Worker    )
1634*7594170eSAndroid Build Coastguard Worker
1635*7594170eSAndroid Build Coastguard Worker    # It shouldn't complain about the min_sdk_version of the dep is too low.
1636*7594170eSAndroid Build Coastguard Worker    apex_testonly_with_manifest_test(
1637*7594170eSAndroid Build Coastguard Worker        name = test_name,
1638*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1639*7594170eSAndroid Build Coastguard Worker    )
1640*7594170eSAndroid Build Coastguard Worker
1641*7594170eSAndroid Build Coastguard Worker    return test_name
1642*7594170eSAndroid Build Coastguard Worker
1643*7594170eSAndroid Build Coastguard Workerdef _apex_testonly_without_manifest_test_impl(ctx):
1644*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
1645*7594170eSAndroid Build Coastguard Worker    actions = [a for a in analysistest.target_actions(env) if a.mnemonic == "Apexer"]
1646*7594170eSAndroid Build Coastguard Worker    asserts.true(
1647*7594170eSAndroid Build Coastguard Worker        env,
1648*7594170eSAndroid Build Coastguard Worker        len(actions) == 1,
1649*7594170eSAndroid Build Coastguard Worker        "No apexer action found: %s" % actions,
1650*7594170eSAndroid Build Coastguard Worker    )
1651*7594170eSAndroid Build Coastguard Worker    argv = actions[0].argv[:-1] + actions[0].argv[-1].split(" ")
1652*7594170eSAndroid Build Coastguard Worker
1653*7594170eSAndroid Build Coastguard Worker    asserts.true(
1654*7594170eSAndroid Build Coastguard Worker        env,
1655*7594170eSAndroid Build Coastguard Worker        "--test_only" in argv,
1656*7594170eSAndroid Build Coastguard Worker        "Calling apexer without --test_only when manifest file is not specified: %s" % argv,
1657*7594170eSAndroid Build Coastguard Worker    )
1658*7594170eSAndroid Build Coastguard Worker
1659*7594170eSAndroid Build Coastguard Worker    actions = [a for a in analysistest.target_actions(env) if a.mnemonic == "MarkAndroidManifestTestOnly"]
1660*7594170eSAndroid Build Coastguard Worker    asserts.true(
1661*7594170eSAndroid Build Coastguard Worker        env,
1662*7594170eSAndroid Build Coastguard Worker        len(actions) == 0,
1663*7594170eSAndroid Build Coastguard Worker        "MarkAndroidManifestTestOnly shouldn't be called when manifest file is not specified: %s" % actions,
1664*7594170eSAndroid Build Coastguard Worker    )
1665*7594170eSAndroid Build Coastguard Worker
1666*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
1667*7594170eSAndroid Build Coastguard Worker
1668*7594170eSAndroid Build Coastguard Workerapex_testonly_without_manifest_test = analysistest.make(
1669*7594170eSAndroid Build Coastguard Worker    _apex_testonly_without_manifest_test_impl,
1670*7594170eSAndroid Build Coastguard Worker)
1671*7594170eSAndroid Build Coastguard Worker
1672*7594170eSAndroid Build Coastguard Workerdef _test_apex_testonly_without_manifest():
1673*7594170eSAndroid Build Coastguard Worker    name = "apex_testonly_without_manifest"
1674*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1675*7594170eSAndroid Build Coastguard Worker
1676*7594170eSAndroid Build Coastguard Worker    test_apex(
1677*7594170eSAndroid Build Coastguard Worker        name = name,
1678*7594170eSAndroid Build Coastguard Worker        testonly = True,
1679*7594170eSAndroid Build Coastguard Worker    )
1680*7594170eSAndroid Build Coastguard Worker
1681*7594170eSAndroid Build Coastguard Worker    apex_testonly_without_manifest_test(
1682*7594170eSAndroid Build Coastguard Worker        name = test_name,
1683*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1684*7594170eSAndroid Build Coastguard Worker    )
1685*7594170eSAndroid Build Coastguard Worker
1686*7594170eSAndroid Build Coastguard Worker    return test_name
1687*7594170eSAndroid Build Coastguard Worker
1688*7594170eSAndroid Build Coastguard Workerdef _apex_backing_file_test(ctx):
1689*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
1690*7594170eSAndroid Build Coastguard Worker    actions = [a for a in analysistest.target_actions(env) if a.mnemonic == "FileWrite" and a.outputs.to_list()[0].basename.endswith("_backing.txt")]
1691*7594170eSAndroid Build Coastguard Worker    asserts.true(
1692*7594170eSAndroid Build Coastguard Worker        env,
1693*7594170eSAndroid Build Coastguard Worker        len(actions) == 1,
1694*7594170eSAndroid Build Coastguard Worker        "No FileWrite action found for creating <apex>_backing.txt file: %s" % actions,
1695*7594170eSAndroid Build Coastguard Worker    )
1696*7594170eSAndroid Build Coastguard Worker
1697*7594170eSAndroid Build Coastguard Worker    asserts.equals(env, ctx.attr.expected_content, actions[0].content)
1698*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
1699*7594170eSAndroid Build Coastguard Worker
1700*7594170eSAndroid Build Coastguard Workerapex_backing_file_test = analysistest.make(
1701*7594170eSAndroid Build Coastguard Worker    _apex_backing_file_test,
1702*7594170eSAndroid Build Coastguard Worker    attrs = {
1703*7594170eSAndroid Build Coastguard Worker        "expected_content": attr.string(),
1704*7594170eSAndroid Build Coastguard Worker    },
1705*7594170eSAndroid Build Coastguard Worker)
1706*7594170eSAndroid Build Coastguard Worker
1707*7594170eSAndroid Build Coastguard Workerdef _test_apex_backing_file():
1708*7594170eSAndroid Build Coastguard Worker    name = "apex_backing_file"
1709*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1710*7594170eSAndroid Build Coastguard Worker
1711*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
1712*7594170eSAndroid Build Coastguard Worker        name = name + "_lib_cc",
1713*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib.cc"],
1714*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
1715*7594170eSAndroid Build Coastguard Worker    )
1716*7594170eSAndroid Build Coastguard Worker
1717*7594170eSAndroid Build Coastguard Worker    test_apex(
1718*7594170eSAndroid Build Coastguard Worker        name = name,
1719*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [name + "_lib_cc"],
1720*7594170eSAndroid Build Coastguard Worker        android_manifest = "AndroidManifest.xml",
1721*7594170eSAndroid Build Coastguard Worker    )
1722*7594170eSAndroid Build Coastguard Worker
1723*7594170eSAndroid Build Coastguard Worker    apex_backing_file_test(
1724*7594170eSAndroid Build Coastguard Worker        name = test_name,
1725*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1726*7594170eSAndroid Build Coastguard Worker        expected_content = "apex_backing_file_lib_cc.so libc++.so\n",
1727*7594170eSAndroid Build Coastguard Worker    )
1728*7594170eSAndroid Build Coastguard Worker
1729*7594170eSAndroid Build Coastguard Worker    return test_name
1730*7594170eSAndroid Build Coastguard Worker
1731*7594170eSAndroid Build Coastguard Workerdef _apex_installed_files_test(ctx):
1732*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
1733*7594170eSAndroid Build Coastguard Worker    actions = [a for a in analysistest.target_actions(env) if a.mnemonic == "GenerateApexInstalledFileList"]
1734*7594170eSAndroid Build Coastguard Worker    asserts.true(
1735*7594170eSAndroid Build Coastguard Worker        env,
1736*7594170eSAndroid Build Coastguard Worker        len(actions) == 1,
1737*7594170eSAndroid Build Coastguard Worker        "No GenerateApexInstalledFileList action found for creating <apex>-installed-files.txt file: %s" % actions,
1738*7594170eSAndroid Build Coastguard Worker    )
1739*7594170eSAndroid Build Coastguard Worker
1740*7594170eSAndroid Build Coastguard Worker    asserts.equals(
1741*7594170eSAndroid Build Coastguard Worker        env,
1742*7594170eSAndroid Build Coastguard Worker        len(ctx.attr.expected_inputs),
1743*7594170eSAndroid Build Coastguard Worker        len(actions[0].inputs.to_list()),
1744*7594170eSAndroid Build Coastguard Worker        "Expected inputs length: %d, actual inputs length: %d" % (len(ctx.attr.expected_inputs), len(actions[0].inputs.to_list())),
1745*7594170eSAndroid Build Coastguard Worker    )
1746*7594170eSAndroid Build Coastguard Worker    for file in actions[0].inputs.to_list():
1747*7594170eSAndroid Build Coastguard Worker        asserts.true(
1748*7594170eSAndroid Build Coastguard Worker            env,
1749*7594170eSAndroid Build Coastguard Worker            file.basename in ctx.attr.expected_inputs,
1750*7594170eSAndroid Build Coastguard Worker            "Unexpected input: %s" % file.basename,
1751*7594170eSAndroid Build Coastguard Worker        )
1752*7594170eSAndroid Build Coastguard Worker    asserts.equals(env, ctx.attr.expected_output, actions[0].outputs.to_list()[0].basename)
1753*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
1754*7594170eSAndroid Build Coastguard Worker
1755*7594170eSAndroid Build Coastguard Workerapex_installed_files_test = analysistest.make(
1756*7594170eSAndroid Build Coastguard Worker    _apex_installed_files_test,
1757*7594170eSAndroid Build Coastguard Worker    attrs = {
1758*7594170eSAndroid Build Coastguard Worker        "expected_inputs": attr.string_list(),
1759*7594170eSAndroid Build Coastguard Worker        "expected_output": attr.string(),
1760*7594170eSAndroid Build Coastguard Worker    },
1761*7594170eSAndroid Build Coastguard Worker)
1762*7594170eSAndroid Build Coastguard Worker
1763*7594170eSAndroid Build Coastguard Workerdef _test_apex_installed_files():
1764*7594170eSAndroid Build Coastguard Worker    name = "apex_installed_files"
1765*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1766*7594170eSAndroid Build Coastguard Worker
1767*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
1768*7594170eSAndroid Build Coastguard Worker        name = name + "_lib_cc",
1769*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib.cc"],
1770*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
1771*7594170eSAndroid Build Coastguard Worker    )
1772*7594170eSAndroid Build Coastguard Worker
1773*7594170eSAndroid Build Coastguard Worker    test_apex(
1774*7594170eSAndroid Build Coastguard Worker        name = name,
1775*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [name + "_lib_cc"],
1776*7594170eSAndroid Build Coastguard Worker        android_manifest = "AndroidManifest.xml",
1777*7594170eSAndroid Build Coastguard Worker    )
1778*7594170eSAndroid Build Coastguard Worker
1779*7594170eSAndroid Build Coastguard Worker    apex_installed_files_test(
1780*7594170eSAndroid Build Coastguard Worker        name = test_name,
1781*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1782*7594170eSAndroid Build Coastguard Worker        expected_inputs = ["libc++.so", "apex_installed_files_lib_cc.so"],
1783*7594170eSAndroid Build Coastguard Worker        expected_output = "apex_installed_files-installed-files.txt",
1784*7594170eSAndroid Build Coastguard Worker    )
1785*7594170eSAndroid Build Coastguard Worker
1786*7594170eSAndroid Build Coastguard Worker    return test_name
1787*7594170eSAndroid Build Coastguard Worker
1788*7594170eSAndroid Build Coastguard Workerdef _apex_symbols_used_by_apex_test(ctx):
1789*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
1790*7594170eSAndroid Build Coastguard Worker    target_under_test = analysistest.target_under_test(env)
1791*7594170eSAndroid Build Coastguard Worker    actual = target_under_test[ApexInfo].symbols_used_by_apex
1792*7594170eSAndroid Build Coastguard Worker
1793*7594170eSAndroid Build Coastguard Worker    asserts.equals(env, ctx.attr.expected_path, actual.short_path)
1794*7594170eSAndroid Build Coastguard Worker
1795*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
1796*7594170eSAndroid Build Coastguard Worker
1797*7594170eSAndroid Build Coastguard Workerapex_symbols_used_by_apex_test = analysistest.make(
1798*7594170eSAndroid Build Coastguard Worker    _apex_symbols_used_by_apex_test,
1799*7594170eSAndroid Build Coastguard Worker    attrs = {
1800*7594170eSAndroid Build Coastguard Worker        "expected_path": attr.string(),
1801*7594170eSAndroid Build Coastguard Worker    },
1802*7594170eSAndroid Build Coastguard Worker)
1803*7594170eSAndroid Build Coastguard Worker
1804*7594170eSAndroid Build Coastguard Workerdef _test_apex_symbols_used_by_apex():
1805*7594170eSAndroid Build Coastguard Worker    name = "apex_with_symbols_used_by_apex"
1806*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1807*7594170eSAndroid Build Coastguard Worker
1808*7594170eSAndroid Build Coastguard Worker    test_apex(
1809*7594170eSAndroid Build Coastguard Worker        name = name,
1810*7594170eSAndroid Build Coastguard Worker    )
1811*7594170eSAndroid Build Coastguard Worker
1812*7594170eSAndroid Build Coastguard Worker    apex_symbols_used_by_apex_test(
1813*7594170eSAndroid Build Coastguard Worker        name = test_name,
1814*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1815*7594170eSAndroid Build Coastguard Worker        expected_path = "build/bazel/rules/apex/apex_with_symbols_used_by_apex_using.txt",
1816*7594170eSAndroid Build Coastguard Worker    )
1817*7594170eSAndroid Build Coastguard Worker
1818*7594170eSAndroid Build Coastguard Worker    return test_name
1819*7594170eSAndroid Build Coastguard Worker
1820*7594170eSAndroid Build Coastguard Workerdef _apex_java_symbols_used_by_apex_test(ctx):
1821*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
1822*7594170eSAndroid Build Coastguard Worker    target_under_test = analysistest.target_under_test(env)
1823*7594170eSAndroid Build Coastguard Worker    actual = target_under_test[ApexInfo].java_symbols_used_by_apex
1824*7594170eSAndroid Build Coastguard Worker
1825*7594170eSAndroid Build Coastguard Worker    asserts.equals(env, ctx.attr.expected_path, actual.short_path)
1826*7594170eSAndroid Build Coastguard Worker
1827*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
1828*7594170eSAndroid Build Coastguard Worker
1829*7594170eSAndroid Build Coastguard Workerapex_java_symbols_used_by_apex_test = analysistest.make(
1830*7594170eSAndroid Build Coastguard Worker    _apex_java_symbols_used_by_apex_test,
1831*7594170eSAndroid Build Coastguard Worker    attrs = {
1832*7594170eSAndroid Build Coastguard Worker        "expected_path": attr.string(),
1833*7594170eSAndroid Build Coastguard Worker    },
1834*7594170eSAndroid Build Coastguard Worker)
1835*7594170eSAndroid Build Coastguard Worker
1836*7594170eSAndroid Build Coastguard Workerdef _test_apex_java_symbols_used_by_apex():
1837*7594170eSAndroid Build Coastguard Worker    name = "apex_with_java_symbols_used_by_apex"
1838*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1839*7594170eSAndroid Build Coastguard Worker
1840*7594170eSAndroid Build Coastguard Worker    test_apex(
1841*7594170eSAndroid Build Coastguard Worker        name = name,
1842*7594170eSAndroid Build Coastguard Worker    )
1843*7594170eSAndroid Build Coastguard Worker
1844*7594170eSAndroid Build Coastguard Worker    apex_java_symbols_used_by_apex_test(
1845*7594170eSAndroid Build Coastguard Worker        name = test_name,
1846*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1847*7594170eSAndroid Build Coastguard Worker        expected_path = "build/bazel/rules/apex/apex_with_java_symbols_used_by_apex_using.xml",
1848*7594170eSAndroid Build Coastguard Worker    )
1849*7594170eSAndroid Build Coastguard Worker
1850*7594170eSAndroid Build Coastguard Worker    return test_name
1851*7594170eSAndroid Build Coastguard Worker
1852*7594170eSAndroid Build Coastguard Workerdef _generate_notice_file_test(ctx):
1853*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
1854*7594170eSAndroid Build Coastguard Worker    actions = [a for a in analysistest.target_actions(env) if a.mnemonic == "GenerateNoticeFile"]
1855*7594170eSAndroid Build Coastguard Worker    asserts.true(
1856*7594170eSAndroid Build Coastguard Worker        env,
1857*7594170eSAndroid Build Coastguard Worker        len(actions) == 1,
1858*7594170eSAndroid Build Coastguard Worker        "apex target should have a single GenerateNoticeFile action, found %s" % actions,
1859*7594170eSAndroid Build Coastguard Worker    )
1860*7594170eSAndroid Build Coastguard Worker    input_json = [f for f in actions[0].inputs.to_list() if f.basename.endswith("_licenses.json")]
1861*7594170eSAndroid Build Coastguard Worker    asserts.true(
1862*7594170eSAndroid Build Coastguard Worker        env,
1863*7594170eSAndroid Build Coastguard Worker        len(input_json) == 1,
1864*7594170eSAndroid Build Coastguard Worker        "apex GenerateNoticeFile should have a single input *_license.json file, got %s" % input_json,
1865*7594170eSAndroid Build Coastguard Worker    )
1866*7594170eSAndroid Build Coastguard Worker    outs = actions[0].outputs.to_list()
1867*7594170eSAndroid Build Coastguard Worker    asserts.true(
1868*7594170eSAndroid Build Coastguard Worker        env,
1869*7594170eSAndroid Build Coastguard Worker        len(outs) == 1 and outs[0].basename == "NOTICE.html.gz",
1870*7594170eSAndroid Build Coastguard Worker        "apex GenerateNoticeFile should generate a single NOTICE.html.gz file, got %s" % [o.short_path for o in outs],
1871*7594170eSAndroid Build Coastguard Worker    )
1872*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
1873*7594170eSAndroid Build Coastguard Worker
1874*7594170eSAndroid Build Coastguard Workerapex_generate_notice_file_test = analysistest.make(_generate_notice_file_test)
1875*7594170eSAndroid Build Coastguard Worker
1876*7594170eSAndroid Build Coastguard Workerdef _test_apex_generate_notice_file():
1877*7594170eSAndroid Build Coastguard Worker    name = "apex_notice_file"
1878*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1879*7594170eSAndroid Build Coastguard Worker    test_apex(name = name)
1880*7594170eSAndroid Build Coastguard Worker    apex_generate_notice_file_test(name = test_name, target_under_test = name)
1881*7594170eSAndroid Build Coastguard Worker    return test_name
1882*7594170eSAndroid Build Coastguard Worker
1883*7594170eSAndroid Build Coastguard Workerdef _analysis_success_test(ctx):
1884*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
1885*7594170eSAndroid Build Coastguard Worker
1886*7594170eSAndroid Build Coastguard Worker    # An empty analysis test that just ensures the target_under_test can be analyzed.
1887*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
1888*7594170eSAndroid Build Coastguard Worker
1889*7594170eSAndroid Build Coastguard Workeranalysis_success_test = analysistest.make(_analysis_success_test)
1890*7594170eSAndroid Build Coastguard Worker
1891*7594170eSAndroid Build Coastguard Workerdef _test_apex_available():
1892*7594170eSAndroid Build Coastguard Worker    name = "apex_available"
1893*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1894*7594170eSAndroid Build Coastguard Worker    static_lib_name = name + "_lib_cc_static"
1895*7594170eSAndroid Build Coastguard Worker    lib_headers_name = name + "_lib_cc_headers"
1896*7594170eSAndroid Build Coastguard Worker
1897*7594170eSAndroid Build Coastguard Worker    cc_library_static(
1898*7594170eSAndroid Build Coastguard Worker        name = static_lib_name,
1899*7594170eSAndroid Build Coastguard Worker        srcs = ["src.cc"],
1900*7594170eSAndroid Build Coastguard Worker        tags = [
1901*7594170eSAndroid Build Coastguard Worker            "manual",
1902*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
1903*7594170eSAndroid Build Coastguard Worker            # anyapex.
1904*7594170eSAndroid Build Coastguard Worker            "apex_available=//apex_available:anyapex",
1905*7594170eSAndroid Build Coastguard Worker        ],
1906*7594170eSAndroid Build Coastguard Worker    )
1907*7594170eSAndroid Build Coastguard Worker    cc_library_headers(
1908*7594170eSAndroid Build Coastguard Worker        name = lib_headers_name,
1909*7594170eSAndroid Build Coastguard Worker        export_absolute_includes = ["include_dir"],
1910*7594170eSAndroid Build Coastguard Worker        tags = [
1911*7594170eSAndroid Build Coastguard Worker            "manual",
1912*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
1913*7594170eSAndroid Build Coastguard Worker            "apex_available=//apex_available:anyapex",
1914*7594170eSAndroid Build Coastguard Worker        ],
1915*7594170eSAndroid Build Coastguard Worker    )
1916*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
1917*7594170eSAndroid Build Coastguard Worker        name = name + "_lib_cc",
1918*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib.cc"],
1919*7594170eSAndroid Build Coastguard Worker        deps = [
1920*7594170eSAndroid Build Coastguard Worker            static_lib_name,
1921*7594170eSAndroid Build Coastguard Worker            lib_headers_name,
1922*7594170eSAndroid Build Coastguard Worker        ],
1923*7594170eSAndroid Build Coastguard Worker        tags = [
1924*7594170eSAndroid Build Coastguard Worker            "manual",
1925*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
1926*7594170eSAndroid Build Coastguard Worker            # Explicit name.
1927*7594170eSAndroid Build Coastguard Worker            "apex_available=" + name,
1928*7594170eSAndroid Build Coastguard Worker        ],
1929*7594170eSAndroid Build Coastguard Worker    )
1930*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
1931*7594170eSAndroid Build Coastguard Worker        name = name + "_lib2_cc",
1932*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib2.cc"],
1933*7594170eSAndroid Build Coastguard Worker        tags = [
1934*7594170eSAndroid Build Coastguard Worker            "manual",
1935*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
1936*7594170eSAndroid Build Coastguard Worker            # anyapex.
1937*7594170eSAndroid Build Coastguard Worker            "apex_available=//apex_available:anyapex",
1938*7594170eSAndroid Build Coastguard Worker        ],
1939*7594170eSAndroid Build Coastguard Worker    )
1940*7594170eSAndroid Build Coastguard Worker    test_apex(
1941*7594170eSAndroid Build Coastguard Worker        name = name,
1942*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [
1943*7594170eSAndroid Build Coastguard Worker            name + "_lib_cc",
1944*7594170eSAndroid Build Coastguard Worker            name + "_lib2_cc",
1945*7594170eSAndroid Build Coastguard Worker        ],
1946*7594170eSAndroid Build Coastguard Worker        android_manifest = "AndroidManifest.xml",
1947*7594170eSAndroid Build Coastguard Worker    )
1948*7594170eSAndroid Build Coastguard Worker
1949*7594170eSAndroid Build Coastguard Worker    analysis_success_test(
1950*7594170eSAndroid Build Coastguard Worker        name = test_name,
1951*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
1952*7594170eSAndroid Build Coastguard Worker    )
1953*7594170eSAndroid Build Coastguard Worker
1954*7594170eSAndroid Build Coastguard Worker    return test_name
1955*7594170eSAndroid Build Coastguard Worker
1956*7594170eSAndroid Build Coastguard Workerdef _test_apex_available_failure():
1957*7594170eSAndroid Build Coastguard Worker    name = "apex_available_failure"
1958*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
1959*7594170eSAndroid Build Coastguard Worker    static_lib_name = name + "_lib_cc_static"
1960*7594170eSAndroid Build Coastguard Worker    lib_headers_name = name + "_lib_cc_headers"
1961*7594170eSAndroid Build Coastguard Worker
1962*7594170eSAndroid Build Coastguard Worker    cc_library_static(
1963*7594170eSAndroid Build Coastguard Worker        name = static_lib_name,
1964*7594170eSAndroid Build Coastguard Worker        srcs = ["src.cc"],
1965*7594170eSAndroid Build Coastguard Worker        tags = [
1966*7594170eSAndroid Build Coastguard Worker            "manual",
1967*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
1968*7594170eSAndroid Build Coastguard Worker        ],
1969*7594170eSAndroid Build Coastguard Worker    )
1970*7594170eSAndroid Build Coastguard Worker    cc_library_headers(
1971*7594170eSAndroid Build Coastguard Worker        name = lib_headers_name,
1972*7594170eSAndroid Build Coastguard Worker        export_absolute_includes = ["include_dir"],
1973*7594170eSAndroid Build Coastguard Worker        tags = [
1974*7594170eSAndroid Build Coastguard Worker            "manual",
1975*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
1976*7594170eSAndroid Build Coastguard Worker        ],
1977*7594170eSAndroid Build Coastguard Worker    )
1978*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
1979*7594170eSAndroid Build Coastguard Worker        name = name + "_lib_cc",
1980*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib.cc"],
1981*7594170eSAndroid Build Coastguard Worker        deps = [
1982*7594170eSAndroid Build Coastguard Worker            static_lib_name,
1983*7594170eSAndroid Build Coastguard Worker            lib_headers_name,
1984*7594170eSAndroid Build Coastguard Worker        ],
1985*7594170eSAndroid Build Coastguard Worker        tags = [
1986*7594170eSAndroid Build Coastguard Worker            "manual",
1987*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
1988*7594170eSAndroid Build Coastguard Worker        ],
1989*7594170eSAndroid Build Coastguard Worker    )
1990*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
1991*7594170eSAndroid Build Coastguard Worker        name = name + "_lib2_cc",
1992*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib2.cc"],
1993*7594170eSAndroid Build Coastguard Worker        tags = [
1994*7594170eSAndroid Build Coastguard Worker            "manual",
1995*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
1996*7594170eSAndroid Build Coastguard Worker            # anyapex.
1997*7594170eSAndroid Build Coastguard Worker            "apex_available=//apex_available:anyapex",
1998*7594170eSAndroid Build Coastguard Worker        ],
1999*7594170eSAndroid Build Coastguard Worker    )
2000*7594170eSAndroid Build Coastguard Worker    test_apex(
2001*7594170eSAndroid Build Coastguard Worker        name = name,
2002*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [
2003*7594170eSAndroid Build Coastguard Worker            name + "_lib_cc",
2004*7594170eSAndroid Build Coastguard Worker            name + "_lib2_cc",
2005*7594170eSAndroid Build Coastguard Worker        ],
2006*7594170eSAndroid Build Coastguard Worker        android_manifest = "AndroidManifest.xml",
2007*7594170eSAndroid Build Coastguard Worker    )
2008*7594170eSAndroid Build Coastguard Worker
2009*7594170eSAndroid Build Coastguard Worker    expect_failure_test(
2010*7594170eSAndroid Build Coastguard Worker        name = test_name,
2011*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
2012*7594170eSAndroid Build Coastguard Worker        failure_message = """
2013*7594170eSAndroid Build Coastguard WorkerError in fail: `@//build/bazel/rules/apex:apex_available_failure` apex has transitive dependencies that do not include the apex in their apex_available tags:
2014*7594170eSAndroid Build Coastguard Worker    @//build/bazel/rules/apex:apex_available_failure_lib_cc_static; apex_available tags: []
2015*7594170eSAndroid Build Coastguard Worker    @//build/bazel/rules/apex:apex_available_failure_lib_cc_headers; apex_available tags: []
2016*7594170eSAndroid Build Coastguard Worker    @//build/bazel/rules/apex:apex_available_failure_lib_cc; apex_available tags: []""",
2017*7594170eSAndroid Build Coastguard Worker    )
2018*7594170eSAndroid Build Coastguard Worker    return test_name
2019*7594170eSAndroid Build Coastguard Worker
2020*7594170eSAndroid Build Coastguard Workerdef _test_apex_available_with_base_apex():
2021*7594170eSAndroid Build Coastguard Worker    name = "apex_available_with_base_apex"
2022*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
2023*7594170eSAndroid Build Coastguard Worker
2024*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
2025*7594170eSAndroid Build Coastguard Worker        name = name + "_lib_cc",
2026*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib.cc"],
2027*7594170eSAndroid Build Coastguard Worker        tags = [
2028*7594170eSAndroid Build Coastguard Worker            "manual",
2029*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
2030*7594170eSAndroid Build Coastguard Worker            # Explicit name.
2031*7594170eSAndroid Build Coastguard Worker            "apex_available=" + name + "_base",
2032*7594170eSAndroid Build Coastguard Worker        ],
2033*7594170eSAndroid Build Coastguard Worker    )
2034*7594170eSAndroid Build Coastguard Worker
2035*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
2036*7594170eSAndroid Build Coastguard Worker        name = name + "_lib2_cc",
2037*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib2.cc"],
2038*7594170eSAndroid Build Coastguard Worker        tags = [
2039*7594170eSAndroid Build Coastguard Worker            "manual",
2040*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
2041*7594170eSAndroid Build Coastguard Worker            # anyapex.
2042*7594170eSAndroid Build Coastguard Worker            "apex_available=//apex_available:anyapex",
2043*7594170eSAndroid Build Coastguard Worker        ],
2044*7594170eSAndroid Build Coastguard Worker    )
2045*7594170eSAndroid Build Coastguard Worker
2046*7594170eSAndroid Build Coastguard Worker    test_apex(
2047*7594170eSAndroid Build Coastguard Worker        name = name,
2048*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [
2049*7594170eSAndroid Build Coastguard Worker            name + "_lib_cc",
2050*7594170eSAndroid Build Coastguard Worker            name + "_lib2_cc",
2051*7594170eSAndroid Build Coastguard Worker        ],
2052*7594170eSAndroid Build Coastguard Worker        base_apex_name = name + "_base",
2053*7594170eSAndroid Build Coastguard Worker        android_manifest = "AndroidManifest.xml",
2054*7594170eSAndroid Build Coastguard Worker    )
2055*7594170eSAndroid Build Coastguard Worker
2056*7594170eSAndroid Build Coastguard Worker    analysis_success_test(
2057*7594170eSAndroid Build Coastguard Worker        name = test_name,
2058*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
2059*7594170eSAndroid Build Coastguard Worker    )
2060*7594170eSAndroid Build Coastguard Worker
2061*7594170eSAndroid Build Coastguard Worker    return test_name
2062*7594170eSAndroid Build Coastguard Worker
2063*7594170eSAndroid Build Coastguard Workerdef _apex_deps_validation_test_impl(ctx):
2064*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
2065*7594170eSAndroid Build Coastguard Worker
2066*7594170eSAndroid Build Coastguard Worker    target_under_test = analysistest.target_under_test(env)
2067*7594170eSAndroid Build Coastguard Worker    asserts.new_set_equals(
2068*7594170eSAndroid Build Coastguard Worker        env,
2069*7594170eSAndroid Build Coastguard Worker        sets.make(ctx.attr.allowed_deps_manifest + ctx.attr._default_apex_deps),
2070*7594170eSAndroid Build Coastguard Worker        sets.make(apex_dep_infos_to_allowlist_strings(
2071*7594170eSAndroid Build Coastguard Worker            target_under_test[ApexDepsInfo].transitive_deps.to_list(),
2072*7594170eSAndroid Build Coastguard Worker        )),
2073*7594170eSAndroid Build Coastguard Worker    )
2074*7594170eSAndroid Build Coastguard Worker
2075*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
2076*7594170eSAndroid Build Coastguard Worker
2077*7594170eSAndroid Build Coastguard Worker_apex_deps_validation_test = analysistest.make(
2078*7594170eSAndroid Build Coastguard Worker    _apex_deps_validation_test_impl,
2079*7594170eSAndroid Build Coastguard Worker    attrs = {
2080*7594170eSAndroid Build Coastguard Worker        "allowed_deps_manifest": attr.string_list(),
2081*7594170eSAndroid Build Coastguard Worker        "_default_apex_deps": attr.string_list(
2082*7594170eSAndroid Build Coastguard Worker            default = [
2083*7594170eSAndroid Build Coastguard Worker                "libc_llndk_headers(minSdkVersion:apex_inherit)",
2084*7594170eSAndroid Build Coastguard Worker                "libc_headers(minSdkVersion:apex_inherit)",
2085*7594170eSAndroid Build Coastguard Worker                "libc++abi(minSdkVersion:apex_inherit)",
2086*7594170eSAndroid Build Coastguard Worker                "libc++_static(minSdkVersion:apex_inherit)",
2087*7594170eSAndroid Build Coastguard Worker                "libc++(minSdkVersion:apex_inherit)",
2088*7594170eSAndroid Build Coastguard Worker                "libc++demangle(minSdkVersion:apex_inherit)",
2089*7594170eSAndroid Build Coastguard Worker            ],
2090*7594170eSAndroid Build Coastguard Worker        ),
2091*7594170eSAndroid Build Coastguard Worker    },
2092*7594170eSAndroid Build Coastguard Worker    config_settings = {
2093*7594170eSAndroid Build Coastguard Worker        "@//build/bazel/rules/apex:unsafe_disable_apex_allowed_deps_check": True,
2094*7594170eSAndroid Build Coastguard Worker    },
2095*7594170eSAndroid Build Coastguard Worker)
2096*7594170eSAndroid Build Coastguard Worker
2097*7594170eSAndroid Build Coastguard Workerdef _test_apex_deps_validation():
2098*7594170eSAndroid Build Coastguard Worker    name = "apex_deps_validation"
2099*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
2100*7594170eSAndroid Build Coastguard Worker
2101*7594170eSAndroid Build Coastguard Worker    aidl_interface_name = name + "_aidl_interface"
2102*7594170eSAndroid Build Coastguard Worker    aidl_interface(
2103*7594170eSAndroid Build Coastguard Worker        name = aidl_interface_name,
2104*7594170eSAndroid Build Coastguard Worker        ndk_config = {
2105*7594170eSAndroid Build Coastguard Worker            "enabled": True,
2106*7594170eSAndroid Build Coastguard Worker            "min_sdk_version": "28",
2107*7594170eSAndroid Build Coastguard Worker        },
2108*7594170eSAndroid Build Coastguard Worker        srcs = ["Foo.aidl"],
2109*7594170eSAndroid Build Coastguard Worker        tags = [
2110*7594170eSAndroid Build Coastguard Worker            "manual",
2111*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
2112*7594170eSAndroid Build Coastguard Worker            "apex_available=" + name,
2113*7594170eSAndroid Build Coastguard Worker            "apex_available=//apex_available:platform",
2114*7594170eSAndroid Build Coastguard Worker        ],
2115*7594170eSAndroid Build Coastguard Worker    )
2116*7594170eSAndroid Build Coastguard Worker
2117*7594170eSAndroid Build Coastguard Worker    specific_apex_available_name = name + "_specific_apex_available"
2118*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
2119*7594170eSAndroid Build Coastguard Worker        name = specific_apex_available_name,
2120*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib.cc"],
2121*7594170eSAndroid Build Coastguard Worker        tags = [
2122*7594170eSAndroid Build Coastguard Worker            "manual",
2123*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
2124*7594170eSAndroid Build Coastguard Worker            "apex_available=" + name,
2125*7594170eSAndroid Build Coastguard Worker            "apex_available=//apex_available:platform",
2126*7594170eSAndroid Build Coastguard Worker        ],
2127*7594170eSAndroid Build Coastguard Worker        min_sdk_version = "30",
2128*7594170eSAndroid Build Coastguard Worker    )
2129*7594170eSAndroid Build Coastguard Worker
2130*7594170eSAndroid Build Coastguard Worker    any_apex_available_name = name + "_any_apex_available"
2131*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
2132*7594170eSAndroid Build Coastguard Worker        name = any_apex_available_name,
2133*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib.cc"],
2134*7594170eSAndroid Build Coastguard Worker        implementation_dynamic_deps = [aidl_interface_name + "-V1-ndk"],
2135*7594170eSAndroid Build Coastguard Worker        tags = [
2136*7594170eSAndroid Build Coastguard Worker            "manual",
2137*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
2138*7594170eSAndroid Build Coastguard Worker            "apex_available=//apex_available:anyapex",
2139*7594170eSAndroid Build Coastguard Worker            "apex_available=//apex_available:platform",
2140*7594170eSAndroid Build Coastguard Worker        ],
2141*7594170eSAndroid Build Coastguard Worker        min_sdk_version = "30",
2142*7594170eSAndroid Build Coastguard Worker    )
2143*7594170eSAndroid Build Coastguard Worker
2144*7594170eSAndroid Build Coastguard Worker    no_platform_available_name = name + "_no_platform_available"
2145*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
2146*7594170eSAndroid Build Coastguard Worker        name = no_platform_available_name,
2147*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib.cc"],
2148*7594170eSAndroid Build Coastguard Worker        tags = [
2149*7594170eSAndroid Build Coastguard Worker            "manual",
2150*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
2151*7594170eSAndroid Build Coastguard Worker            "apex_available=//apex_available:anyapex",
2152*7594170eSAndroid Build Coastguard Worker        ],
2153*7594170eSAndroid Build Coastguard Worker        min_sdk_version = "30",
2154*7594170eSAndroid Build Coastguard Worker    )
2155*7594170eSAndroid Build Coastguard Worker
2156*7594170eSAndroid Build Coastguard Worker    no_platform_available_transitive_dep_name = name + "_no_platform_available_transitive_dep"
2157*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
2158*7594170eSAndroid Build Coastguard Worker        name = no_platform_available_transitive_dep_name,
2159*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib.cc"],
2160*7594170eSAndroid Build Coastguard Worker        tags = [
2161*7594170eSAndroid Build Coastguard Worker            "manual",
2162*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
2163*7594170eSAndroid Build Coastguard Worker            "apex_available=//apex_available:anyapex",
2164*7594170eSAndroid Build Coastguard Worker        ],
2165*7594170eSAndroid Build Coastguard Worker        min_sdk_version = "30",
2166*7594170eSAndroid Build Coastguard Worker    )
2167*7594170eSAndroid Build Coastguard Worker
2168*7594170eSAndroid Build Coastguard Worker    platform_available_but_dep_with_no_platform_available_name = name + "_shared_platform_available_but_dep_with_no_platform_available"
2169*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
2170*7594170eSAndroid Build Coastguard Worker        name = platform_available_but_dep_with_no_platform_available_name,
2171*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib.cc"],
2172*7594170eSAndroid Build Coastguard Worker        deps = [no_platform_available_transitive_dep_name],
2173*7594170eSAndroid Build Coastguard Worker        tags = [
2174*7594170eSAndroid Build Coastguard Worker            "manual",
2175*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
2176*7594170eSAndroid Build Coastguard Worker            "apex_available=//apex_available:anyapex",
2177*7594170eSAndroid Build Coastguard Worker            "apex_available=//apex_available:platform",
2178*7594170eSAndroid Build Coastguard Worker        ],
2179*7594170eSAndroid Build Coastguard Worker        min_sdk_version = "30",
2180*7594170eSAndroid Build Coastguard Worker    )
2181*7594170eSAndroid Build Coastguard Worker
2182*7594170eSAndroid Build Coastguard Worker    test_apex(
2183*7594170eSAndroid Build Coastguard Worker        name = name,
2184*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [
2185*7594170eSAndroid Build Coastguard Worker            specific_apex_available_name,
2186*7594170eSAndroid Build Coastguard Worker            any_apex_available_name,
2187*7594170eSAndroid Build Coastguard Worker            no_platform_available_name,
2188*7594170eSAndroid Build Coastguard Worker            platform_available_but_dep_with_no_platform_available_name,
2189*7594170eSAndroid Build Coastguard Worker        ],
2190*7594170eSAndroid Build Coastguard Worker        android_manifest = "AndroidManifest.xml",
2191*7594170eSAndroid Build Coastguard Worker        min_sdk_version = "30",
2192*7594170eSAndroid Build Coastguard Worker    )
2193*7594170eSAndroid Build Coastguard Worker
2194*7594170eSAndroid Build Coastguard Worker    _apex_deps_validation_test(
2195*7594170eSAndroid Build Coastguard Worker        name = test_name,
2196*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
2197*7594170eSAndroid Build Coastguard Worker        allowed_deps_manifest = [
2198*7594170eSAndroid Build Coastguard Worker            specific_apex_available_name + "(minSdkVersion:30)",
2199*7594170eSAndroid Build Coastguard Worker            any_apex_available_name + "(minSdkVersion:30)",
2200*7594170eSAndroid Build Coastguard Worker            platform_available_but_dep_with_no_platform_available_name + "(minSdkVersion:30)",
2201*7594170eSAndroid Build Coastguard Worker            aidl_interface_name + "-V1-ndk(minSdkVersion:28)",
2202*7594170eSAndroid Build Coastguard Worker            "jni_headers(minSdkVersion:29)",
2203*7594170eSAndroid Build Coastguard Worker        ],
2204*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
2205*7594170eSAndroid Build Coastguard Worker    )
2206*7594170eSAndroid Build Coastguard Worker
2207*7594170eSAndroid Build Coastguard Worker    return test_name
2208*7594170eSAndroid Build Coastguard Worker
2209*7594170eSAndroid Build Coastguard Worker_MarchInfo = provider(fields = {"march": "list of march values found in the cc deps of this apex"})
2210*7594170eSAndroid Build Coastguard Worker
2211*7594170eSAndroid Build Coastguard Workerdef _apex_transition_test(ctx):
2212*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
2213*7594170eSAndroid Build Coastguard Worker    target_under_test = analysistest.target_under_test(env)
2214*7594170eSAndroid Build Coastguard Worker    march_values = target_under_test[_MarchInfo].march
2215*7594170eSAndroid Build Coastguard Worker
2216*7594170eSAndroid Build Coastguard Worker    asserts.equals(env, ctx.attr.expected, march_values.to_list())
2217*7594170eSAndroid Build Coastguard Worker
2218*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
2219*7594170eSAndroid Build Coastguard Worker
2220*7594170eSAndroid Build Coastguard Workerdef _cc_compile_test_aspect_impl(target, ctx):
2221*7594170eSAndroid Build Coastguard Worker    transitive_march = []
2222*7594170eSAndroid Build Coastguard Worker    for attr_deps in get_dep_targets(ctx.rule.attr, predicate = lambda target: _MarchInfo in target).values():
2223*7594170eSAndroid Build Coastguard Worker        for dep in attr_deps:
2224*7594170eSAndroid Build Coastguard Worker            transitive_march.append(dep[_MarchInfo].march)
2225*7594170eSAndroid Build Coastguard Worker    march_values = []
2226*7594170eSAndroid Build Coastguard Worker    if (target.label.name).startswith("apex_transition_lib"):
2227*7594170eSAndroid Build Coastguard Worker        for a in target.actions:
2228*7594170eSAndroid Build Coastguard Worker            if a.mnemonic == "CppCompile":
2229*7594170eSAndroid Build Coastguard Worker                march_values += [arg for arg in a.argv if "march" in arg]
2230*7594170eSAndroid Build Coastguard Worker    return [
2231*7594170eSAndroid Build Coastguard Worker        _MarchInfo(
2232*7594170eSAndroid Build Coastguard Worker            march = depset(
2233*7594170eSAndroid Build Coastguard Worker                direct = march_values,
2234*7594170eSAndroid Build Coastguard Worker                transitive = transitive_march,
2235*7594170eSAndroid Build Coastguard Worker            ),
2236*7594170eSAndroid Build Coastguard Worker        ),
2237*7594170eSAndroid Build Coastguard Worker    ]
2238*7594170eSAndroid Build Coastguard Worker
2239*7594170eSAndroid Build Coastguard Worker_cc_compile_test_aspect = aspect(
2240*7594170eSAndroid Build Coastguard Worker    implementation = _cc_compile_test_aspect_impl,
2241*7594170eSAndroid Build Coastguard Worker    attr_aspects = ["*"],
2242*7594170eSAndroid Build Coastguard Worker)
2243*7594170eSAndroid Build Coastguard Worker
2244*7594170eSAndroid Build Coastguard Workerapex_transition_test = analysistest.make(
2245*7594170eSAndroid Build Coastguard Worker    _apex_transition_test,
2246*7594170eSAndroid Build Coastguard Worker    attrs = {
2247*7594170eSAndroid Build Coastguard Worker        "expected": attr.string_list(),
2248*7594170eSAndroid Build Coastguard Worker    },
2249*7594170eSAndroid Build Coastguard Worker    extra_target_under_test_aspects = [_cc_compile_test_aspect],
2250*7594170eSAndroid Build Coastguard Worker)
2251*7594170eSAndroid Build Coastguard Worker
2252*7594170eSAndroid Build Coastguard Workerdef _test_apex_transition():
2253*7594170eSAndroid Build Coastguard Worker    name = "apex_transition"
2254*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
2255*7594170eSAndroid Build Coastguard Worker
2256*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
2257*7594170eSAndroid Build Coastguard Worker        name = name + "_lib_cc",
2258*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib.cc"],
2259*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
2260*7594170eSAndroid Build Coastguard Worker    )
2261*7594170eSAndroid Build Coastguard Worker
2262*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
2263*7594170eSAndroid Build Coastguard Worker        name = name + "_lib2_cc",
2264*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib2.cc"],
2265*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
2266*7594170eSAndroid Build Coastguard Worker    )
2267*7594170eSAndroid Build Coastguard Worker
2268*7594170eSAndroid Build Coastguard Worker    test_apex(
2269*7594170eSAndroid Build Coastguard Worker        name = name,
2270*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [name + "_lib_cc"],
2271*7594170eSAndroid Build Coastguard Worker        native_shared_libs_64 = [name + "_lib2_cc"],
2272*7594170eSAndroid Build Coastguard Worker        android_manifest = "AndroidManifest.xml",
2273*7594170eSAndroid Build Coastguard Worker    )
2274*7594170eSAndroid Build Coastguard Worker
2275*7594170eSAndroid Build Coastguard Worker    apex_transition_test(
2276*7594170eSAndroid Build Coastguard Worker        name = test_name + "_32",
2277*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
2278*7594170eSAndroid Build Coastguard Worker        target_compatible_with = ["//build/bazel_common_rules/platforms/os:android", "//build/bazel_common_rules/platforms/arch:arm"],
2279*7594170eSAndroid Build Coastguard Worker        expected = ["-march=armv7-a"],
2280*7594170eSAndroid Build Coastguard Worker    )
2281*7594170eSAndroid Build Coastguard Worker
2282*7594170eSAndroid Build Coastguard Worker    apex_transition_test(
2283*7594170eSAndroid Build Coastguard Worker        name = test_name + "_64",
2284*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
2285*7594170eSAndroid Build Coastguard Worker        target_compatible_with = ["//build/bazel_common_rules/platforms/os:android", "//build/bazel_common_rules/platforms/arch:arm64"],
2286*7594170eSAndroid Build Coastguard Worker        expected = ["-march=armv8-a"],
2287*7594170eSAndroid Build Coastguard Worker    )
2288*7594170eSAndroid Build Coastguard Worker
2289*7594170eSAndroid Build Coastguard Worker    return [test_name + "_32", test_name + "_64"]
2290*7594170eSAndroid Build Coastguard Worker
2291*7594170eSAndroid Build Coastguard Workerdef _test_no_static_linking_for_stubs_lib():
2292*7594170eSAndroid Build Coastguard Worker    name = "no_static_linking_for_stubs_lib"
2293*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
2294*7594170eSAndroid Build Coastguard Worker
2295*7594170eSAndroid Build Coastguard Worker    cc_library_static(
2296*7594170eSAndroid Build Coastguard Worker        name = name + "_static_unavailable_to_apex",
2297*7594170eSAndroid Build Coastguard Worker        tags = [
2298*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
2299*7594170eSAndroid Build Coastguard Worker            "manual",
2300*7594170eSAndroid Build Coastguard Worker        ],
2301*7594170eSAndroid Build Coastguard Worker    )
2302*7594170eSAndroid Build Coastguard Worker
2303*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
2304*7594170eSAndroid Build Coastguard Worker        name = name + "_shared",
2305*7594170eSAndroid Build Coastguard Worker        deps = [name + "_static_unavailable_to_apex"],
2306*7594170eSAndroid Build Coastguard Worker        tags = [
2307*7594170eSAndroid Build Coastguard Worker            "apex_available=" + name,
2308*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
2309*7594170eSAndroid Build Coastguard Worker            "manual",
2310*7594170eSAndroid Build Coastguard Worker        ],
2311*7594170eSAndroid Build Coastguard Worker    )
2312*7594170eSAndroid Build Coastguard Worker
2313*7594170eSAndroid Build Coastguard Worker    test_apex(
2314*7594170eSAndroid Build Coastguard Worker        name = name,
2315*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [name + "_shared"],
2316*7594170eSAndroid Build Coastguard Worker    )
2317*7594170eSAndroid Build Coastguard Worker
2318*7594170eSAndroid Build Coastguard Worker    expect_failure_test(
2319*7594170eSAndroid Build Coastguard Worker        name = test_name,
2320*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
2321*7594170eSAndroid Build Coastguard Worker        failure_message = """
2322*7594170eSAndroid Build Coastguard WorkerError in fail: `@//build/bazel/rules/apex:no_static_linking_for_stubs_lib` apex has transitive dependencies that do not include the apex in their apex_available tags:
2323*7594170eSAndroid Build Coastguard Worker    @//build/bazel/rules/apex:no_static_linking_for_stubs_lib_static_unavailable_to_apex; apex_available tags: []""",
2324*7594170eSAndroid Build Coastguard Worker    )
2325*7594170eSAndroid Build Coastguard Worker
2326*7594170eSAndroid Build Coastguard Worker    return test_name
2327*7594170eSAndroid Build Coastguard Worker
2328*7594170eSAndroid Build Coastguard Workerdef _test_directly_included_stubs_lib_with_indirectly_static_variant():
2329*7594170eSAndroid Build Coastguard Worker    name = "directly_included_stubs_lib_with_indirectly_static_variant"
2330*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
2331*7594170eSAndroid Build Coastguard Worker
2332*7594170eSAndroid Build Coastguard Worker    cc_binary(
2333*7594170eSAndroid Build Coastguard Worker        name = name + "bar",
2334*7594170eSAndroid Build Coastguard Worker        deps = [name + "_shared_bp2build_cc_library_static"],
2335*7594170eSAndroid Build Coastguard Worker        tags = [
2336*7594170eSAndroid Build Coastguard Worker            "apex_available=" + name,
2337*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
2338*7594170eSAndroid Build Coastguard Worker            "manual",
2339*7594170eSAndroid Build Coastguard Worker        ],
2340*7594170eSAndroid Build Coastguard Worker    )
2341*7594170eSAndroid Build Coastguard Worker
2342*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
2343*7594170eSAndroid Build Coastguard Worker        name = name + "foo",
2344*7594170eSAndroid Build Coastguard Worker        deps = [name + "_shared_bp2build_cc_library_static"],
2345*7594170eSAndroid Build Coastguard Worker        tags = [
2346*7594170eSAndroid Build Coastguard Worker            "apex_available=" + name,
2347*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
2348*7594170eSAndroid Build Coastguard Worker            "manual",
2349*7594170eSAndroid Build Coastguard Worker        ],
2350*7594170eSAndroid Build Coastguard Worker    )
2351*7594170eSAndroid Build Coastguard Worker
2352*7594170eSAndroid Build Coastguard Worker    # This target is unavailable to apex but is allowed to be required by
2353*7594170eSAndroid Build Coastguard Worker    # cc_binary bar and cc_library_shared foo because its shared variant
2354*7594170eSAndroid Build Coastguard Worker    # is directly in the apex
2355*7594170eSAndroid Build Coastguard Worker    cc_library_static(
2356*7594170eSAndroid Build Coastguard Worker        name = name + "_shared_bp2build_cc_library_static",
2357*7594170eSAndroid Build Coastguard Worker        tags = [
2358*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
2359*7594170eSAndroid Build Coastguard Worker            "manual",
2360*7594170eSAndroid Build Coastguard Worker        ],
2361*7594170eSAndroid Build Coastguard Worker    )
2362*7594170eSAndroid Build Coastguard Worker
2363*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
2364*7594170eSAndroid Build Coastguard Worker        name = name + "_shared",
2365*7594170eSAndroid Build Coastguard Worker        tags = [
2366*7594170eSAndroid Build Coastguard Worker            "apex_available=" + name,
2367*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
2368*7594170eSAndroid Build Coastguard Worker            "manual",
2369*7594170eSAndroid Build Coastguard Worker        ],
2370*7594170eSAndroid Build Coastguard Worker    )
2371*7594170eSAndroid Build Coastguard Worker
2372*7594170eSAndroid Build Coastguard Worker    test_apex(
2373*7594170eSAndroid Build Coastguard Worker        name = name,
2374*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [name + "_shared", name + "foo"],
2375*7594170eSAndroid Build Coastguard Worker        binaries = [name + "bar"],
2376*7594170eSAndroid Build Coastguard Worker    )
2377*7594170eSAndroid Build Coastguard Worker
2378*7594170eSAndroid Build Coastguard Worker    target_under_test_exist_test(
2379*7594170eSAndroid Build Coastguard Worker        name = test_name,
2380*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
2381*7594170eSAndroid Build Coastguard Worker    )
2382*7594170eSAndroid Build Coastguard Worker
2383*7594170eSAndroid Build Coastguard Worker    return test_name
2384*7594170eSAndroid Build Coastguard Worker
2385*7594170eSAndroid Build Coastguard Workerdef cc_library_shared_with_stubs(name):
2386*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
2387*7594170eSAndroid Build Coastguard Worker        name = name,
2388*7594170eSAndroid Build Coastguard Worker        system_dynamic_deps = [],
2389*7594170eSAndroid Build Coastguard Worker        stl = "none",
2390*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
2391*7594170eSAndroid Build Coastguard Worker        stubs_symbol_file = name + ".map.txt",
2392*7594170eSAndroid Build Coastguard Worker    )
2393*7594170eSAndroid Build Coastguard Worker
2394*7594170eSAndroid Build Coastguard Worker    native.genrule(
2395*7594170eSAndroid Build Coastguard Worker        name = name + "_genrule_map_txt",
2396*7594170eSAndroid Build Coastguard Worker        outs = [name + ".map.txt"],
2397*7594170eSAndroid Build Coastguard Worker        cmd = "touch $@",
2398*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
2399*7594170eSAndroid Build Coastguard Worker    )
2400*7594170eSAndroid Build Coastguard Worker
2401*7594170eSAndroid Build Coastguard Worker    cc_stub_suite(
2402*7594170eSAndroid Build Coastguard Worker        name = name + "_stub_libs",
2403*7594170eSAndroid Build Coastguard Worker        soname = name + ".so",
2404*7594170eSAndroid Build Coastguard Worker        source_library_label = ":" + name,
2405*7594170eSAndroid Build Coastguard Worker        symbol_file = name + ".map.txt",
2406*7594170eSAndroid Build Coastguard Worker        versions = ["30"],
2407*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
2408*7594170eSAndroid Build Coastguard Worker    )
2409*7594170eSAndroid Build Coastguard Worker
2410*7594170eSAndroid Build Coastguard Worker    return [
2411*7594170eSAndroid Build Coastguard Worker        name,
2412*7594170eSAndroid Build Coastguard Worker        name + "_stub_libs",
2413*7594170eSAndroid Build Coastguard Worker    ]
2414*7594170eSAndroid Build Coastguard Worker
2415*7594170eSAndroid Build Coastguard Workerdef _apex_in_unbundled_build_test(ctx):
2416*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
2417*7594170eSAndroid Build Coastguard Worker    target_under_test = analysistest.target_under_test(env)
2418*7594170eSAndroid Build Coastguard Worker    mk_modules_to_install = target_under_test[ApexMkInfo].make_modules_to_install
2419*7594170eSAndroid Build Coastguard Worker    asserts.true(
2420*7594170eSAndroid Build Coastguard Worker        env,
2421*7594170eSAndroid Build Coastguard Worker        "apex_in_unbundled_build_libfoo" not in mk_modules_to_install,
2422*7594170eSAndroid Build Coastguard Worker        "stub libs apex_in_unbundled_build_libfoo should not be propagated " +
2423*7594170eSAndroid Build Coastguard Worker        "to make for installation in unbundled mode",
2424*7594170eSAndroid Build Coastguard Worker    )
2425*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
2426*7594170eSAndroid Build Coastguard Worker
2427*7594170eSAndroid Build Coastguard Workerapex_in_unbundled_build_test = analysistest.make(
2428*7594170eSAndroid Build Coastguard Worker    _apex_in_unbundled_build_test,
2429*7594170eSAndroid Build Coastguard Worker    config_settings = {
2430*7594170eSAndroid Build Coastguard Worker        "//command_line_option:platforms": "@//build/bazel/tests/products:aosp_arm64_for_testing_unbundled_build",
2431*7594170eSAndroid Build Coastguard Worker    },
2432*7594170eSAndroid Build Coastguard Worker)
2433*7594170eSAndroid Build Coastguard Worker
2434*7594170eSAndroid Build Coastguard Workerdef _test_apex_in_unbundled_build():
2435*7594170eSAndroid Build Coastguard Worker    name = "apex_in_unbundled_build"
2436*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
2437*7594170eSAndroid Build Coastguard Worker
2438*7594170eSAndroid Build Coastguard Worker    [cc_library_shared_name, cc_stub_suite_name] = cc_library_shared_with_stubs(name + "_libfoo")
2439*7594170eSAndroid Build Coastguard Worker
2440*7594170eSAndroid Build Coastguard Worker    cc_binary(
2441*7594170eSAndroid Build Coastguard Worker        name = name + "_bar",
2442*7594170eSAndroid Build Coastguard Worker        tags = [
2443*7594170eSAndroid Build Coastguard Worker            "apex_available=" + name,
2444*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
2445*7594170eSAndroid Build Coastguard Worker            "manual",
2446*7594170eSAndroid Build Coastguard Worker        ],
2447*7594170eSAndroid Build Coastguard Worker        dynamic_deps = select({
2448*7594170eSAndroid Build Coastguard Worker            "//build/bazel/rules/apex:android-in_apex": [cc_stub_suite_name + "_current"],
2449*7594170eSAndroid Build Coastguard Worker            "//build/bazel/rules/apex:android-non_apex": [cc_library_shared_name],
2450*7594170eSAndroid Build Coastguard Worker        }),
2451*7594170eSAndroid Build Coastguard Worker    )
2452*7594170eSAndroid Build Coastguard Worker
2453*7594170eSAndroid Build Coastguard Worker    test_apex(
2454*7594170eSAndroid Build Coastguard Worker        name = name,
2455*7594170eSAndroid Build Coastguard Worker        binaries = [name + "_bar"],
2456*7594170eSAndroid Build Coastguard Worker    )
2457*7594170eSAndroid Build Coastguard Worker
2458*7594170eSAndroid Build Coastguard Worker    apex_in_unbundled_build_test(
2459*7594170eSAndroid Build Coastguard Worker        name = test_name,
2460*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
2461*7594170eSAndroid Build Coastguard Worker    )
2462*7594170eSAndroid Build Coastguard Worker
2463*7594170eSAndroid Build Coastguard Worker    return test_name
2464*7594170eSAndroid Build Coastguard Worker
2465*7594170eSAndroid Build Coastguard Workerdef _apex_in_bundled_build_test(ctx):
2466*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
2467*7594170eSAndroid Build Coastguard Worker    target_under_test = analysistest.target_under_test(env)
2468*7594170eSAndroid Build Coastguard Worker    mk_modules_to_install = target_under_test[ApexMkInfo].make_modules_to_install
2469*7594170eSAndroid Build Coastguard Worker    asserts.true(
2470*7594170eSAndroid Build Coastguard Worker        env,
2471*7594170eSAndroid Build Coastguard Worker        "apex_in_bundled_build_libfoo" in mk_modules_to_install,
2472*7594170eSAndroid Build Coastguard Worker        "stub libs apex_in_unbundled_build_libfoo should be propagated " +
2473*7594170eSAndroid Build Coastguard Worker        "to make for installation in unbundled mode",
2474*7594170eSAndroid Build Coastguard Worker    )
2475*7594170eSAndroid Build Coastguard Worker
2476*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
2477*7594170eSAndroid Build Coastguard Worker
2478*7594170eSAndroid Build Coastguard Workerapex_in_bundled_build_test = analysistest.make(
2479*7594170eSAndroid Build Coastguard Worker    _apex_in_bundled_build_test,
2480*7594170eSAndroid Build Coastguard Worker    config_settings = {
2481*7594170eSAndroid Build Coastguard Worker        "//command_line_option:platforms": "@//build/bazel/tests/products:aosp_arm64_for_testing",
2482*7594170eSAndroid Build Coastguard Worker    },
2483*7594170eSAndroid Build Coastguard Worker)
2484*7594170eSAndroid Build Coastguard Worker
2485*7594170eSAndroid Build Coastguard Workerdef _test_apex_in_bundled_build():
2486*7594170eSAndroid Build Coastguard Worker    name = "apex_in_bundled_build"
2487*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
2488*7594170eSAndroid Build Coastguard Worker
2489*7594170eSAndroid Build Coastguard Worker    [cc_library_shared_name, cc_stub_suite_name] = cc_library_shared_with_stubs(name + "_libfoo")
2490*7594170eSAndroid Build Coastguard Worker
2491*7594170eSAndroid Build Coastguard Worker    cc_binary(
2492*7594170eSAndroid Build Coastguard Worker        name = name + "_bar",
2493*7594170eSAndroid Build Coastguard Worker        tags = [
2494*7594170eSAndroid Build Coastguard Worker            "apex_available=" + name,
2495*7594170eSAndroid Build Coastguard Worker            "apex_available_checked_manual_for_testing",
2496*7594170eSAndroid Build Coastguard Worker            "manual",
2497*7594170eSAndroid Build Coastguard Worker        ],
2498*7594170eSAndroid Build Coastguard Worker        dynamic_deps = select({
2499*7594170eSAndroid Build Coastguard Worker            "//build/bazel/rules/apex:android-in_apex": [cc_stub_suite_name + "_current"],
2500*7594170eSAndroid Build Coastguard Worker            "//build/bazel/rules/apex:android-non_apex": [cc_library_shared_name],
2501*7594170eSAndroid Build Coastguard Worker        }),
2502*7594170eSAndroid Build Coastguard Worker    )
2503*7594170eSAndroid Build Coastguard Worker
2504*7594170eSAndroid Build Coastguard Worker    test_apex(
2505*7594170eSAndroid Build Coastguard Worker        name = name,
2506*7594170eSAndroid Build Coastguard Worker        binaries = [name + "_bar"],
2507*7594170eSAndroid Build Coastguard Worker    )
2508*7594170eSAndroid Build Coastguard Worker
2509*7594170eSAndroid Build Coastguard Worker    apex_in_bundled_build_test(
2510*7594170eSAndroid Build Coastguard Worker        name = test_name,
2511*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
2512*7594170eSAndroid Build Coastguard Worker    )
2513*7594170eSAndroid Build Coastguard Worker
2514*7594170eSAndroid Build Coastguard Worker    return test_name
2515*7594170eSAndroid Build Coastguard Worker
2516*7594170eSAndroid Build Coastguard Workerdef _apex_compression_test(ctx):
2517*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
2518*7594170eSAndroid Build Coastguard Worker
2519*7594170eSAndroid Build Coastguard Worker    target = analysistest.target_under_test(env)
2520*7594170eSAndroid Build Coastguard Worker    asserts.true(
2521*7594170eSAndroid Build Coastguard Worker        env,
2522*7594170eSAndroid Build Coastguard Worker        target[ApexInfo].signed_compressed_output != None,
2523*7594170eSAndroid Build Coastguard Worker        "ApexInfo.signed_compressed_output should exist from compressible apex",
2524*7594170eSAndroid Build Coastguard Worker    )
2525*7594170eSAndroid Build Coastguard Worker
2526*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
2527*7594170eSAndroid Build Coastguard Worker
2528*7594170eSAndroid Build Coastguard Workerapex_compression_test = analysistest.make(
2529*7594170eSAndroid Build Coastguard Worker    _apex_compression_test,
2530*7594170eSAndroid Build Coastguard Worker    config_settings = {
2531*7594170eSAndroid Build Coastguard Worker        "//command_line_option:platforms": "@//build/bazel/tests/products:aosp_arm64_for_testing",
2532*7594170eSAndroid Build Coastguard Worker    },
2533*7594170eSAndroid Build Coastguard Worker)
2534*7594170eSAndroid Build Coastguard Worker
2535*7594170eSAndroid Build Coastguard Workerdef _test_apex_compression():
2536*7594170eSAndroid Build Coastguard Worker    name = "apex_compression"
2537*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
2538*7594170eSAndroid Build Coastguard Worker
2539*7594170eSAndroid Build Coastguard Worker    test_apex(
2540*7594170eSAndroid Build Coastguard Worker        name = name,
2541*7594170eSAndroid Build Coastguard Worker        compressible = True,
2542*7594170eSAndroid Build Coastguard Worker    )
2543*7594170eSAndroid Build Coastguard Worker
2544*7594170eSAndroid Build Coastguard Worker    apex_compression_test(
2545*7594170eSAndroid Build Coastguard Worker        name = test_name,
2546*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
2547*7594170eSAndroid Build Coastguard Worker    )
2548*7594170eSAndroid Build Coastguard Worker
2549*7594170eSAndroid Build Coastguard Worker    return test_name
2550*7594170eSAndroid Build Coastguard Worker
2551*7594170eSAndroid Build Coastguard Workerdef _apex_no_compression_test(ctx):
2552*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
2553*7594170eSAndroid Build Coastguard Worker
2554*7594170eSAndroid Build Coastguard Worker    target = analysistest.target_under_test(env)
2555*7594170eSAndroid Build Coastguard Worker    asserts.true(
2556*7594170eSAndroid Build Coastguard Worker        env,
2557*7594170eSAndroid Build Coastguard Worker        target[ApexInfo].signed_compressed_output == None,
2558*7594170eSAndroid Build Coastguard Worker        "ApexInfo.signed_compressed_output should not exist when compression_enabled is not specified",
2559*7594170eSAndroid Build Coastguard Worker    )
2560*7594170eSAndroid Build Coastguard Worker
2561*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
2562*7594170eSAndroid Build Coastguard Worker
2563*7594170eSAndroid Build Coastguard Workerapex_no_compression_test = analysistest.make(
2564*7594170eSAndroid Build Coastguard Worker    _apex_no_compression_test,
2565*7594170eSAndroid Build Coastguard Worker    config_settings = {
2566*7594170eSAndroid Build Coastguard Worker        "//command_line_option:platforms": "@//build/bazel/tests/products:aosp_arm64_for_testing_no_compression",
2567*7594170eSAndroid Build Coastguard Worker    },
2568*7594170eSAndroid Build Coastguard Worker)
2569*7594170eSAndroid Build Coastguard Worker
2570*7594170eSAndroid Build Coastguard Workerdef _test_apex_no_compression():
2571*7594170eSAndroid Build Coastguard Worker    name = "apex_no_compression"
2572*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
2573*7594170eSAndroid Build Coastguard Worker
2574*7594170eSAndroid Build Coastguard Worker    test_apex(
2575*7594170eSAndroid Build Coastguard Worker        name = name,
2576*7594170eSAndroid Build Coastguard Worker    )
2577*7594170eSAndroid Build Coastguard Worker
2578*7594170eSAndroid Build Coastguard Worker    apex_no_compression_test(
2579*7594170eSAndroid Build Coastguard Worker        name = test_name,
2580*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
2581*7594170eSAndroid Build Coastguard Worker    )
2582*7594170eSAndroid Build Coastguard Worker
2583*7594170eSAndroid Build Coastguard Worker    return test_name
2584*7594170eSAndroid Build Coastguard Worker
2585*7594170eSAndroid Build Coastguard Workerdef _min_target_sdk_version_api_fingerprint_test(ctx):
2586*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
2587*7594170eSAndroid Build Coastguard Worker    actions = analysistest.target_actions(env)
2588*7594170eSAndroid Build Coastguard Worker
2589*7594170eSAndroid Build Coastguard Worker    apexer_action = None
2590*7594170eSAndroid Build Coastguard Worker    for action in actions:
2591*7594170eSAndroid Build Coastguard Worker        if action.argv == None:
2592*7594170eSAndroid Build Coastguard Worker            continue
2593*7594170eSAndroid Build Coastguard Worker        for a in action.argv:
2594*7594170eSAndroid Build Coastguard Worker            if "--min_sdk_version" in a:
2595*7594170eSAndroid Build Coastguard Worker                apexer_action = action
2596*7594170eSAndroid Build Coastguard Worker                break
2597*7594170eSAndroid Build Coastguard Worker        if apexer_action != None:
2598*7594170eSAndroid Build Coastguard Worker            break
2599*7594170eSAndroid Build Coastguard Worker
2600*7594170eSAndroid Build Coastguard Worker    asserts.true(
2601*7594170eSAndroid Build Coastguard Worker        env,
2602*7594170eSAndroid Build Coastguard Worker        apexer_action != None,
2603*7594170eSAndroid Build Coastguard Worker        "There is no apexer action in all the actions",
2604*7594170eSAndroid Build Coastguard Worker    )
2605*7594170eSAndroid Build Coastguard Worker
2606*7594170eSAndroid Build Coastguard Worker    argv = apexer_action.argv[:-1] + apexer_action.argv[-1].split(" ")
2607*7594170eSAndroid Build Coastguard Worker    api_fingerprint_in_input = False
2608*7594170eSAndroid Build Coastguard Worker    api_fingerprint_path = None
2609*7594170eSAndroid Build Coastguard Worker    for f in apexer_action.inputs.to_list():
2610*7594170eSAndroid Build Coastguard Worker        if f.basename == "api_fingerprint.txt":
2611*7594170eSAndroid Build Coastguard Worker            api_fingerprint_in_input = True
2612*7594170eSAndroid Build Coastguard Worker            api_fingerprint_path = f.path
2613*7594170eSAndroid Build Coastguard Worker            break
2614*7594170eSAndroid Build Coastguard Worker
2615*7594170eSAndroid Build Coastguard Worker    asserts.true(
2616*7594170eSAndroid Build Coastguard Worker        env,
2617*7594170eSAndroid Build Coastguard Worker        api_fingerprint_in_input,
2618*7594170eSAndroid Build Coastguard Worker        "api_fingerprint.txt is not in the input files",
2619*7594170eSAndroid Build Coastguard Worker    )
2620*7594170eSAndroid Build Coastguard Worker
2621*7594170eSAndroid Build Coastguard Worker    expected_target_sdk_version = "123" + ".$(cat {})".format(api_fingerprint_path)
2622*7594170eSAndroid Build Coastguard Worker    target_sdk_version_index = argv.index("--target_sdk_version")
2623*7594170eSAndroid Build Coastguard Worker    asserts.equals(
2624*7594170eSAndroid Build Coastguard Worker        env,
2625*7594170eSAndroid Build Coastguard Worker        expected = expected_target_sdk_version,
2626*7594170eSAndroid Build Coastguard Worker        actual = argv[target_sdk_version_index + 1] + " " + argv[target_sdk_version_index + 2],
2627*7594170eSAndroid Build Coastguard Worker    )
2628*7594170eSAndroid Build Coastguard Worker
2629*7594170eSAndroid Build Coastguard Worker    min_sdk_version_index = argv.index("--min_sdk_version")
2630*7594170eSAndroid Build Coastguard Worker    if ctx.attr.min_sdk_version in ["current", "10000"]:
2631*7594170eSAndroid Build Coastguard Worker        expected_min_sdk_version = "123" + ".$(cat {})".format(api_fingerprint_path)
2632*7594170eSAndroid Build Coastguard Worker        actual_min_sdk_version = argv[min_sdk_version_index + 1] + " " + argv[min_sdk_version_index + 2]
2633*7594170eSAndroid Build Coastguard Worker    else:
2634*7594170eSAndroid Build Coastguard Worker        expected_min_sdk_version = ctx.attr.min_sdk_version
2635*7594170eSAndroid Build Coastguard Worker        actual_min_sdk_version = argv[min_sdk_version_index + 1]
2636*7594170eSAndroid Build Coastguard Worker    asserts.equals(
2637*7594170eSAndroid Build Coastguard Worker        env,
2638*7594170eSAndroid Build Coastguard Worker        expected = expected_min_sdk_version,
2639*7594170eSAndroid Build Coastguard Worker        actual = actual_min_sdk_version,
2640*7594170eSAndroid Build Coastguard Worker    )
2641*7594170eSAndroid Build Coastguard Worker
2642*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
2643*7594170eSAndroid Build Coastguard Worker
2644*7594170eSAndroid Build Coastguard Workermin_target_sdk_version_api_fingerprint_test = analysistest.make(
2645*7594170eSAndroid Build Coastguard Worker    _min_target_sdk_version_api_fingerprint_test,
2646*7594170eSAndroid Build Coastguard Worker    attrs = {
2647*7594170eSAndroid Build Coastguard Worker        "min_sdk_version": attr.string(
2648*7594170eSAndroid Build Coastguard Worker            default = "current",
2649*7594170eSAndroid Build Coastguard Worker        ),
2650*7594170eSAndroid Build Coastguard Worker    },
2651*7594170eSAndroid Build Coastguard Worker    config_settings = {
2652*7594170eSAndroid Build Coastguard Worker        "//command_line_option:platforms": "@//build/bazel/tests/products:aosp_arm64_for_testing_unbundled_build",
2653*7594170eSAndroid Build Coastguard Worker        "@//build/bazel/rules/apex:unbundled_build_target_sdk_with_api_fingerprint": True,
2654*7594170eSAndroid Build Coastguard Worker        "@//build/bazel/rules/apex:platform_sdk_codename": "123",
2655*7594170eSAndroid Build Coastguard Worker    },
2656*7594170eSAndroid Build Coastguard Worker)
2657*7594170eSAndroid Build Coastguard Worker
2658*7594170eSAndroid Build Coastguard Workerdef _test_min_target_sdk_version_api_fingerprint_min_sdk_version_specified():
2659*7594170eSAndroid Build Coastguard Worker    name = "min_target_sdk_version_api_fingerprint_min_sdk_version_specified"
2660*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
2661*7594170eSAndroid Build Coastguard Worker    min_sdk_version = "30"
2662*7594170eSAndroid Build Coastguard Worker
2663*7594170eSAndroid Build Coastguard Worker    test_apex(
2664*7594170eSAndroid Build Coastguard Worker        name = name,
2665*7594170eSAndroid Build Coastguard Worker        min_sdk_version = min_sdk_version,
2666*7594170eSAndroid Build Coastguard Worker    )
2667*7594170eSAndroid Build Coastguard Worker
2668*7594170eSAndroid Build Coastguard Worker    min_target_sdk_version_api_fingerprint_test(
2669*7594170eSAndroid Build Coastguard Worker        name = test_name,
2670*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
2671*7594170eSAndroid Build Coastguard Worker        min_sdk_version = min_sdk_version,
2672*7594170eSAndroid Build Coastguard Worker    )
2673*7594170eSAndroid Build Coastguard Worker
2674*7594170eSAndroid Build Coastguard Worker    return test_name
2675*7594170eSAndroid Build Coastguard Worker
2676*7594170eSAndroid Build Coastguard Workerdef _test_min_target_sdk_version_api_fingerprint_min_sdk_version_not_specified():
2677*7594170eSAndroid Build Coastguard Worker    name = "min_target_sdk_version_api_fingerprint_min_sdk_version_not_specified"
2678*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
2679*7594170eSAndroid Build Coastguard Worker
2680*7594170eSAndroid Build Coastguard Worker    test_apex(
2681*7594170eSAndroid Build Coastguard Worker        name = name,
2682*7594170eSAndroid Build Coastguard Worker    )
2683*7594170eSAndroid Build Coastguard Worker
2684*7594170eSAndroid Build Coastguard Worker    min_target_sdk_version_api_fingerprint_test(
2685*7594170eSAndroid Build Coastguard Worker        name = test_name,
2686*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
2687*7594170eSAndroid Build Coastguard Worker    )
2688*7594170eSAndroid Build Coastguard Worker
2689*7594170eSAndroid Build Coastguard Worker    return test_name
2690*7594170eSAndroid Build Coastguard Worker
2691*7594170eSAndroid Build Coastguard Workerdef _apex_sbom_test(ctx):
2692*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
2693*7594170eSAndroid Build Coastguard Worker
2694*7594170eSAndroid Build Coastguard Worker    # Action GenerateSBOMMetadata
2695*7594170eSAndroid Build Coastguard Worker    actions = [a for a in analysistest.target_actions(env) if a.mnemonic == "GenerateSBOMMetadata"]
2696*7594170eSAndroid Build Coastguard Worker    asserts.true(
2697*7594170eSAndroid Build Coastguard Worker        env,
2698*7594170eSAndroid Build Coastguard Worker        len(actions) == 1,
2699*7594170eSAndroid Build Coastguard Worker        "No GenerateSBOMMetadata action found for creating <apex>-sbom-metadata.csv file: %s" % actions,
2700*7594170eSAndroid Build Coastguard Worker    )
2701*7594170eSAndroid Build Coastguard Worker
2702*7594170eSAndroid Build Coastguard Worker    input_files = [input.basename for input in actions[0].inputs.to_list()]
2703*7594170eSAndroid Build Coastguard Worker    asserts.true(
2704*7594170eSAndroid Build Coastguard Worker        env,
2705*7594170eSAndroid Build Coastguard Worker        "apex_sbom_lib_cc.so" in input_files,
2706*7594170eSAndroid Build Coastguard Worker        "No expected file in inputs of GenerateSBOMMetadata action",
2707*7594170eSAndroid Build Coastguard Worker    )
2708*7594170eSAndroid Build Coastguard Worker
2709*7594170eSAndroid Build Coastguard Worker    output_files = [output.basename for output in actions[0].outputs.to_list()]
2710*7594170eSAndroid Build Coastguard Worker    asserts.true(
2711*7594170eSAndroid Build Coastguard Worker        env,
2712*7594170eSAndroid Build Coastguard Worker        "apex_sbom.apex-sbom-metadata.csv" in output_files,
2713*7594170eSAndroid Build Coastguard Worker        "No expected file in outputs of GenerateSBOMMetadata action",
2714*7594170eSAndroid Build Coastguard Worker    )
2715*7594170eSAndroid Build Coastguard Worker
2716*7594170eSAndroid Build Coastguard Worker    # Action GenerateSBOM
2717*7594170eSAndroid Build Coastguard Worker    actions = [a for a in analysistest.target_actions(env) if a.mnemonic == "GenerateSBOM"]
2718*7594170eSAndroid Build Coastguard Worker    asserts.true(
2719*7594170eSAndroid Build Coastguard Worker        env,
2720*7594170eSAndroid Build Coastguard Worker        len(actions) == 1,
2721*7594170eSAndroid Build Coastguard Worker        "No GenerateSBOM action found for creating sbom.spdx.json file: %s" % actions,
2722*7594170eSAndroid Build Coastguard Worker    )
2723*7594170eSAndroid Build Coastguard Worker    input_files = [input.short_path for input in actions[0].inputs.to_list()]
2724*7594170eSAndroid Build Coastguard Worker    expected_input_files = [
2725*7594170eSAndroid Build Coastguard Worker        "build/bazel/rules/apex/apex_sbom.apex",
2726*7594170eSAndroid Build Coastguard Worker        "build/bazel/rules/apex/apex_sbom.apex-sbom-metadata.csv",
2727*7594170eSAndroid Build Coastguard Worker        "build/make/tools/sbom/generate-sbom",
2728*7594170eSAndroid Build Coastguard Worker        "build/bazel/rules/apex/apex_sbom_lib_cc/apex_sbom_lib_cc.so",
2729*7594170eSAndroid Build Coastguard Worker        "build/bazel/rules/apex/METADATA",
2730*7594170eSAndroid Build Coastguard Worker    ]
2731*7594170eSAndroid Build Coastguard Worker    asserts.true(
2732*7594170eSAndroid Build Coastguard Worker        env,
2733*7594170eSAndroid Build Coastguard Worker        all([f in input_files for f in expected_input_files]),
2734*7594170eSAndroid Build Coastguard Worker        "Missing input files: %s" % input_files,
2735*7594170eSAndroid Build Coastguard Worker    )
2736*7594170eSAndroid Build Coastguard Worker
2737*7594170eSAndroid Build Coastguard Worker    output_files = [output.basename for output in actions[0].outputs.to_list()]
2738*7594170eSAndroid Build Coastguard Worker    expected_output_files = [
2739*7594170eSAndroid Build Coastguard Worker        "apex_sbom.apex.spdx.json",
2740*7594170eSAndroid Build Coastguard Worker        "apex_sbom.apex-fragment.spdx",
2741*7594170eSAndroid Build Coastguard Worker    ]
2742*7594170eSAndroid Build Coastguard Worker    asserts.true(
2743*7594170eSAndroid Build Coastguard Worker        env,
2744*7594170eSAndroid Build Coastguard Worker        all([f in output_files for f in expected_output_files]),
2745*7594170eSAndroid Build Coastguard Worker        "Missing output files: %s" % input_files,
2746*7594170eSAndroid Build Coastguard Worker    )
2747*7594170eSAndroid Build Coastguard Worker
2748*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
2749*7594170eSAndroid Build Coastguard Worker
2750*7594170eSAndroid Build Coastguard Workerapex_sbom_test = analysistest.make(
2751*7594170eSAndroid Build Coastguard Worker    _apex_sbom_test,
2752*7594170eSAndroid Build Coastguard Worker)
2753*7594170eSAndroid Build Coastguard Worker
2754*7594170eSAndroid Build Coastguard Workerdef _test_apex_sbom():
2755*7594170eSAndroid Build Coastguard Worker    name = "apex_sbom"
2756*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
2757*7594170eSAndroid Build Coastguard Worker
2758*7594170eSAndroid Build Coastguard Worker    cc_library_shared(
2759*7594170eSAndroid Build Coastguard Worker        name = name + "_lib_cc",
2760*7594170eSAndroid Build Coastguard Worker        srcs = [name + "_lib.cc"],
2761*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
2762*7594170eSAndroid Build Coastguard Worker    )
2763*7594170eSAndroid Build Coastguard Worker
2764*7594170eSAndroid Build Coastguard Worker    test_apex(
2765*7594170eSAndroid Build Coastguard Worker        name = name,
2766*7594170eSAndroid Build Coastguard Worker        native_shared_libs_32 = [name + "_lib_cc"],
2767*7594170eSAndroid Build Coastguard Worker        android_manifest = "AndroidManifest.xml",
2768*7594170eSAndroid Build Coastguard Worker    )
2769*7594170eSAndroid Build Coastguard Worker
2770*7594170eSAndroid Build Coastguard Worker    apex_sbom_test(
2771*7594170eSAndroid Build Coastguard Worker        name = test_name,
2772*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
2773*7594170eSAndroid Build Coastguard Worker    )
2774*7594170eSAndroid Build Coastguard Worker
2775*7594170eSAndroid Build Coastguard Worker    return test_name
2776*7594170eSAndroid Build Coastguard Worker
2777*7594170eSAndroid Build Coastguard Workerdef _test_apex_variant_version():
2778*7594170eSAndroid Build Coastguard Worker    name = "apex_variant_version"
2779*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
2780*7594170eSAndroid Build Coastguard Worker
2781*7594170eSAndroid Build Coastguard Worker    test_apex(
2782*7594170eSAndroid Build Coastguard Worker        name = name,
2783*7594170eSAndroid Build Coastguard Worker        variant_version = "3",
2784*7594170eSAndroid Build Coastguard Worker    )
2785*7594170eSAndroid Build Coastguard Worker
2786*7594170eSAndroid Build Coastguard Worker    expected_manifest_version = default_manifest_version + 3
2787*7594170eSAndroid Build Coastguard Worker
2788*7594170eSAndroid Build Coastguard Worker    action_flags_present_only_for_mnemonic_test(
2789*7594170eSAndroid Build Coastguard Worker        name = test_name,
2790*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
2791*7594170eSAndroid Build Coastguard Worker        mnemonics = ["ApexManifestModify"],
2792*7594170eSAndroid Build Coastguard Worker        expected_flags = ["-se", "version", "0", str(expected_manifest_version)],
2793*7594170eSAndroid Build Coastguard Worker    )
2794*7594170eSAndroid Build Coastguard Worker
2795*7594170eSAndroid Build Coastguard Worker    return test_name
2796*7594170eSAndroid Build Coastguard Worker
2797*7594170eSAndroid Build Coastguard Workerdef apex_test_suite(name):
2798*7594170eSAndroid Build Coastguard Worker    native.test_suite(
2799*7594170eSAndroid Build Coastguard Worker        name = name,
2800*7594170eSAndroid Build Coastguard Worker        tests = [
2801*7594170eSAndroid Build Coastguard Worker            _test_canned_fs_config_basic(),
2802*7594170eSAndroid Build Coastguard Worker            _test_canned_fs_config_custom(),
2803*7594170eSAndroid Build Coastguard Worker            _test_canned_fs_config_binaries(),
2804*7594170eSAndroid Build Coastguard Worker            _test_canned_fs_config_native_shared_libs_arm(),
2805*7594170eSAndroid Build Coastguard Worker            _test_canned_fs_config_native_shared_libs_arm64(),
2806*7594170eSAndroid Build Coastguard Worker            _test_canned_fs_config_prebuilts(),
2807*7594170eSAndroid Build Coastguard Worker            _test_canned_fs_config_prebuilts_sort_order(),
2808*7594170eSAndroid Build Coastguard Worker            _test_canned_fs_config_runtime_deps(),
2809*7594170eSAndroid Build Coastguard Worker            _test_apex_manifest(),
2810*7594170eSAndroid Build Coastguard Worker            _test_apex_manifest_min_sdk_version(),
2811*7594170eSAndroid Build Coastguard Worker            _test_apex_manifest_min_sdk_version_current(),
2812*7594170eSAndroid Build Coastguard Worker            _test_apex_manifest_min_sdk_version_override(),
2813*7594170eSAndroid Build Coastguard Worker            _test_apex_manifest_dependencies_nodep(),
2814*7594170eSAndroid Build Coastguard Worker            _test_apex_manifest_dependencies_cc_binary_bionic_deps(),
2815*7594170eSAndroid Build Coastguard Worker            _test_apex_manifest_dependencies_cc_library_shared_bionic_deps(),
2816*7594170eSAndroid Build Coastguard Worker            _test_apex_manifest_dependencies_requires(),
2817*7594170eSAndroid Build Coastguard Worker            _test_apex_manifest_dependencies_provides(),
2818*7594170eSAndroid Build Coastguard Worker            _test_apex_manifest_dependencies_selfcontained(),
2819*7594170eSAndroid Build Coastguard Worker            _test_apex_manifest_dependencies_cc_binary(),
2820*7594170eSAndroid Build Coastguard Worker            _test_logging_parent_flag(),
2821*7594170eSAndroid Build Coastguard Worker            _test_package_name(),
2822*7594170eSAndroid Build Coastguard Worker            _test_package_name_override_from_config(),
2823*7594170eSAndroid Build Coastguard Worker            _test_generate_file_contexts(),
2824*7594170eSAndroid Build Coastguard Worker            _test_default_apex_manifest_version(),
2825*7594170eSAndroid Build Coastguard Worker            _test_override_apex_manifest_version(),
2826*7594170eSAndroid Build Coastguard Worker            _test_min_sdk_version_failure(),
2827*7594170eSAndroid Build Coastguard Worker            _test_min_sdk_version_failure_transitive(),
2828*7594170eSAndroid Build Coastguard Worker            _test_apex_certificate_none(),
2829*7594170eSAndroid Build Coastguard Worker            _test_apex_certificate_name(),
2830*7594170eSAndroid Build Coastguard Worker            _test_apex_certificate_label(),
2831*7594170eSAndroid Build Coastguard Worker            _test_apex_certificate_label_with_overrides(),
2832*7594170eSAndroid Build Coastguard Worker            _test_min_sdk_version_apex_inherit(),
2833*7594170eSAndroid Build Coastguard Worker            _test_min_sdk_version_apex_inherit_override_min_sdk_tiramisu(),
2834*7594170eSAndroid Build Coastguard Worker            _test_apex_testonly_with_manifest(),
2835*7594170eSAndroid Build Coastguard Worker            _test_apex_provides_base_zip_files(),
2836*7594170eSAndroid Build Coastguard Worker            _test_apex_testonly_without_manifest(),
2837*7594170eSAndroid Build Coastguard Worker            _test_apex_backing_file(),
2838*7594170eSAndroid Build Coastguard Worker            _test_apex_symbols_used_by_apex(),
2839*7594170eSAndroid Build Coastguard Worker            _test_apex_installed_files(),
2840*7594170eSAndroid Build Coastguard Worker            _test_apex_java_symbols_used_by_apex(),
2841*7594170eSAndroid Build Coastguard Worker            _test_apex_generate_notice_file(),
2842*7594170eSAndroid Build Coastguard Worker            _test_apex_available(),
2843*7594170eSAndroid Build Coastguard Worker            _test_apex_available_failure(),
2844*7594170eSAndroid Build Coastguard Worker            _test_apex_available_with_base_apex(),
2845*7594170eSAndroid Build Coastguard Worker            _test_apex_deps_validation(),
2846*7594170eSAndroid Build Coastguard Worker            _test_no_static_linking_for_stubs_lib(),
2847*7594170eSAndroid Build Coastguard Worker            _test_directly_included_stubs_lib_with_indirectly_static_variant(),
2848*7594170eSAndroid Build Coastguard Worker            _test_apex_in_unbundled_build(),
2849*7594170eSAndroid Build Coastguard Worker            _test_apex_in_bundled_build(),
2850*7594170eSAndroid Build Coastguard Worker            _test_apex_compression(),
2851*7594170eSAndroid Build Coastguard Worker            _test_apex_no_compression(),
2852*7594170eSAndroid Build Coastguard Worker            _test_min_target_sdk_version_api_fingerprint_min_sdk_version_specified(),
2853*7594170eSAndroid Build Coastguard Worker            _test_min_target_sdk_version_api_fingerprint_min_sdk_version_not_specified(),
2854*7594170eSAndroid Build Coastguard Worker            _test_apex_sbom(),
2855*7594170eSAndroid Build Coastguard Worker            _test_apex_variant_version(),
2856*7594170eSAndroid Build Coastguard Worker        ] + _test_apex_transition(),
2857*7594170eSAndroid Build Coastguard Worker    )
2858