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