xref: /aosp_15_r20/build/bazel/rules/apex/apex_key_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_key.bzl", "ApexKeyInfo", "apex_key")
17*7594170eSAndroid Build Coastguard Worker
18*7594170eSAndroid Build Coastguard Workerdef _apex_key_test(ctx):
19*7594170eSAndroid Build Coastguard Worker    env = analysistest.begin(ctx)
20*7594170eSAndroid Build Coastguard Worker    target_under_test = analysistest.target_under_test(env)
21*7594170eSAndroid Build Coastguard Worker    asserts.equals(
22*7594170eSAndroid Build Coastguard Worker        env,
23*7594170eSAndroid Build Coastguard Worker        ctx.attr.expected_private_key_short_path,
24*7594170eSAndroid Build Coastguard Worker        target_under_test[ApexKeyInfo].private_key.short_path,
25*7594170eSAndroid Build Coastguard Worker    )
26*7594170eSAndroid Build Coastguard Worker    asserts.equals(
27*7594170eSAndroid Build Coastguard Worker        env,
28*7594170eSAndroid Build Coastguard Worker        ctx.attr.expected_public_key_short_path,
29*7594170eSAndroid Build Coastguard Worker        target_under_test[ApexKeyInfo].public_key.short_path,
30*7594170eSAndroid Build Coastguard Worker    )
31*7594170eSAndroid Build Coastguard Worker    return analysistest.end(env)
32*7594170eSAndroid Build Coastguard Worker
33*7594170eSAndroid Build Coastguard Workerapex_key_test = analysistest.make(
34*7594170eSAndroid Build Coastguard Worker    _apex_key_test,
35*7594170eSAndroid Build Coastguard Worker    attrs = {
36*7594170eSAndroid Build Coastguard Worker        "expected_private_key_short_path": attr.string(mandatory = True),
37*7594170eSAndroid Build Coastguard Worker        "expected_public_key_short_path": attr.string(mandatory = True),
38*7594170eSAndroid Build Coastguard Worker    },
39*7594170eSAndroid Build Coastguard Worker)
40*7594170eSAndroid Build Coastguard Worker
41*7594170eSAndroid Build Coastguard Workerapex_key_with_default_app_cert_test = analysistest.make(
42*7594170eSAndroid Build Coastguard Worker    _apex_key_test,
43*7594170eSAndroid Build Coastguard Worker    attrs = {
44*7594170eSAndroid Build Coastguard Worker        "expected_private_key_short_path": attr.string(mandatory = True),
45*7594170eSAndroid Build Coastguard Worker        "expected_public_key_short_path": attr.string(mandatory = True),
46*7594170eSAndroid Build Coastguard Worker    },
47*7594170eSAndroid Build Coastguard Worker    config_settings = {
48*7594170eSAndroid Build Coastguard Worker        # This product sets DefaultAppCertificate to build/bazel/rules/apex/testdata/devkey,
49*7594170eSAndroid Build Coastguard Worker        # so we expect the apex_key to look for key_name in build/bazel/rules/apex/testdata.
50*7594170eSAndroid Build Coastguard Worker        "//command_line_option:platforms": "@//build/bazel/tests/products:aosp_arm64_for_testing_with_overrides_and_app_cert",
51*7594170eSAndroid Build Coastguard Worker    },
52*7594170eSAndroid Build Coastguard Worker)
53*7594170eSAndroid Build Coastguard Worker
54*7594170eSAndroid Build Coastguard Workerdef _test_apex_key_file_targets_with_key_name_attribute():
55*7594170eSAndroid Build Coastguard Worker    name = "apex_key_file_targets_with_key_name_attribute"
56*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
57*7594170eSAndroid Build Coastguard Worker    private_key = name + ".pem"
58*7594170eSAndroid Build Coastguard Worker    public_key = name + ".avbpubkey"
59*7594170eSAndroid Build Coastguard Worker
60*7594170eSAndroid Build Coastguard Worker    apex_key(
61*7594170eSAndroid Build Coastguard Worker        name = name,
62*7594170eSAndroid Build Coastguard Worker        private_key_name = private_key,
63*7594170eSAndroid Build Coastguard Worker        public_key_name = public_key,
64*7594170eSAndroid Build Coastguard Worker    )
65*7594170eSAndroid Build Coastguard Worker
66*7594170eSAndroid Build Coastguard Worker    apex_key_test(
67*7594170eSAndroid Build Coastguard Worker        name = test_name,
68*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
69*7594170eSAndroid Build Coastguard Worker        expected_private_key_short_path = native.package_name() + "/" + private_key,
70*7594170eSAndroid Build Coastguard Worker        expected_public_key_short_path = native.package_name() + "/" + public_key,
71*7594170eSAndroid Build Coastguard Worker    )
72*7594170eSAndroid Build Coastguard Worker
73*7594170eSAndroid Build Coastguard Worker    return test_name
74*7594170eSAndroid Build Coastguard Worker
75*7594170eSAndroid Build Coastguard Workerdef _test_apex_key_file_targets_with_key_name_attribute_with_default_app_cert():
76*7594170eSAndroid Build Coastguard Worker    name = "apex_key_file_targets_with_key_attribute_with_default_app_cert"
77*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
78*7594170eSAndroid Build Coastguard Worker    private_key = "devkey.pem"
79*7594170eSAndroid Build Coastguard Worker    public_key = "devkey.avbpubkey"
80*7594170eSAndroid Build Coastguard Worker
81*7594170eSAndroid Build Coastguard Worker    apex_key(
82*7594170eSAndroid Build Coastguard Worker        name = name,
83*7594170eSAndroid Build Coastguard Worker        private_key_name = private_key,
84*7594170eSAndroid Build Coastguard Worker        public_key_name = public_key,
85*7594170eSAndroid Build Coastguard Worker    )
86*7594170eSAndroid Build Coastguard Worker
87*7594170eSAndroid Build Coastguard Worker    apex_key_with_default_app_cert_test(
88*7594170eSAndroid Build Coastguard Worker        name = test_name,
89*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
90*7594170eSAndroid Build Coastguard Worker        expected_private_key_short_path = "build/bazel/rules/apex/testdata/" + private_key,
91*7594170eSAndroid Build Coastguard Worker        expected_public_key_short_path = "build/bazel/rules/apex/testdata/" + public_key,
92*7594170eSAndroid Build Coastguard Worker    )
93*7594170eSAndroid Build Coastguard Worker
94*7594170eSAndroid Build Coastguard Worker    return test_name
95*7594170eSAndroid Build Coastguard Worker
96*7594170eSAndroid Build Coastguard Workerdef _test_apex_key_file_targets_with_key_attribute():
97*7594170eSAndroid Build Coastguard Worker    name = "apex_key_file_targets_with_key_attribute"
98*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
99*7594170eSAndroid Build Coastguard Worker    private_key = name + ".pem"
100*7594170eSAndroid Build Coastguard Worker    public_key = name + ".avbpubkey"
101*7594170eSAndroid Build Coastguard Worker
102*7594170eSAndroid Build Coastguard Worker    apex_key(
103*7594170eSAndroid Build Coastguard Worker        name = name,
104*7594170eSAndroid Build Coastguard Worker        # Referring to file targets with plain strings work as well, as bazel
105*7594170eSAndroid Build Coastguard Worker        # will parse these labels as file targets in the same package.
106*7594170eSAndroid Build Coastguard Worker        private_key = private_key,
107*7594170eSAndroid Build Coastguard Worker        public_key = public_key,
108*7594170eSAndroid Build Coastguard Worker    )
109*7594170eSAndroid Build Coastguard Worker
110*7594170eSAndroid Build Coastguard Worker    apex_key_test(
111*7594170eSAndroid Build Coastguard Worker        name = test_name,
112*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
113*7594170eSAndroid Build Coastguard Worker        expected_private_key_short_path = native.package_name() + "/" + private_key,
114*7594170eSAndroid Build Coastguard Worker        expected_public_key_short_path = native.package_name() + "/" + public_key,
115*7594170eSAndroid Build Coastguard Worker    )
116*7594170eSAndroid Build Coastguard Worker
117*7594170eSAndroid Build Coastguard Worker    return test_name
118*7594170eSAndroid Build Coastguard Worker
119*7594170eSAndroid Build Coastguard Workerdef _test_apex_key_generated_keys():
120*7594170eSAndroid Build Coastguard Worker    name = "apex_key_generated_keys"
121*7594170eSAndroid Build Coastguard Worker    test_name = name + "_test"
122*7594170eSAndroid Build Coastguard Worker    private_key = name + ".pem"
123*7594170eSAndroid Build Coastguard Worker    public_key = name + ".avbpubkey"
124*7594170eSAndroid Build Coastguard Worker
125*7594170eSAndroid Build Coastguard Worker    native.genrule(
126*7594170eSAndroid Build Coastguard Worker        name = private_key,
127*7594170eSAndroid Build Coastguard Worker        outs = ["priv/" + name + ".generated"],
128*7594170eSAndroid Build Coastguard Worker        cmd = "noop",
129*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
130*7594170eSAndroid Build Coastguard Worker    )
131*7594170eSAndroid Build Coastguard Worker
132*7594170eSAndroid Build Coastguard Worker    native.genrule(
133*7594170eSAndroid Build Coastguard Worker        name = public_key,
134*7594170eSAndroid Build Coastguard Worker        outs = ["pub/" + name + ".generated"],
135*7594170eSAndroid Build Coastguard Worker        cmd = "noop",
136*7594170eSAndroid Build Coastguard Worker        tags = ["manual"],
137*7594170eSAndroid Build Coastguard Worker    )
138*7594170eSAndroid Build Coastguard Worker
139*7594170eSAndroid Build Coastguard Worker    apex_key(
140*7594170eSAndroid Build Coastguard Worker        name = name,
141*7594170eSAndroid Build Coastguard Worker        private_key = private_key,
142*7594170eSAndroid Build Coastguard Worker        public_key = public_key,
143*7594170eSAndroid Build Coastguard Worker    )
144*7594170eSAndroid Build Coastguard Worker
145*7594170eSAndroid Build Coastguard Worker    apex_key_test(
146*7594170eSAndroid Build Coastguard Worker        name = test_name,
147*7594170eSAndroid Build Coastguard Worker        target_under_test = name,
148*7594170eSAndroid Build Coastguard Worker        expected_private_key_short_path = native.package_name() + "/priv/" + name + ".generated",
149*7594170eSAndroid Build Coastguard Worker        expected_public_key_short_path = native.package_name() + "/pub/" + name + ".generated",
150*7594170eSAndroid Build Coastguard Worker    )
151*7594170eSAndroid Build Coastguard Worker
152*7594170eSAndroid Build Coastguard Worker    return test_name
153*7594170eSAndroid Build Coastguard Worker
154*7594170eSAndroid Build Coastguard Workerdef apex_key_test_suite(name):
155*7594170eSAndroid Build Coastguard Worker    native.test_suite(
156*7594170eSAndroid Build Coastguard Worker        name = name,
157*7594170eSAndroid Build Coastguard Worker        tests = [
158*7594170eSAndroid Build Coastguard Worker            _test_apex_key_file_targets_with_key_name_attribute(),
159*7594170eSAndroid Build Coastguard Worker            _test_apex_key_file_targets_with_key_name_attribute_with_default_app_cert(),
160*7594170eSAndroid Build Coastguard Worker            _test_apex_key_file_targets_with_key_attribute(),
161*7594170eSAndroid Build Coastguard Worker            _test_apex_key_generated_keys(),
162*7594170eSAndroid Build Coastguard Worker        ],
163*7594170eSAndroid Build Coastguard Worker    )
164