xref: /aosp_15_r20/build/bazel/rules/apex/apex_aab_test.bzl (revision 7594170e27e0732bc44b93d1440d87a54b6ffe7c)
1*7594170eSAndroid Build Coastguard Worker# Copyright (C) 2022 The Android Open Source Project
2*7594170eSAndroid Build Coastguard Worker#
3*7594170eSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*7594170eSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*7594170eSAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*7594170eSAndroid Build Coastguard Worker#
7*7594170eSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
8*7594170eSAndroid Build Coastguard Worker#
9*7594170eSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*7594170eSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*7594170eSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*7594170eSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*7594170eSAndroid Build Coastguard Worker# limitations under the License.
14*7594170eSAndroid Build Coastguard Worker
15*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
16*7594170eSAndroid Build Coastguard Workerload(":apex_aab.bzl", "apex_aab")
17*7594170eSAndroid Build Coastguard Workerload(":apex_test_helpers.bzl", "test_apex")
18*7594170eSAndroid Build Coastguard Worker
19*7594170eSAndroid Build Coastguard Workerdef _apex_aab_test(ctx):
20*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
21*7594170eSAndroid Build Coastguard Worker    target_under_test = analysistest.target_under_test(env)
22*7594170eSAndroid Build Coastguard Worker    asserts.true(
23*7594170eSAndroid Build Coastguard Worker        env,
24*7594170eSAndroid Build Coastguard Worker        len(target_under_test.files.to_list()) == len(ctx.attr.expected_paths),
25*7594170eSAndroid Build Coastguard Worker    )
26*7594170eSAndroid Build Coastguard Worker    for i in range(0, len(ctx.attr.expected_paths)):
27*7594170eSAndroid Build Coastguard Worker        asserts.equals(
28*7594170eSAndroid Build Coastguard Worker            env,
29*7594170eSAndroid Build Coastguard Worker            ctx.attr.expected_paths[i],
30*7594170eSAndroid Build Coastguard Worker            target_under_test.files.to_list()[i].short_path,
31*7594170eSAndroid Build Coastguard Worker        )
32*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
33*7594170eSAndroid Build Coastguard Worker
34*7594170eSAndroid Build Coastguard Workerapex_aab_test = analysistest.make(
35*7594170eSAndroid Build Coastguard Worker    _apex_aab_test,
36*7594170eSAndroid Build Coastguard Worker    attrs = {
37*7594170eSAndroid Build Coastguard Worker        "expected_paths": attr.string_list(mandatory = True),
38*7594170eSAndroid Build Coastguard Worker    },
39*7594170eSAndroid Build Coastguard Worker)
40*7594170eSAndroid Build Coastguard Worker
41*7594170eSAndroid Build Coastguard Workerdef _test_apex_aab_generates_aab():
42*7594170eSAndroid Build Coastguard Worker    name = "apex_aab_simple"
43*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
44*7594170eSAndroid Build Coastguard Worker    apex_name = name + "_apex"
45*7594170eSAndroid Build Coastguard Worker
46*7594170eSAndroid Build Coastguard Worker    test_apex(name = apex_name)
47*7594170eSAndroid Build Coastguard Worker
48*7594170eSAndroid Build Coastguard Worker    apex_aab(
49*7594170eSAndroid Build Coastguard Worker        name = name,
50*7594170eSAndroid Build Coastguard Worker        mainline_module = apex_name,
51*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
52*7594170eSAndroid Build Coastguard Worker    )
53*7594170eSAndroid Build Coastguard Worker
54*7594170eSAndroid Build Coastguard Worker    apex_aab_test(
55*7594170eSAndroid Build Coastguard Worker        name = test_name,
56*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
57*7594170eSAndroid Build Coastguard Worker        expected_paths = ["/".join([native.package_name(), apex_name, apex_name + ".aab"])],
58*7594170eSAndroid Build Coastguard Worker    )
59*7594170eSAndroid Build Coastguard Worker
60*7594170eSAndroid Build Coastguard Worker    return test_name
61*7594170eSAndroid Build Coastguard Worker
62*7594170eSAndroid Build Coastguard Workerdef _apex_aab_output_group_test(ctx):
63*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
64*7594170eSAndroid Build Coastguard Worker    target_under_test = analysistest.target_under_test(env)
65*7594170eSAndroid Build Coastguard Worker    actual_paths = sorted([
66*7594170eSAndroid Build Coastguard Worker        f.short_path
67*7594170eSAndroid Build Coastguard Worker        for f in target_under_test[OutputGroupInfo].apex_files.to_list()
68*7594170eSAndroid Build Coastguard Worker    ])
69*7594170eSAndroid Build Coastguard Worker    asserts.equals(
70*7594170eSAndroid Build Coastguard Worker        env,
71*7594170eSAndroid Build Coastguard Worker        sorted(ctx.attr.expected_paths),
72*7594170eSAndroid Build Coastguard Worker        sorted(actual_paths),
73*7594170eSAndroid Build Coastguard Worker    )
74*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
75*7594170eSAndroid Build Coastguard Worker
76*7594170eSAndroid Build Coastguard Workerapex_aab_output_group_test = analysistest.make(
77*7594170eSAndroid Build Coastguard Worker    _apex_aab_output_group_test,
78*7594170eSAndroid Build Coastguard Worker    attrs = {"expected_paths": attr.string_list(mandatory = True)},
79*7594170eSAndroid Build Coastguard Worker)
80*7594170eSAndroid Build Coastguard Worker
81*7594170eSAndroid Build Coastguard Workerdef _test_apex_aab_apex_files_output_group():
82*7594170eSAndroid Build Coastguard Worker    name = "apex_aab_apex_files"
83*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
84*7594170eSAndroid Build Coastguard Worker    apex_name = name + "_apex"
85*7594170eSAndroid Build Coastguard Worker
86*7594170eSAndroid Build Coastguard Worker    test_apex(name = apex_name)
87*7594170eSAndroid Build Coastguard Worker
88*7594170eSAndroid Build Coastguard Worker    apex_aab(
89*7594170eSAndroid Build Coastguard Worker        name = name,
90*7594170eSAndroid Build Coastguard Worker        mainline_module = apex_name,
91*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
92*7594170eSAndroid Build Coastguard Worker    )
93*7594170eSAndroid Build Coastguard Worker
94*7594170eSAndroid Build Coastguard Worker    expected_paths = []
95*7594170eSAndroid Build Coastguard Worker    for arch in ["arm", "arm64", "x86", "x86_64", "arm64only", "x86_64only"]:
96*7594170eSAndroid Build Coastguard Worker        paths = [
97*7594170eSAndroid Build Coastguard Worker            "/".join([native.package_name(), "mainline_modules_" + arch, basename])
98*7594170eSAndroid Build Coastguard Worker            for basename in [
99*7594170eSAndroid Build Coastguard Worker                apex_name + ".apex",
100*7594170eSAndroid Build Coastguard Worker                apex_name + "-base.zip",
101*7594170eSAndroid Build Coastguard Worker                "java_apis_used_by_apex/" + apex_name + "_using.xml",
102*7594170eSAndroid Build Coastguard Worker                "ndk_apis_usedby_apex/" + apex_name + "_using.txt",
103*7594170eSAndroid Build Coastguard Worker                "ndk_apis_backedby_apex/" + apex_name + "_backing.txt",
104*7594170eSAndroid Build Coastguard Worker            ]
105*7594170eSAndroid Build Coastguard Worker        ]
106*7594170eSAndroid Build Coastguard Worker        expected_paths.extend(paths)
107*7594170eSAndroid Build Coastguard Worker
108*7594170eSAndroid Build Coastguard Worker    apex_aab_output_group_test(
109*7594170eSAndroid Build Coastguard Worker        name = test_name,
110*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
111*7594170eSAndroid Build Coastguard Worker        expected_paths = expected_paths,
112*7594170eSAndroid Build Coastguard Worker    )
113*7594170eSAndroid Build Coastguard Worker
114*7594170eSAndroid Build Coastguard Worker    return test_name
115*7594170eSAndroid Build Coastguard Worker
116*7594170eSAndroid Build Coastguard Workerdef _test_apex_aab_generates_aab_and_apks():
117*7594170eSAndroid Build Coastguard Worker    name = "apex_aab_apks"
118*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
119*7594170eSAndroid Build Coastguard Worker    apex_name = name + "_apex"
120*7594170eSAndroid Build Coastguard Worker
121*7594170eSAndroid Build Coastguard Worker    test_apex(name = apex_name, package_name = "com.google.android." + apex_name)
122*7594170eSAndroid Build Coastguard Worker
123*7594170eSAndroid Build Coastguard Worker    apex_aab(
124*7594170eSAndroid Build Coastguard Worker        name = name,
125*7594170eSAndroid Build Coastguard Worker        mainline_module = apex_name,
126*7594170eSAndroid Build Coastguard Worker        dev_sign_bundle = "//build/make/tools/releasetools:sign_apex",
127*7594170eSAndroid Build Coastguard Worker        dev_keystore = "//build/bazel/rules/apex/testdata:dev-keystore",
128*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
129*7594170eSAndroid Build Coastguard Worker    )
130*7594170eSAndroid Build Coastguard Worker
131*7594170eSAndroid Build Coastguard Worker    apex_aab_test(
132*7594170eSAndroid Build Coastguard Worker        name = test_name,
133*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
134*7594170eSAndroid Build Coastguard Worker        expected_paths = [
135*7594170eSAndroid Build Coastguard Worker            "/".join([native.package_name(), apex_name, apex_name + ".aab"]),
136*7594170eSAndroid Build Coastguard Worker            "/".join([native.package_name(), apex_name, apex_name + ".apks"]),
137*7594170eSAndroid Build Coastguard Worker            "/".join([native.package_name(), apex_name, apex_name + ".cert_info.txt"]),
138*7594170eSAndroid Build Coastguard Worker        ],
139*7594170eSAndroid Build Coastguard Worker    )
140*7594170eSAndroid Build Coastguard Worker
141*7594170eSAndroid Build Coastguard Worker    return test_name
142*7594170eSAndroid Build Coastguard Worker
143*7594170eSAndroid Build Coastguard Workerdef apex_aab_test_suite(name):
144*7594170eSAndroid Build Coastguard Worker    native.test_suite(
145*7594170eSAndroid Build Coastguard Worker        name = name,
146*7594170eSAndroid Build Coastguard Worker        tests = [
147*7594170eSAndroid Build Coastguard Worker            _test_apex_aab_generates_aab(),
148*7594170eSAndroid Build Coastguard Worker            _test_apex_aab_apex_files_output_group(),
149*7594170eSAndroid Build Coastguard Worker            _test_apex_aab_generates_aab_and_apks(),
150*7594170eSAndroid Build Coastguard Worker        ],
151*7594170eSAndroid Build Coastguard Worker    )
152