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