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("//build/bazel/rules:prebuilt_file.bzl", "prebuilt_file") 17*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules:sh_binary.bzl", "sh_binary") 18*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/cc:cc_binary.bzl", "cc_binary") 19*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/cc:cc_library_shared.bzl", "cc_library_shared") 20*7594170eSAndroid Build Coastguard Workerload(":apex_info.bzl", "ApexMkInfo") 21*7594170eSAndroid Build Coastguard Workerload(":apex_test_helpers.bzl", "test_apex") 22*7594170eSAndroid Build Coastguard Worker 23*7594170eSAndroid Build Coastguard Workerdef _apex_files_info_test(ctx): 24*7594170eSAndroid Build Coastguard Worker env = analysistest.begin(ctx) 25*7594170eSAndroid Build Coastguard Worker target = analysistest.target_under_test(env) 26*7594170eSAndroid Build Coastguard Worker 27*7594170eSAndroid Build Coastguard Worker # no attr.string_keyed_string_dict_list.. so we'll have to make do :-) 28*7594170eSAndroid Build Coastguard Worker expected_files_info = [json.decode(i) for i in ctx.attr.expected_files_info] 29*7594170eSAndroid Build Coastguard Worker actual_files_info = target[ApexMkInfo].files_info 30*7594170eSAndroid Build Coastguard Worker 31*7594170eSAndroid Build Coastguard Worker asserts.equals(env, len(expected_files_info), len(actual_files_info)) 32*7594170eSAndroid Build Coastguard Worker 33*7594170eSAndroid Build Coastguard Worker for idx, expected in enumerate(expected_files_info): 34*7594170eSAndroid Build Coastguard Worker actual = actual_files_info[idx] 35*7594170eSAndroid Build Coastguard Worker 36*7594170eSAndroid Build Coastguard Worker asserts.equals(env, len(expected), len(actual)) 37*7594170eSAndroid Build Coastguard Worker for k, v in expected.items(): 38*7594170eSAndroid Build Coastguard Worker if k in ["built_file", "unstripped_built_file"]: 39*7594170eSAndroid Build Coastguard Worker # don't test the part that contains the configuration hash, which is sensitive to changes. 40*7594170eSAndroid Build Coastguard Worker expected_path_without_config = v.split("bazel-out/")[-1] 41*7594170eSAndroid Build Coastguard Worker asserts.true(env, actual[k].endswith(expected_path_without_config)) 42*7594170eSAndroid Build Coastguard Worker else: 43*7594170eSAndroid Build Coastguard Worker asserts.equals(env, v, actual[k]) 44*7594170eSAndroid Build Coastguard Worker return analysistest.end(env) 45*7594170eSAndroid Build Coastguard Worker 46*7594170eSAndroid Build Coastguard Workerapex_files_info_test = analysistest.make( 47*7594170eSAndroid Build Coastguard Worker _apex_files_info_test, 48*7594170eSAndroid Build Coastguard Worker attrs = { 49*7594170eSAndroid Build Coastguard Worker "expected_files_info": attr.string_list( 50*7594170eSAndroid Build Coastguard Worker doc = "expected files info", 51*7594170eSAndroid Build Coastguard Worker ), 52*7594170eSAndroid Build Coastguard Worker }, 53*7594170eSAndroid Build Coastguard Worker) 54*7594170eSAndroid Build Coastguard Worker 55*7594170eSAndroid Build Coastguard Workerdef _test_apex_files_info_basic(): 56*7594170eSAndroid Build Coastguard Worker name = "apex_files_info_basic" 57*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 58*7594170eSAndroid Build Coastguard Worker 59*7594170eSAndroid Build Coastguard Worker test_apex(name = name) 60*7594170eSAndroid Build Coastguard Worker 61*7594170eSAndroid Build Coastguard Worker apex_files_info_test( 62*7594170eSAndroid Build Coastguard Worker name = test_name, 63*7594170eSAndroid Build Coastguard Worker target_under_test = name, 64*7594170eSAndroid Build Coastguard Worker expected_files_info = [ 65*7594170eSAndroid Build Coastguard Worker # deliberately empty. 66*7594170eSAndroid Build Coastguard Worker ], 67*7594170eSAndroid Build Coastguard Worker ) 68*7594170eSAndroid Build Coastguard Worker 69*7594170eSAndroid Build Coastguard Worker return test_name 70*7594170eSAndroid Build Coastguard Worker 71*7594170eSAndroid Build Coastguard Workerdef _test_apex_files_info_complex(): 72*7594170eSAndroid Build Coastguard Worker name = "apex_files_info_complex" 73*7594170eSAndroid Build Coastguard Worker test_name = name + "_test" 74*7594170eSAndroid Build Coastguard Worker 75*7594170eSAndroid Build Coastguard Worker prebuilt_file( 76*7594170eSAndroid Build Coastguard Worker name = name + "_file", 77*7594170eSAndroid Build Coastguard Worker src = name + "_file.txt", 78*7594170eSAndroid Build Coastguard Worker dir = "etc", 79*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 80*7594170eSAndroid Build Coastguard Worker ) 81*7594170eSAndroid Build Coastguard Worker 82*7594170eSAndroid Build Coastguard Worker sh_binary( 83*7594170eSAndroid Build Coastguard Worker name = name + "_bin_sh", 84*7594170eSAndroid Build Coastguard Worker srcs = [name + "_bin.sh"], 85*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 86*7594170eSAndroid Build Coastguard Worker ) 87*7594170eSAndroid Build Coastguard Worker 88*7594170eSAndroid Build Coastguard Worker cc_binary( 89*7594170eSAndroid Build Coastguard Worker name = name + "_bin_cc", 90*7594170eSAndroid Build Coastguard Worker srcs = [name + "_bin.cc"], 91*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 92*7594170eSAndroid Build Coastguard Worker ) 93*7594170eSAndroid Build Coastguard Worker 94*7594170eSAndroid Build Coastguard Worker cc_library_shared( 95*7594170eSAndroid Build Coastguard Worker name = name + "_lib_cc", 96*7594170eSAndroid Build Coastguard Worker srcs = [name + "_lib.cc"], 97*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 98*7594170eSAndroid Build Coastguard Worker ) 99*7594170eSAndroid Build Coastguard Worker 100*7594170eSAndroid Build Coastguard Worker cc_library_shared( 101*7594170eSAndroid Build Coastguard Worker name = name + "_lib2_cc", 102*7594170eSAndroid Build Coastguard Worker srcs = [name + "_lib2.cc"], 103*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 104*7594170eSAndroid Build Coastguard Worker ) 105*7594170eSAndroid Build Coastguard Worker 106*7594170eSAndroid Build Coastguard Worker test_apex( 107*7594170eSAndroid Build Coastguard Worker name = name, 108*7594170eSAndroid Build Coastguard Worker binaries = [name + "_bin_sh", name + "_bin_cc"], 109*7594170eSAndroid Build Coastguard Worker prebuilts = [name + "_file"], 110*7594170eSAndroid Build Coastguard Worker native_shared_libs_32 = [name + "_lib_cc"], 111*7594170eSAndroid Build Coastguard Worker native_shared_libs_64 = [name + "_lib2_cc"], 112*7594170eSAndroid Build Coastguard Worker ) 113*7594170eSAndroid Build Coastguard Worker 114*7594170eSAndroid Build Coastguard Worker apex_files_info_test( 115*7594170eSAndroid Build Coastguard Worker name = test_name, 116*7594170eSAndroid Build Coastguard Worker target_under_test = name, 117*7594170eSAndroid Build Coastguard Worker target_compatible_with = ["//build/bazel_common_rules/platforms/os:android", "//build/bazel_common_rules/platforms/arch:arm64"], 118*7594170eSAndroid Build Coastguard Worker expected_files_info = [json.encode(i) for i in [ 119*7594170eSAndroid Build Coastguard Worker { 120*7594170eSAndroid Build Coastguard Worker "built_file": "bazel-out/bin/build/bazel/rules/apex/bin/apex_files_info_complex_bin_cc/apex_files_info_complex_bin_cc", 121*7594170eSAndroid Build Coastguard Worker "class": "nativeExecutable", 122*7594170eSAndroid Build Coastguard Worker "install_dir": "bin", 123*7594170eSAndroid Build Coastguard Worker "basename": "apex_files_info_complex_bin_cc", 124*7594170eSAndroid Build Coastguard Worker "package": "build/bazel/rules/apex", 125*7594170eSAndroid Build Coastguard Worker "make_module_name": "apex_files_info_complex_bin_cc", 126*7594170eSAndroid Build Coastguard Worker "arch": "arm64", 127*7594170eSAndroid Build Coastguard Worker "unstripped_built_file": "bazel-out/build/bazel/rules/apex/apex_files_info_complex_bin_cc_unstripped", 128*7594170eSAndroid Build Coastguard Worker }, 129*7594170eSAndroid Build Coastguard Worker { 130*7594170eSAndroid Build Coastguard Worker "built_file": "bazel-out/bin/build/bazel/rules/apex/apex_files_info_complex_bin_sh", 131*7594170eSAndroid Build Coastguard Worker "class": "shBinary", 132*7594170eSAndroid Build Coastguard Worker "install_dir": "bin", 133*7594170eSAndroid Build Coastguard Worker "basename": "apex_files_info_complex_bin_sh", 134*7594170eSAndroid Build Coastguard Worker "package": "build/bazel/rules/apex", 135*7594170eSAndroid Build Coastguard Worker "make_module_name": "apex_files_info_complex_bin_sh", 136*7594170eSAndroid Build Coastguard Worker "arch": "arm64", 137*7594170eSAndroid Build Coastguard Worker }, 138*7594170eSAndroid Build Coastguard Worker { 139*7594170eSAndroid Build Coastguard Worker "built_file": "build/bazel/rules/apex/apex_files_info_complex_file.txt", 140*7594170eSAndroid Build Coastguard Worker "class": "etc", 141*7594170eSAndroid Build Coastguard Worker "install_dir": "etc", 142*7594170eSAndroid Build Coastguard Worker "basename": "apex_files_info_complex_file", 143*7594170eSAndroid Build Coastguard Worker "package": "build/bazel/rules/apex", 144*7594170eSAndroid Build Coastguard Worker "make_module_name": "apex_files_info_complex_file", 145*7594170eSAndroid Build Coastguard Worker "arch": "arm64", 146*7594170eSAndroid Build Coastguard Worker }, 147*7594170eSAndroid Build Coastguard Worker { 148*7594170eSAndroid Build Coastguard Worker "built_file": "bazel-out/bin/build/bazel/rules/apex/apex_files_info_complex_lib2_cc/apex_files_info_complex_lib2_cc.so", 149*7594170eSAndroid Build Coastguard Worker "class": "nativeSharedLib", 150*7594170eSAndroid Build Coastguard Worker "install_dir": "lib64", 151*7594170eSAndroid Build Coastguard Worker "basename": "apex_files_info_complex_lib2_cc.so", 152*7594170eSAndroid Build Coastguard Worker "package": "build/bazel/rules/apex", 153*7594170eSAndroid Build Coastguard Worker "make_module_name": "apex_files_info_complex_lib2_cc", 154*7594170eSAndroid Build Coastguard Worker "arch": "arm64", 155*7594170eSAndroid Build Coastguard Worker "unstripped_built_file": "bazel-out/bin/build/bazel/rules/apex/libapex_files_info_complex_lib2_cc_unstripped.so", 156*7594170eSAndroid Build Coastguard Worker }, 157*7594170eSAndroid Build Coastguard Worker { 158*7594170eSAndroid Build Coastguard Worker "built_file": "bazel-out/bin/build/bazel/rules/apex/apex_files_info_complex_lib_cc/apex_files_info_complex_lib_cc.so", 159*7594170eSAndroid Build Coastguard Worker "class": "nativeSharedLib", 160*7594170eSAndroid Build Coastguard Worker "install_dir": "lib", 161*7594170eSAndroid Build Coastguard Worker "basename": "apex_files_info_complex_lib_cc.so", 162*7594170eSAndroid Build Coastguard Worker "package": "build/bazel/rules/apex", 163*7594170eSAndroid Build Coastguard Worker "make_module_name": "apex_files_info_complex_lib_cc", 164*7594170eSAndroid Build Coastguard Worker "arch": "arm", 165*7594170eSAndroid Build Coastguard Worker "unstripped_built_file": "bazel-out/bin/build/bazel/rules/apex/libapex_files_info_complex_lib_cc_unstripped.so", 166*7594170eSAndroid Build Coastguard Worker }, 167*7594170eSAndroid Build Coastguard Worker { 168*7594170eSAndroid Build Coastguard Worker "built_file": "bazel-out/bin/external/libcxx/libc++/libc++.so", 169*7594170eSAndroid Build Coastguard Worker "class": "nativeSharedLib", 170*7594170eSAndroid Build Coastguard Worker "install_dir": "lib", 171*7594170eSAndroid Build Coastguard Worker "basename": "libc++.so", 172*7594170eSAndroid Build Coastguard Worker "package": "external/libcxx", 173*7594170eSAndroid Build Coastguard Worker "make_module_name": "libc++", 174*7594170eSAndroid Build Coastguard Worker "arch": "arm", 175*7594170eSAndroid Build Coastguard Worker "unstripped_built_file": "bazel-out/bin/external/libcxx/liblibc++_unstripped.so", 176*7594170eSAndroid Build Coastguard Worker }, 177*7594170eSAndroid Build Coastguard Worker { 178*7594170eSAndroid Build Coastguard Worker "built_file": "bazel-out/bin/external/libcxx/libc++/libc++.so", 179*7594170eSAndroid Build Coastguard Worker "class": "nativeSharedLib", 180*7594170eSAndroid Build Coastguard Worker "install_dir": "lib64", 181*7594170eSAndroid Build Coastguard Worker "basename": "libc++.so", 182*7594170eSAndroid Build Coastguard Worker "package": "external/libcxx", 183*7594170eSAndroid Build Coastguard Worker "make_module_name": "libc++", 184*7594170eSAndroid Build Coastguard Worker "arch": "arm64", 185*7594170eSAndroid Build Coastguard Worker "unstripped_built_file": "bazel-out/bin/external/libcxx/liblibc++_unstripped.so", 186*7594170eSAndroid Build Coastguard Worker }, 187*7594170eSAndroid Build Coastguard Worker ]], 188*7594170eSAndroid Build Coastguard Worker ) 189*7594170eSAndroid Build Coastguard Worker 190*7594170eSAndroid Build Coastguard Worker return test_name 191*7594170eSAndroid Build Coastguard Worker 192*7594170eSAndroid Build Coastguard Workerdef apex_mk_test_suite(name): 193*7594170eSAndroid Build Coastguard Worker native.test_suite( 194*7594170eSAndroid Build Coastguard Worker name = name, 195*7594170eSAndroid Build Coastguard Worker tests = [ 196*7594170eSAndroid Build Coastguard Worker _test_apex_files_info_basic(), 197*7594170eSAndroid Build Coastguard Worker _test_apex_files_info_complex(), 198*7594170eSAndroid Build Coastguard Worker ], 199*7594170eSAndroid Build Coastguard Worker ) 200