1*333d2b36SAndroid Build Coastguard Worker// Copyright 2020 Google Inc. All rights reserved. 2*333d2b36SAndroid Build Coastguard Worker// 3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*333d2b36SAndroid Build Coastguard Worker// 7*333d2b36SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*333d2b36SAndroid Build Coastguard Worker// 9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*333d2b36SAndroid Build Coastguard Worker// limitations under the License. 14*333d2b36SAndroid Build Coastguard Worker 15*333d2b36SAndroid Build Coastguard Workerpackage main 16*333d2b36SAndroid Build Coastguard Worker 17*333d2b36SAndroid Build Coastguard Workerimport ( 18*333d2b36SAndroid Build Coastguard Worker "bytes" 19*333d2b36SAndroid Build Coastguard Worker "fmt" 20*333d2b36SAndroid Build Coastguard Worker "reflect" 21*333d2b36SAndroid Build Coastguard Worker "testing" 22*333d2b36SAndroid Build Coastguard Worker 23*333d2b36SAndroid Build Coastguard Worker "google.golang.org/protobuf/encoding/prototext" 24*333d2b36SAndroid Build Coastguard Worker 25*333d2b36SAndroid Build Coastguard Worker bp "android/soong/cmd/extract_apks/bundle_proto" 26*333d2b36SAndroid Build Coastguard Worker "android/soong/third_party/zip" 27*333d2b36SAndroid Build Coastguard Worker) 28*333d2b36SAndroid Build Coastguard Worker 29*333d2b36SAndroid Build Coastguard Workertype testConfigDesc struct { 30*333d2b36SAndroid Build Coastguard Worker name string 31*333d2b36SAndroid Build Coastguard Worker targetConfig TargetConfig 32*333d2b36SAndroid Build Coastguard Worker expected SelectionResult 33*333d2b36SAndroid Build Coastguard Worker} 34*333d2b36SAndroid Build Coastguard Worker 35*333d2b36SAndroid Build Coastguard Workertype testDesc struct { 36*333d2b36SAndroid Build Coastguard Worker protoText string 37*333d2b36SAndroid Build Coastguard Worker configs []testConfigDesc 38*333d2b36SAndroid Build Coastguard Worker} 39*333d2b36SAndroid Build Coastguard Worker 40*333d2b36SAndroid Build Coastguard Workerfunc TestSelectApks_ApkSet(t *testing.T) { 41*333d2b36SAndroid Build Coastguard Worker testCases := []testDesc{ 42*333d2b36SAndroid Build Coastguard Worker { 43*333d2b36SAndroid Build Coastguard Worker protoText: ` 44*333d2b36SAndroid Build Coastguard Workervariant { 45*333d2b36SAndroid Build Coastguard Worker targeting { 46*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting { 47*333d2b36SAndroid Build Coastguard Worker value { min { value: 29 } } } } 48*333d2b36SAndroid Build Coastguard Worker apk_set { 49*333d2b36SAndroid Build Coastguard Worker module_metadata { 50*333d2b36SAndroid Build Coastguard Worker name: "base" targeting {} delivery_type: INSTALL_TIME } 51*333d2b36SAndroid Build Coastguard Worker apk_description { 52*333d2b36SAndroid Build Coastguard Worker targeting { 53*333d2b36SAndroid Build Coastguard Worker screen_density_targeting { 54*333d2b36SAndroid Build Coastguard Worker value { density_alias: LDPI } } 55*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting { 56*333d2b36SAndroid Build Coastguard Worker value { min { value: 21 } } } } 57*333d2b36SAndroid Build Coastguard Worker path: "splits/base-ldpi.apk" 58*333d2b36SAndroid Build Coastguard Worker split_apk_metadata { split_id: "config.ldpi" } } 59*333d2b36SAndroid Build Coastguard Worker apk_description { 60*333d2b36SAndroid Build Coastguard Worker targeting { 61*333d2b36SAndroid Build Coastguard Worker screen_density_targeting { 62*333d2b36SAndroid Build Coastguard Worker value { density_alias: MDPI } } 63*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting { 64*333d2b36SAndroid Build Coastguard Worker value { min { value: 21 } } } } 65*333d2b36SAndroid Build Coastguard Worker path: "splits/base-mdpi.apk" 66*333d2b36SAndroid Build Coastguard Worker split_apk_metadata { split_id: "config.mdpi" } } 67*333d2b36SAndroid Build Coastguard Worker apk_description { 68*333d2b36SAndroid Build Coastguard Worker targeting { 69*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting { 70*333d2b36SAndroid Build Coastguard Worker value { min { value: 21 } } } } 71*333d2b36SAndroid Build Coastguard Worker path: "splits/base-master.apk" 72*333d2b36SAndroid Build Coastguard Worker split_apk_metadata { is_master_split: true } } 73*333d2b36SAndroid Build Coastguard Worker apk_description { 74*333d2b36SAndroid Build Coastguard Worker targeting { 75*333d2b36SAndroid Build Coastguard Worker abi_targeting { 76*333d2b36SAndroid Build Coastguard Worker value { alias: ARMEABI_V7A } 77*333d2b36SAndroid Build Coastguard Worker alternatives { alias: ARM64_V8A } 78*333d2b36SAndroid Build Coastguard Worker alternatives { alias: X86 } 79*333d2b36SAndroid Build Coastguard Worker alternatives { alias: X86_64 } } 80*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting { 81*333d2b36SAndroid Build Coastguard Worker value { min { value: 21 } } } } 82*333d2b36SAndroid Build Coastguard Worker path: "splits/base-armeabi_v7a.apk" 83*333d2b36SAndroid Build Coastguard Worker split_apk_metadata { split_id: "config.armeabi_v7a" } } 84*333d2b36SAndroid Build Coastguard Worker apk_description { 85*333d2b36SAndroid Build Coastguard Worker targeting { 86*333d2b36SAndroid Build Coastguard Worker abi_targeting { 87*333d2b36SAndroid Build Coastguard Worker value { alias: ARM64_V8A } 88*333d2b36SAndroid Build Coastguard Worker alternatives { alias: ARMEABI_V7A } 89*333d2b36SAndroid Build Coastguard Worker alternatives { alias: X86 } 90*333d2b36SAndroid Build Coastguard Worker alternatives { alias: X86_64 } } 91*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting { 92*333d2b36SAndroid Build Coastguard Worker value { min { value: 21 } } } } 93*333d2b36SAndroid Build Coastguard Worker path: "splits/base-arm64_v8a.apk" 94*333d2b36SAndroid Build Coastguard Worker split_apk_metadata { split_id: "config.arm64_v8a" } } 95*333d2b36SAndroid Build Coastguard Worker apk_description { 96*333d2b36SAndroid Build Coastguard Worker targeting { 97*333d2b36SAndroid Build Coastguard Worker abi_targeting { 98*333d2b36SAndroid Build Coastguard Worker value { alias: X86 } 99*333d2b36SAndroid Build Coastguard Worker alternatives { alias: ARMEABI_V7A } 100*333d2b36SAndroid Build Coastguard Worker alternatives { alias: ARM64_V8A } 101*333d2b36SAndroid Build Coastguard Worker alternatives { alias: X86_64 } } 102*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting { 103*333d2b36SAndroid Build Coastguard Worker value { min { value: 21 } } } } 104*333d2b36SAndroid Build Coastguard Worker path: "splits/base-x86.apk" 105*333d2b36SAndroid Build Coastguard Worker split_apk_metadata { split_id: "config.x86" } } 106*333d2b36SAndroid Build Coastguard Worker apk_description { 107*333d2b36SAndroid Build Coastguard Worker targeting { 108*333d2b36SAndroid Build Coastguard Worker abi_targeting { 109*333d2b36SAndroid Build Coastguard Worker value { alias: X86_64 } 110*333d2b36SAndroid Build Coastguard Worker alternatives { alias: ARMEABI_V7A } 111*333d2b36SAndroid Build Coastguard Worker alternatives { alias: ARM64_V8A } 112*333d2b36SAndroid Build Coastguard Worker alternatives { alias: X86 } } 113*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting { 114*333d2b36SAndroid Build Coastguard Worker value { min { value: 21 } } } } 115*333d2b36SAndroid Build Coastguard Worker path: "splits/base-x86_64.apk" 116*333d2b36SAndroid Build Coastguard Worker split_apk_metadata { split_id: "config.x86_64" } } } 117*333d2b36SAndroid Build Coastguard Worker} 118*333d2b36SAndroid Build Coastguard Workerbundletool { 119*333d2b36SAndroid Build Coastguard Worker version: "0.10.3" } 120*333d2b36SAndroid Build Coastguard Worker 121*333d2b36SAndroid Build Coastguard Worker`, 122*333d2b36SAndroid Build Coastguard Worker configs: []testConfigDesc{ 123*333d2b36SAndroid Build Coastguard Worker { 124*333d2b36SAndroid Build Coastguard Worker name: "one", 125*333d2b36SAndroid Build Coastguard Worker targetConfig: TargetConfig{ 126*333d2b36SAndroid Build Coastguard Worker sdkVersion: 29, 127*333d2b36SAndroid Build Coastguard Worker screenDpi: map[bp.ScreenDensity_DensityAlias]bool{ 128*333d2b36SAndroid Build Coastguard Worker bp.ScreenDensity_DENSITY_UNSPECIFIED: true, 129*333d2b36SAndroid Build Coastguard Worker }, 130*333d2b36SAndroid Build Coastguard Worker abis: map[bp.Abi_AbiAlias]int{ 131*333d2b36SAndroid Build Coastguard Worker bp.Abi_ARMEABI_V7A: 0, 132*333d2b36SAndroid Build Coastguard Worker bp.Abi_ARM64_V8A: 1, 133*333d2b36SAndroid Build Coastguard Worker }, 134*333d2b36SAndroid Build Coastguard Worker }, 135*333d2b36SAndroid Build Coastguard Worker expected: SelectionResult{ 136*333d2b36SAndroid Build Coastguard Worker "base", 137*333d2b36SAndroid Build Coastguard Worker []string{ 138*333d2b36SAndroid Build Coastguard Worker "splits/base-ldpi.apk", 139*333d2b36SAndroid Build Coastguard Worker "splits/base-mdpi.apk", 140*333d2b36SAndroid Build Coastguard Worker "splits/base-master.apk", 141*333d2b36SAndroid Build Coastguard Worker "splits/base-armeabi_v7a.apk", 142*333d2b36SAndroid Build Coastguard Worker }, 143*333d2b36SAndroid Build Coastguard Worker }, 144*333d2b36SAndroid Build Coastguard Worker }, 145*333d2b36SAndroid Build Coastguard Worker { 146*333d2b36SAndroid Build Coastguard Worker name: "two", 147*333d2b36SAndroid Build Coastguard Worker targetConfig: TargetConfig{ 148*333d2b36SAndroid Build Coastguard Worker sdkVersion: 29, 149*333d2b36SAndroid Build Coastguard Worker screenDpi: map[bp.ScreenDensity_DensityAlias]bool{ 150*333d2b36SAndroid Build Coastguard Worker bp.ScreenDensity_LDPI: true, 151*333d2b36SAndroid Build Coastguard Worker }, 152*333d2b36SAndroid Build Coastguard Worker abis: map[bp.Abi_AbiAlias]int{}, 153*333d2b36SAndroid Build Coastguard Worker }, 154*333d2b36SAndroid Build Coastguard Worker expected: SelectionResult{ 155*333d2b36SAndroid Build Coastguard Worker "base", 156*333d2b36SAndroid Build Coastguard Worker []string{ 157*333d2b36SAndroid Build Coastguard Worker "splits/base-ldpi.apk", 158*333d2b36SAndroid Build Coastguard Worker "splits/base-master.apk", 159*333d2b36SAndroid Build Coastguard Worker }, 160*333d2b36SAndroid Build Coastguard Worker }, 161*333d2b36SAndroid Build Coastguard Worker }, 162*333d2b36SAndroid Build Coastguard Worker { 163*333d2b36SAndroid Build Coastguard Worker name: "three", 164*333d2b36SAndroid Build Coastguard Worker targetConfig: TargetConfig{ 165*333d2b36SAndroid Build Coastguard Worker sdkVersion: 20, 166*333d2b36SAndroid Build Coastguard Worker screenDpi: map[bp.ScreenDensity_DensityAlias]bool{ 167*333d2b36SAndroid Build Coastguard Worker bp.ScreenDensity_LDPI: true, 168*333d2b36SAndroid Build Coastguard Worker }, 169*333d2b36SAndroid Build Coastguard Worker abis: map[bp.Abi_AbiAlias]int{}, 170*333d2b36SAndroid Build Coastguard Worker }, 171*333d2b36SAndroid Build Coastguard Worker expected: SelectionResult{ 172*333d2b36SAndroid Build Coastguard Worker "", 173*333d2b36SAndroid Build Coastguard Worker nil, 174*333d2b36SAndroid Build Coastguard Worker }, 175*333d2b36SAndroid Build Coastguard Worker }, 176*333d2b36SAndroid Build Coastguard Worker { 177*333d2b36SAndroid Build Coastguard Worker name: "four", 178*333d2b36SAndroid Build Coastguard Worker targetConfig: TargetConfig{ 179*333d2b36SAndroid Build Coastguard Worker sdkVersion: 29, 180*333d2b36SAndroid Build Coastguard Worker screenDpi: map[bp.ScreenDensity_DensityAlias]bool{ 181*333d2b36SAndroid Build Coastguard Worker bp.ScreenDensity_MDPI: true, 182*333d2b36SAndroid Build Coastguard Worker }, 183*333d2b36SAndroid Build Coastguard Worker abis: map[bp.Abi_AbiAlias]int{ 184*333d2b36SAndroid Build Coastguard Worker bp.Abi_ARM64_V8A: 0, 185*333d2b36SAndroid Build Coastguard Worker bp.Abi_ARMEABI_V7A: 1, 186*333d2b36SAndroid Build Coastguard Worker }, 187*333d2b36SAndroid Build Coastguard Worker }, 188*333d2b36SAndroid Build Coastguard Worker expected: SelectionResult{ 189*333d2b36SAndroid Build Coastguard Worker "base", 190*333d2b36SAndroid Build Coastguard Worker []string{ 191*333d2b36SAndroid Build Coastguard Worker "splits/base-mdpi.apk", 192*333d2b36SAndroid Build Coastguard Worker "splits/base-master.apk", 193*333d2b36SAndroid Build Coastguard Worker "splits/base-arm64_v8a.apk", 194*333d2b36SAndroid Build Coastguard Worker }, 195*333d2b36SAndroid Build Coastguard Worker }, 196*333d2b36SAndroid Build Coastguard Worker }, 197*333d2b36SAndroid Build Coastguard Worker }, 198*333d2b36SAndroid Build Coastguard Worker }, 199*333d2b36SAndroid Build Coastguard Worker { 200*333d2b36SAndroid Build Coastguard Worker protoText: ` 201*333d2b36SAndroid Build Coastguard Workervariant { 202*333d2b36SAndroid Build Coastguard Worker targeting { 203*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting { 204*333d2b36SAndroid Build Coastguard Worker value { min { value: 10000 } } } } 205*333d2b36SAndroid Build Coastguard Worker apk_set { 206*333d2b36SAndroid Build Coastguard Worker module_metadata { 207*333d2b36SAndroid Build Coastguard Worker name: "base" targeting {} delivery_type: INSTALL_TIME } 208*333d2b36SAndroid Build Coastguard Worker apk_description { 209*333d2b36SAndroid Build Coastguard Worker targeting { 210*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting { 211*333d2b36SAndroid Build Coastguard Worker value { min { value: 21 } } } } 212*333d2b36SAndroid Build Coastguard Worker path: "splits/base-master.apk" 213*333d2b36SAndroid Build Coastguard Worker split_apk_metadata { is_master_split: true } } } }`, 214*333d2b36SAndroid Build Coastguard Worker configs: []testConfigDesc{ 215*333d2b36SAndroid Build Coastguard Worker { 216*333d2b36SAndroid Build Coastguard Worker name: "Prerelease", 217*333d2b36SAndroid Build Coastguard Worker targetConfig: TargetConfig{ 218*333d2b36SAndroid Build Coastguard Worker sdkVersion: 30, 219*333d2b36SAndroid Build Coastguard Worker screenDpi: map[bp.ScreenDensity_DensityAlias]bool{}, 220*333d2b36SAndroid Build Coastguard Worker abis: map[bp.Abi_AbiAlias]int{}, 221*333d2b36SAndroid Build Coastguard Worker allowPrereleased: true, 222*333d2b36SAndroid Build Coastguard Worker }, 223*333d2b36SAndroid Build Coastguard Worker expected: SelectionResult{ 224*333d2b36SAndroid Build Coastguard Worker "base", 225*333d2b36SAndroid Build Coastguard Worker []string{"splits/base-master.apk"}, 226*333d2b36SAndroid Build Coastguard Worker }, 227*333d2b36SAndroid Build Coastguard Worker }, 228*333d2b36SAndroid Build Coastguard Worker }, 229*333d2b36SAndroid Build Coastguard Worker }, 230*333d2b36SAndroid Build Coastguard Worker { 231*333d2b36SAndroid Build Coastguard Worker protoText: ` 232*333d2b36SAndroid Build Coastguard Workervariant { 233*333d2b36SAndroid Build Coastguard Worker targeting { 234*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting { 235*333d2b36SAndroid Build Coastguard Worker value { min { value: 29 } } } } 236*333d2b36SAndroid Build Coastguard Worker apk_set { 237*333d2b36SAndroid Build Coastguard Worker module_metadata { 238*333d2b36SAndroid Build Coastguard Worker name: "base" targeting {} delivery_type: INSTALL_TIME } 239*333d2b36SAndroid Build Coastguard Worker apk_description { 240*333d2b36SAndroid Build Coastguard Worker targeting {} 241*333d2b36SAndroid Build Coastguard Worker path: "universal.apk" 242*333d2b36SAndroid Build Coastguard Worker standalone_apk_metadata { fused_module_name: "base" } } } }`, 243*333d2b36SAndroid Build Coastguard Worker configs: []testConfigDesc{ 244*333d2b36SAndroid Build Coastguard Worker { 245*333d2b36SAndroid Build Coastguard Worker name: "Universal", 246*333d2b36SAndroid Build Coastguard Worker targetConfig: TargetConfig{sdkVersion: 30}, 247*333d2b36SAndroid Build Coastguard Worker expected: SelectionResult{ 248*333d2b36SAndroid Build Coastguard Worker "base", 249*333d2b36SAndroid Build Coastguard Worker []string{"universal.apk"}, 250*333d2b36SAndroid Build Coastguard Worker }, 251*333d2b36SAndroid Build Coastguard Worker }, 252*333d2b36SAndroid Build Coastguard Worker }, 253*333d2b36SAndroid Build Coastguard Worker }, 254*333d2b36SAndroid Build Coastguard Worker } 255*333d2b36SAndroid Build Coastguard Worker for _, testCase := range testCases { 256*333d2b36SAndroid Build Coastguard Worker var toc bp.BuildApksResult 257*333d2b36SAndroid Build Coastguard Worker if err := prototext.Unmarshal([]byte(testCase.protoText), &toc); err != nil { 258*333d2b36SAndroid Build Coastguard Worker t.Fatal(err) 259*333d2b36SAndroid Build Coastguard Worker } 260*333d2b36SAndroid Build Coastguard Worker for _, config := range testCase.configs { 261*333d2b36SAndroid Build Coastguard Worker actual := selectApks(&toc, config.targetConfig) 262*333d2b36SAndroid Build Coastguard Worker if !reflect.DeepEqual(config.expected, actual) { 263*333d2b36SAndroid Build Coastguard Worker t.Errorf("%s: expected %v, got %v", config.name, config.expected, actual) 264*333d2b36SAndroid Build Coastguard Worker } 265*333d2b36SAndroid Build Coastguard Worker } 266*333d2b36SAndroid Build Coastguard Worker } 267*333d2b36SAndroid Build Coastguard Worker} 268*333d2b36SAndroid Build Coastguard Worker 269*333d2b36SAndroid Build Coastguard Workerfunc TestSelectApks_ApexSet(t *testing.T) { 270*333d2b36SAndroid Build Coastguard Worker testCases := []testDesc{ 271*333d2b36SAndroid Build Coastguard Worker { 272*333d2b36SAndroid Build Coastguard Worker protoText: ` 273*333d2b36SAndroid Build Coastguard Workervariant { 274*333d2b36SAndroid Build Coastguard Worker targeting { 275*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting { 276*333d2b36SAndroid Build Coastguard Worker value { min { value: 29 } } } } 277*333d2b36SAndroid Build Coastguard Worker apk_set { 278*333d2b36SAndroid Build Coastguard Worker module_metadata { 279*333d2b36SAndroid Build Coastguard Worker name: "base" targeting {} delivery_type: INSTALL_TIME } 280*333d2b36SAndroid Build Coastguard Worker apk_description { 281*333d2b36SAndroid Build Coastguard Worker targeting { 282*333d2b36SAndroid Build Coastguard Worker multi_abi_targeting { 283*333d2b36SAndroid Build Coastguard Worker value { abi { alias: ARMEABI_V7A } } 284*333d2b36SAndroid Build Coastguard Worker alternatives { abi { alias: ARM64_V8A } } 285*333d2b36SAndroid Build Coastguard Worker alternatives { abi { alias: X86 } } 286*333d2b36SAndroid Build Coastguard Worker alternatives { abi { alias: X86_64 } } } 287*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting { 288*333d2b36SAndroid Build Coastguard Worker value { min { value: 21 } } } } 289*333d2b36SAndroid Build Coastguard Worker path: "standalones/standalone-armeabi_v7a.apex" 290*333d2b36SAndroid Build Coastguard Worker apex_apk_metadata { } } 291*333d2b36SAndroid Build Coastguard Worker apk_description { 292*333d2b36SAndroid Build Coastguard Worker targeting { 293*333d2b36SAndroid Build Coastguard Worker multi_abi_targeting { 294*333d2b36SAndroid Build Coastguard Worker value { abi { alias: ARM64_V8A } } 295*333d2b36SAndroid Build Coastguard Worker alternatives { abi { alias: ARMEABI_V7A } } 296*333d2b36SAndroid Build Coastguard Worker alternatives { abi { alias: X86 } } 297*333d2b36SAndroid Build Coastguard Worker alternatives { abi { alias: X86_64 } } } 298*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting { 299*333d2b36SAndroid Build Coastguard Worker value { min { value: 21 } } } } 300*333d2b36SAndroid Build Coastguard Worker path: "standalones/standalone-arm64_v8a.apex" 301*333d2b36SAndroid Build Coastguard Worker apex_apk_metadata { } } 302*333d2b36SAndroid Build Coastguard Worker apk_description { 303*333d2b36SAndroid Build Coastguard Worker targeting { 304*333d2b36SAndroid Build Coastguard Worker multi_abi_targeting { 305*333d2b36SAndroid Build Coastguard Worker value { abi { alias: X86 } } 306*333d2b36SAndroid Build Coastguard Worker alternatives { abi { alias: ARMEABI_V7A } } 307*333d2b36SAndroid Build Coastguard Worker alternatives { abi { alias: ARM64_V8A } } 308*333d2b36SAndroid Build Coastguard Worker alternatives { abi { alias: X86_64 } } } 309*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting { 310*333d2b36SAndroid Build Coastguard Worker value { min { value: 21 } } } } 311*333d2b36SAndroid Build Coastguard Worker path: "standalones/standalone-x86.apex" 312*333d2b36SAndroid Build Coastguard Worker apex_apk_metadata { } } 313*333d2b36SAndroid Build Coastguard Worker apk_description { 314*333d2b36SAndroid Build Coastguard Worker targeting { 315*333d2b36SAndroid Build Coastguard Worker multi_abi_targeting { 316*333d2b36SAndroid Build Coastguard Worker value { abi { alias: X86_64 } } 317*333d2b36SAndroid Build Coastguard Worker alternatives { abi { alias: ARMEABI_V7A } } 318*333d2b36SAndroid Build Coastguard Worker alternatives { abi { alias: ARM64_V8A } } 319*333d2b36SAndroid Build Coastguard Worker alternatives { abi { alias: X86 } } } 320*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting { 321*333d2b36SAndroid Build Coastguard Worker value { min { value: 21 } } } } 322*333d2b36SAndroid Build Coastguard Worker path: "standalones/standalone-x86_64.apex" 323*333d2b36SAndroid Build Coastguard Worker apex_apk_metadata { } } } 324*333d2b36SAndroid Build Coastguard Worker} 325*333d2b36SAndroid Build Coastguard Workerbundletool { 326*333d2b36SAndroid Build Coastguard Worker version: "0.10.3" } 327*333d2b36SAndroid Build Coastguard Worker 328*333d2b36SAndroid Build Coastguard Worker`, 329*333d2b36SAndroid Build Coastguard Worker configs: []testConfigDesc{ 330*333d2b36SAndroid Build Coastguard Worker { 331*333d2b36SAndroid Build Coastguard Worker name: "order matches priorities", 332*333d2b36SAndroid Build Coastguard Worker targetConfig: TargetConfig{ 333*333d2b36SAndroid Build Coastguard Worker sdkVersion: 29, 334*333d2b36SAndroid Build Coastguard Worker screenDpi: map[bp.ScreenDensity_DensityAlias]bool{ 335*333d2b36SAndroid Build Coastguard Worker bp.ScreenDensity_DENSITY_UNSPECIFIED: true, 336*333d2b36SAndroid Build Coastguard Worker }, 337*333d2b36SAndroid Build Coastguard Worker abis: map[bp.Abi_AbiAlias]int{ 338*333d2b36SAndroid Build Coastguard Worker bp.Abi_ARM64_V8A: 0, 339*333d2b36SAndroid Build Coastguard Worker bp.Abi_ARMEABI_V7A: 1, 340*333d2b36SAndroid Build Coastguard Worker }, 341*333d2b36SAndroid Build Coastguard Worker }, 342*333d2b36SAndroid Build Coastguard Worker expected: SelectionResult{ 343*333d2b36SAndroid Build Coastguard Worker "base", 344*333d2b36SAndroid Build Coastguard Worker []string{ 345*333d2b36SAndroid Build Coastguard Worker "standalones/standalone-arm64_v8a.apex", 346*333d2b36SAndroid Build Coastguard Worker }, 347*333d2b36SAndroid Build Coastguard Worker }, 348*333d2b36SAndroid Build Coastguard Worker }, 349*333d2b36SAndroid Build Coastguard Worker { 350*333d2b36SAndroid Build Coastguard Worker name: "order doesn't match priorities", 351*333d2b36SAndroid Build Coastguard Worker targetConfig: TargetConfig{ 352*333d2b36SAndroid Build Coastguard Worker sdkVersion: 29, 353*333d2b36SAndroid Build Coastguard Worker screenDpi: map[bp.ScreenDensity_DensityAlias]bool{ 354*333d2b36SAndroid Build Coastguard Worker bp.ScreenDensity_DENSITY_UNSPECIFIED: true, 355*333d2b36SAndroid Build Coastguard Worker }, 356*333d2b36SAndroid Build Coastguard Worker abis: map[bp.Abi_AbiAlias]int{ 357*333d2b36SAndroid Build Coastguard Worker bp.Abi_ARMEABI_V7A: 0, 358*333d2b36SAndroid Build Coastguard Worker bp.Abi_ARM64_V8A: 1, 359*333d2b36SAndroid Build Coastguard Worker }, 360*333d2b36SAndroid Build Coastguard Worker }, 361*333d2b36SAndroid Build Coastguard Worker expected: SelectionResult{ 362*333d2b36SAndroid Build Coastguard Worker "base", 363*333d2b36SAndroid Build Coastguard Worker []string{ 364*333d2b36SAndroid Build Coastguard Worker "standalones/standalone-arm64_v8a.apex", 365*333d2b36SAndroid Build Coastguard Worker }, 366*333d2b36SAndroid Build Coastguard Worker }, 367*333d2b36SAndroid Build Coastguard Worker }, 368*333d2b36SAndroid Build Coastguard Worker { 369*333d2b36SAndroid Build Coastguard Worker name: "single choice", 370*333d2b36SAndroid Build Coastguard Worker targetConfig: TargetConfig{ 371*333d2b36SAndroid Build Coastguard Worker sdkVersion: 29, 372*333d2b36SAndroid Build Coastguard Worker screenDpi: map[bp.ScreenDensity_DensityAlias]bool{ 373*333d2b36SAndroid Build Coastguard Worker bp.ScreenDensity_DENSITY_UNSPECIFIED: true, 374*333d2b36SAndroid Build Coastguard Worker }, 375*333d2b36SAndroid Build Coastguard Worker abis: map[bp.Abi_AbiAlias]int{ 376*333d2b36SAndroid Build Coastguard Worker bp.Abi_ARMEABI_V7A: 0, 377*333d2b36SAndroid Build Coastguard Worker }, 378*333d2b36SAndroid Build Coastguard Worker }, 379*333d2b36SAndroid Build Coastguard Worker expected: SelectionResult{ 380*333d2b36SAndroid Build Coastguard Worker "base", 381*333d2b36SAndroid Build Coastguard Worker []string{ 382*333d2b36SAndroid Build Coastguard Worker "standalones/standalone-armeabi_v7a.apex", 383*333d2b36SAndroid Build Coastguard Worker }, 384*333d2b36SAndroid Build Coastguard Worker }, 385*333d2b36SAndroid Build Coastguard Worker }, 386*333d2b36SAndroid Build Coastguard Worker { 387*333d2b36SAndroid Build Coastguard Worker name: "cross platform", 388*333d2b36SAndroid Build Coastguard Worker targetConfig: TargetConfig{ 389*333d2b36SAndroid Build Coastguard Worker sdkVersion: 29, 390*333d2b36SAndroid Build Coastguard Worker screenDpi: map[bp.ScreenDensity_DensityAlias]bool{ 391*333d2b36SAndroid Build Coastguard Worker bp.ScreenDensity_DENSITY_UNSPECIFIED: true, 392*333d2b36SAndroid Build Coastguard Worker }, 393*333d2b36SAndroid Build Coastguard Worker abis: map[bp.Abi_AbiAlias]int{ 394*333d2b36SAndroid Build Coastguard Worker bp.Abi_ARM64_V8A: 0, 395*333d2b36SAndroid Build Coastguard Worker bp.Abi_MIPS64: 1, 396*333d2b36SAndroid Build Coastguard Worker bp.Abi_X86: 2, 397*333d2b36SAndroid Build Coastguard Worker }, 398*333d2b36SAndroid Build Coastguard Worker }, 399*333d2b36SAndroid Build Coastguard Worker expected: SelectionResult{ 400*333d2b36SAndroid Build Coastguard Worker "base", 401*333d2b36SAndroid Build Coastguard Worker []string{ 402*333d2b36SAndroid Build Coastguard Worker "standalones/standalone-x86.apex", 403*333d2b36SAndroid Build Coastguard Worker }, 404*333d2b36SAndroid Build Coastguard Worker }, 405*333d2b36SAndroid Build Coastguard Worker }, 406*333d2b36SAndroid Build Coastguard Worker }, 407*333d2b36SAndroid Build Coastguard Worker }, 408*333d2b36SAndroid Build Coastguard Worker } 409*333d2b36SAndroid Build Coastguard Worker for _, testCase := range testCases { 410*333d2b36SAndroid Build Coastguard Worker var toc bp.BuildApksResult 411*333d2b36SAndroid Build Coastguard Worker if err := prototext.Unmarshal([]byte(testCase.protoText), &toc); err != nil { 412*333d2b36SAndroid Build Coastguard Worker t.Fatal(err) 413*333d2b36SAndroid Build Coastguard Worker } 414*333d2b36SAndroid Build Coastguard Worker for _, config := range testCase.configs { 415*333d2b36SAndroid Build Coastguard Worker actual := selectApks(&toc, config.targetConfig) 416*333d2b36SAndroid Build Coastguard Worker if !reflect.DeepEqual(config.expected, actual) { 417*333d2b36SAndroid Build Coastguard Worker t.Errorf("%s: expected %v, got %v", config.name, config.expected, actual) 418*333d2b36SAndroid Build Coastguard Worker } 419*333d2b36SAndroid Build Coastguard Worker } 420*333d2b36SAndroid Build Coastguard Worker } 421*333d2b36SAndroid Build Coastguard Worker} 422*333d2b36SAndroid Build Coastguard Worker 423*333d2b36SAndroid Build Coastguard Workerfunc TestSelectApks_ApexSet_Variants(t *testing.T) { 424*333d2b36SAndroid Build Coastguard Worker testCases := []testDesc{ 425*333d2b36SAndroid Build Coastguard Worker { 426*333d2b36SAndroid Build Coastguard Worker protoText: ` 427*333d2b36SAndroid Build Coastguard Workervariant { 428*333d2b36SAndroid Build Coastguard Worker targeting { 429*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting {value {min {value: 29}}} 430*333d2b36SAndroid Build Coastguard Worker multi_abi_targeting { 431*333d2b36SAndroid Build Coastguard Worker value {abi {alias: ARMEABI_V7A}} 432*333d2b36SAndroid Build Coastguard Worker alternatives { 433*333d2b36SAndroid Build Coastguard Worker abi {alias: ARMEABI_V7A} 434*333d2b36SAndroid Build Coastguard Worker abi {alias: ARM64_V8A} 435*333d2b36SAndroid Build Coastguard Worker } 436*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: ARM64_V8A}} 437*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: X86}} 438*333d2b36SAndroid Build Coastguard Worker alternatives { 439*333d2b36SAndroid Build Coastguard Worker abi {alias: X86} 440*333d2b36SAndroid Build Coastguard Worker abi {alias: X86_64} 441*333d2b36SAndroid Build Coastguard Worker } 442*333d2b36SAndroid Build Coastguard Worker } 443*333d2b36SAndroid Build Coastguard Worker } 444*333d2b36SAndroid Build Coastguard Worker apk_set { 445*333d2b36SAndroid Build Coastguard Worker module_metadata { 446*333d2b36SAndroid Build Coastguard Worker name: "base" 447*333d2b36SAndroid Build Coastguard Worker delivery_type: INSTALL_TIME 448*333d2b36SAndroid Build Coastguard Worker } 449*333d2b36SAndroid Build Coastguard Worker apk_description { 450*333d2b36SAndroid Build Coastguard Worker targeting { 451*333d2b36SAndroid Build Coastguard Worker multi_abi_targeting { 452*333d2b36SAndroid Build Coastguard Worker value {abi {alias: ARMEABI_V7A}} 453*333d2b36SAndroid Build Coastguard Worker alternatives { 454*333d2b36SAndroid Build Coastguard Worker abi {alias: ARMEABI_V7A} 455*333d2b36SAndroid Build Coastguard Worker abi {alias: ARM64_V8A} 456*333d2b36SAndroid Build Coastguard Worker } 457*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: ARM64_V8A}} 458*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: X86}} 459*333d2b36SAndroid Build Coastguard Worker alternatives { 460*333d2b36SAndroid Build Coastguard Worker abi {alias: X86} 461*333d2b36SAndroid Build Coastguard Worker abi {alias: X86_64} 462*333d2b36SAndroid Build Coastguard Worker } 463*333d2b36SAndroid Build Coastguard Worker } 464*333d2b36SAndroid Build Coastguard Worker } 465*333d2b36SAndroid Build Coastguard Worker path: "standalones/standalone-armeabi_v7a.apex" 466*333d2b36SAndroid Build Coastguard Worker } 467*333d2b36SAndroid Build Coastguard Worker } 468*333d2b36SAndroid Build Coastguard Worker variant_number: 0 469*333d2b36SAndroid Build Coastguard Worker} 470*333d2b36SAndroid Build Coastguard Workervariant { 471*333d2b36SAndroid Build Coastguard Worker targeting { 472*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting {value {min {value: 29}}} 473*333d2b36SAndroid Build Coastguard Worker multi_abi_targeting { 474*333d2b36SAndroid Build Coastguard Worker value {abi {alias: ARM64_V8A}} 475*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: ARMEABI_V7A}} 476*333d2b36SAndroid Build Coastguard Worker alternatives { 477*333d2b36SAndroid Build Coastguard Worker abi {alias: ARMEABI_V7A} 478*333d2b36SAndroid Build Coastguard Worker abi {alias: ARM64_V8A} 479*333d2b36SAndroid Build Coastguard Worker } 480*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: X86}} 481*333d2b36SAndroid Build Coastguard Worker alternatives { 482*333d2b36SAndroid Build Coastguard Worker abi {alias: X86} 483*333d2b36SAndroid Build Coastguard Worker abi {alias: X86_64} 484*333d2b36SAndroid Build Coastguard Worker } 485*333d2b36SAndroid Build Coastguard Worker } 486*333d2b36SAndroid Build Coastguard Worker } 487*333d2b36SAndroid Build Coastguard Worker apk_set { 488*333d2b36SAndroid Build Coastguard Worker module_metadata { 489*333d2b36SAndroid Build Coastguard Worker name: "base" 490*333d2b36SAndroid Build Coastguard Worker delivery_type: INSTALL_TIME 491*333d2b36SAndroid Build Coastguard Worker } 492*333d2b36SAndroid Build Coastguard Worker apk_description { 493*333d2b36SAndroid Build Coastguard Worker targeting { 494*333d2b36SAndroid Build Coastguard Worker multi_abi_targeting { 495*333d2b36SAndroid Build Coastguard Worker value {abi {alias: ARM64_V8A}} 496*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: ARMEABI_V7A}} 497*333d2b36SAndroid Build Coastguard Worker alternatives { 498*333d2b36SAndroid Build Coastguard Worker abi {alias: ARMEABI_V7A} 499*333d2b36SAndroid Build Coastguard Worker abi {alias: ARM64_V8A} 500*333d2b36SAndroid Build Coastguard Worker } 501*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: X86}} 502*333d2b36SAndroid Build Coastguard Worker alternatives { 503*333d2b36SAndroid Build Coastguard Worker abi {alias: X86} 504*333d2b36SAndroid Build Coastguard Worker abi {alias: X86_64} 505*333d2b36SAndroid Build Coastguard Worker } 506*333d2b36SAndroid Build Coastguard Worker } 507*333d2b36SAndroid Build Coastguard Worker } 508*333d2b36SAndroid Build Coastguard Worker path: "standalones/standalone-arm64_v8a.apex" 509*333d2b36SAndroid Build Coastguard Worker } 510*333d2b36SAndroid Build Coastguard Worker } 511*333d2b36SAndroid Build Coastguard Worker variant_number: 1 512*333d2b36SAndroid Build Coastguard Worker} 513*333d2b36SAndroid Build Coastguard Workervariant { 514*333d2b36SAndroid Build Coastguard Worker targeting { 515*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting {value {min {value: 29}}} 516*333d2b36SAndroid Build Coastguard Worker multi_abi_targeting { 517*333d2b36SAndroid Build Coastguard Worker value { 518*333d2b36SAndroid Build Coastguard Worker abi {alias: ARMEABI_V7A} 519*333d2b36SAndroid Build Coastguard Worker abi {alias: ARM64_V8A} 520*333d2b36SAndroid Build Coastguard Worker } 521*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: ARMEABI_V7A}} 522*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: ARM64_V8A}} 523*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: X86}} 524*333d2b36SAndroid Build Coastguard Worker alternatives { 525*333d2b36SAndroid Build Coastguard Worker abi {alias: X86} 526*333d2b36SAndroid Build Coastguard Worker abi {alias: X86_64} 527*333d2b36SAndroid Build Coastguard Worker } 528*333d2b36SAndroid Build Coastguard Worker } 529*333d2b36SAndroid Build Coastguard Worker } 530*333d2b36SAndroid Build Coastguard Worker apk_set { 531*333d2b36SAndroid Build Coastguard Worker module_metadata { 532*333d2b36SAndroid Build Coastguard Worker name: "base" 533*333d2b36SAndroid Build Coastguard Worker delivery_type: INSTALL_TIME 534*333d2b36SAndroid Build Coastguard Worker } 535*333d2b36SAndroid Build Coastguard Worker apk_description { 536*333d2b36SAndroid Build Coastguard Worker targeting { 537*333d2b36SAndroid Build Coastguard Worker multi_abi_targeting { 538*333d2b36SAndroid Build Coastguard Worker value { 539*333d2b36SAndroid Build Coastguard Worker abi {alias: ARMEABI_V7A} 540*333d2b36SAndroid Build Coastguard Worker abi {alias: ARM64_V8A} 541*333d2b36SAndroid Build Coastguard Worker } 542*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: ARMEABI_V7A}} 543*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: ARM64_V8A}} 544*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: X86}} 545*333d2b36SAndroid Build Coastguard Worker alternatives { 546*333d2b36SAndroid Build Coastguard Worker abi {alias: X86} 547*333d2b36SAndroid Build Coastguard Worker abi {alias: X86_64} 548*333d2b36SAndroid Build Coastguard Worker } 549*333d2b36SAndroid Build Coastguard Worker } 550*333d2b36SAndroid Build Coastguard Worker } 551*333d2b36SAndroid Build Coastguard Worker path: "standalones/standalone-armeabi_v7a.arm64_v8a.apex" 552*333d2b36SAndroid Build Coastguard Worker } 553*333d2b36SAndroid Build Coastguard Worker } 554*333d2b36SAndroid Build Coastguard Worker variant_number: 2 555*333d2b36SAndroid Build Coastguard Worker} 556*333d2b36SAndroid Build Coastguard Workervariant { 557*333d2b36SAndroid Build Coastguard Worker targeting { 558*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting {value {min {value: 29}}} 559*333d2b36SAndroid Build Coastguard Worker multi_abi_targeting { 560*333d2b36SAndroid Build Coastguard Worker value {abi {alias: X86}} 561*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: ARMEABI_V7A}} 562*333d2b36SAndroid Build Coastguard Worker alternatives { 563*333d2b36SAndroid Build Coastguard Worker abi {alias: ARMEABI_V7A} 564*333d2b36SAndroid Build Coastguard Worker abi {alias: ARM64_V8A} 565*333d2b36SAndroid Build Coastguard Worker } 566*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: ARM64_V8A}} 567*333d2b36SAndroid Build Coastguard Worker alternatives { 568*333d2b36SAndroid Build Coastguard Worker abi {alias: X86} 569*333d2b36SAndroid Build Coastguard Worker abi {alias: X86_64} 570*333d2b36SAndroid Build Coastguard Worker } 571*333d2b36SAndroid Build Coastguard Worker } 572*333d2b36SAndroid Build Coastguard Worker } 573*333d2b36SAndroid Build Coastguard Worker apk_set { 574*333d2b36SAndroid Build Coastguard Worker module_metadata { 575*333d2b36SAndroid Build Coastguard Worker name: "base" 576*333d2b36SAndroid Build Coastguard Worker delivery_type: INSTALL_TIME 577*333d2b36SAndroid Build Coastguard Worker } 578*333d2b36SAndroid Build Coastguard Worker apk_description { 579*333d2b36SAndroid Build Coastguard Worker targeting { 580*333d2b36SAndroid Build Coastguard Worker multi_abi_targeting { 581*333d2b36SAndroid Build Coastguard Worker value {abi {alias: X86}} 582*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: ARMEABI_V7A}} 583*333d2b36SAndroid Build Coastguard Worker alternatives { 584*333d2b36SAndroid Build Coastguard Worker abi {alias: ARMEABI_V7A} 585*333d2b36SAndroid Build Coastguard Worker abi {alias: ARM64_V8A} 586*333d2b36SAndroid Build Coastguard Worker } 587*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: ARM64_V8A}} 588*333d2b36SAndroid Build Coastguard Worker alternatives { 589*333d2b36SAndroid Build Coastguard Worker abi {alias: X86} 590*333d2b36SAndroid Build Coastguard Worker abi {alias: X86_64} 591*333d2b36SAndroid Build Coastguard Worker } 592*333d2b36SAndroid Build Coastguard Worker } 593*333d2b36SAndroid Build Coastguard Worker } 594*333d2b36SAndroid Build Coastguard Worker path: "standalones/standalone-x86.apex" 595*333d2b36SAndroid Build Coastguard Worker } 596*333d2b36SAndroid Build Coastguard Worker } 597*333d2b36SAndroid Build Coastguard Worker variant_number: 3 598*333d2b36SAndroid Build Coastguard Worker} 599*333d2b36SAndroid Build Coastguard Workervariant { 600*333d2b36SAndroid Build Coastguard Worker targeting { 601*333d2b36SAndroid Build Coastguard Worker sdk_version_targeting {value {min {value: 29}}} 602*333d2b36SAndroid Build Coastguard Worker multi_abi_targeting { 603*333d2b36SAndroid Build Coastguard Worker value { 604*333d2b36SAndroid Build Coastguard Worker abi {alias: X86} 605*333d2b36SAndroid Build Coastguard Worker abi {alias: X86_64} 606*333d2b36SAndroid Build Coastguard Worker } 607*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: ARMEABI_V7A}} 608*333d2b36SAndroid Build Coastguard Worker alternatives { 609*333d2b36SAndroid Build Coastguard Worker abi {alias: ARMEABI_V7A} 610*333d2b36SAndroid Build Coastguard Worker abi {alias: ARM64_V8A} 611*333d2b36SAndroid Build Coastguard Worker } 612*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: ARM64_V8A}} 613*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: X86}} 614*333d2b36SAndroid Build Coastguard Worker } 615*333d2b36SAndroid Build Coastguard Worker } 616*333d2b36SAndroid Build Coastguard Worker apk_set { 617*333d2b36SAndroid Build Coastguard Worker module_metadata { 618*333d2b36SAndroid Build Coastguard Worker name: "base" 619*333d2b36SAndroid Build Coastguard Worker delivery_type: INSTALL_TIME 620*333d2b36SAndroid Build Coastguard Worker } 621*333d2b36SAndroid Build Coastguard Worker apk_description { 622*333d2b36SAndroid Build Coastguard Worker targeting { 623*333d2b36SAndroid Build Coastguard Worker multi_abi_targeting { 624*333d2b36SAndroid Build Coastguard Worker value { 625*333d2b36SAndroid Build Coastguard Worker abi {alias: X86} 626*333d2b36SAndroid Build Coastguard Worker abi {alias: X86_64} 627*333d2b36SAndroid Build Coastguard Worker } 628*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: ARMEABI_V7A}} 629*333d2b36SAndroid Build Coastguard Worker alternatives { 630*333d2b36SAndroid Build Coastguard Worker abi {alias: ARMEABI_V7A} 631*333d2b36SAndroid Build Coastguard Worker abi {alias: ARM64_V8A} 632*333d2b36SAndroid Build Coastguard Worker } 633*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: ARM64_V8A}} 634*333d2b36SAndroid Build Coastguard Worker alternatives {abi {alias: X86}} 635*333d2b36SAndroid Build Coastguard Worker } 636*333d2b36SAndroid Build Coastguard Worker } 637*333d2b36SAndroid Build Coastguard Worker path: "standalones/standalone-x86.x86_64.apex" 638*333d2b36SAndroid Build Coastguard Worker } 639*333d2b36SAndroid Build Coastguard Worker } 640*333d2b36SAndroid Build Coastguard Worker variant_number: 4 641*333d2b36SAndroid Build Coastguard Worker} 642*333d2b36SAndroid Build Coastguard Worker`, 643*333d2b36SAndroid Build Coastguard Worker configs: []testConfigDesc{ 644*333d2b36SAndroid Build Coastguard Worker { 645*333d2b36SAndroid Build Coastguard Worker name: "multi-variant multi-target ARM", 646*333d2b36SAndroid Build Coastguard Worker targetConfig: TargetConfig{ 647*333d2b36SAndroid Build Coastguard Worker sdkVersion: 33, 648*333d2b36SAndroid Build Coastguard Worker screenDpi: map[bp.ScreenDensity_DensityAlias]bool{ 649*333d2b36SAndroid Build Coastguard Worker bp.ScreenDensity_DENSITY_UNSPECIFIED: true, 650*333d2b36SAndroid Build Coastguard Worker }, 651*333d2b36SAndroid Build Coastguard Worker abis: map[bp.Abi_AbiAlias]int{ 652*333d2b36SAndroid Build Coastguard Worker bp.Abi_ARM64_V8A: 0, 653*333d2b36SAndroid Build Coastguard Worker bp.Abi_ARMEABI_V7A: 1, 654*333d2b36SAndroid Build Coastguard Worker }, 655*333d2b36SAndroid Build Coastguard Worker }, 656*333d2b36SAndroid Build Coastguard Worker expected: SelectionResult{ 657*333d2b36SAndroid Build Coastguard Worker "base", 658*333d2b36SAndroid Build Coastguard Worker []string{ 659*333d2b36SAndroid Build Coastguard Worker "standalones/standalone-armeabi_v7a.arm64_v8a.apex", 660*333d2b36SAndroid Build Coastguard Worker }, 661*333d2b36SAndroid Build Coastguard Worker }, 662*333d2b36SAndroid Build Coastguard Worker }, 663*333d2b36SAndroid Build Coastguard Worker { 664*333d2b36SAndroid Build Coastguard Worker name: "multi-variant single-target arm", 665*333d2b36SAndroid Build Coastguard Worker targetConfig: TargetConfig{ 666*333d2b36SAndroid Build Coastguard Worker sdkVersion: 33, 667*333d2b36SAndroid Build Coastguard Worker screenDpi: map[bp.ScreenDensity_DensityAlias]bool{ 668*333d2b36SAndroid Build Coastguard Worker bp.ScreenDensity_DENSITY_UNSPECIFIED: true, 669*333d2b36SAndroid Build Coastguard Worker }, 670*333d2b36SAndroid Build Coastguard Worker abis: map[bp.Abi_AbiAlias]int{ 671*333d2b36SAndroid Build Coastguard Worker bp.Abi_ARMEABI_V7A: 0, 672*333d2b36SAndroid Build Coastguard Worker }, 673*333d2b36SAndroid Build Coastguard Worker }, 674*333d2b36SAndroid Build Coastguard Worker expected: SelectionResult{ 675*333d2b36SAndroid Build Coastguard Worker "base", 676*333d2b36SAndroid Build Coastguard Worker []string{ 677*333d2b36SAndroid Build Coastguard Worker "standalones/standalone-armeabi_v7a.apex", 678*333d2b36SAndroid Build Coastguard Worker }, 679*333d2b36SAndroid Build Coastguard Worker }, 680*333d2b36SAndroid Build Coastguard Worker }, 681*333d2b36SAndroid Build Coastguard Worker { 682*333d2b36SAndroid Build Coastguard Worker name: "multi-variant single-target arm64", 683*333d2b36SAndroid Build Coastguard Worker targetConfig: TargetConfig{ 684*333d2b36SAndroid Build Coastguard Worker sdkVersion: 33, 685*333d2b36SAndroid Build Coastguard Worker screenDpi: map[bp.ScreenDensity_DensityAlias]bool{ 686*333d2b36SAndroid Build Coastguard Worker bp.ScreenDensity_DENSITY_UNSPECIFIED: true, 687*333d2b36SAndroid Build Coastguard Worker }, 688*333d2b36SAndroid Build Coastguard Worker abis: map[bp.Abi_AbiAlias]int{ 689*333d2b36SAndroid Build Coastguard Worker bp.Abi_ARM64_V8A: 0, 690*333d2b36SAndroid Build Coastguard Worker }, 691*333d2b36SAndroid Build Coastguard Worker }, 692*333d2b36SAndroid Build Coastguard Worker expected: SelectionResult{ 693*333d2b36SAndroid Build Coastguard Worker "base", 694*333d2b36SAndroid Build Coastguard Worker []string{ 695*333d2b36SAndroid Build Coastguard Worker "standalones/standalone-arm64_v8a.apex", 696*333d2b36SAndroid Build Coastguard Worker }, 697*333d2b36SAndroid Build Coastguard Worker }, 698*333d2b36SAndroid Build Coastguard Worker }, 699*333d2b36SAndroid Build Coastguard Worker { 700*333d2b36SAndroid Build Coastguard Worker name: "multi-variant multi-target x86", 701*333d2b36SAndroid Build Coastguard Worker targetConfig: TargetConfig{ 702*333d2b36SAndroid Build Coastguard Worker sdkVersion: 33, 703*333d2b36SAndroid Build Coastguard Worker screenDpi: map[bp.ScreenDensity_DensityAlias]bool{ 704*333d2b36SAndroid Build Coastguard Worker bp.ScreenDensity_DENSITY_UNSPECIFIED: true, 705*333d2b36SAndroid Build Coastguard Worker }, 706*333d2b36SAndroid Build Coastguard Worker abis: map[bp.Abi_AbiAlias]int{ 707*333d2b36SAndroid Build Coastguard Worker bp.Abi_X86: 0, 708*333d2b36SAndroid Build Coastguard Worker bp.Abi_X86_64: 1, 709*333d2b36SAndroid Build Coastguard Worker }, 710*333d2b36SAndroid Build Coastguard Worker }, 711*333d2b36SAndroid Build Coastguard Worker expected: SelectionResult{ 712*333d2b36SAndroid Build Coastguard Worker "base", 713*333d2b36SAndroid Build Coastguard Worker []string{ 714*333d2b36SAndroid Build Coastguard Worker "standalones/standalone-x86.x86_64.apex", 715*333d2b36SAndroid Build Coastguard Worker }, 716*333d2b36SAndroid Build Coastguard Worker }, 717*333d2b36SAndroid Build Coastguard Worker }, 718*333d2b36SAndroid Build Coastguard Worker { 719*333d2b36SAndroid Build Coastguard Worker name: "multi-variant single-target x86", 720*333d2b36SAndroid Build Coastguard Worker targetConfig: TargetConfig{ 721*333d2b36SAndroid Build Coastguard Worker sdkVersion: 33, 722*333d2b36SAndroid Build Coastguard Worker screenDpi: map[bp.ScreenDensity_DensityAlias]bool{ 723*333d2b36SAndroid Build Coastguard Worker bp.ScreenDensity_DENSITY_UNSPECIFIED: true, 724*333d2b36SAndroid Build Coastguard Worker }, 725*333d2b36SAndroid Build Coastguard Worker abis: map[bp.Abi_AbiAlias]int{ 726*333d2b36SAndroid Build Coastguard Worker bp.Abi_X86: 0, 727*333d2b36SAndroid Build Coastguard Worker }, 728*333d2b36SAndroid Build Coastguard Worker }, 729*333d2b36SAndroid Build Coastguard Worker expected: SelectionResult{ 730*333d2b36SAndroid Build Coastguard Worker "base", 731*333d2b36SAndroid Build Coastguard Worker []string{ 732*333d2b36SAndroid Build Coastguard Worker "standalones/standalone-x86.apex", 733*333d2b36SAndroid Build Coastguard Worker }, 734*333d2b36SAndroid Build Coastguard Worker }, 735*333d2b36SAndroid Build Coastguard Worker }, 736*333d2b36SAndroid Build Coastguard Worker { 737*333d2b36SAndroid Build Coastguard Worker name: "multi-variant single-target x86_64", 738*333d2b36SAndroid Build Coastguard Worker targetConfig: TargetConfig{ 739*333d2b36SAndroid Build Coastguard Worker sdkVersion: 33, 740*333d2b36SAndroid Build Coastguard Worker screenDpi: map[bp.ScreenDensity_DensityAlias]bool{ 741*333d2b36SAndroid Build Coastguard Worker bp.ScreenDensity_DENSITY_UNSPECIFIED: true, 742*333d2b36SAndroid Build Coastguard Worker }, 743*333d2b36SAndroid Build Coastguard Worker abis: map[bp.Abi_AbiAlias]int{ 744*333d2b36SAndroid Build Coastguard Worker bp.Abi_X86_64: 0, 745*333d2b36SAndroid Build Coastguard Worker }, 746*333d2b36SAndroid Build Coastguard Worker }, 747*333d2b36SAndroid Build Coastguard Worker expected: SelectionResult{ 748*333d2b36SAndroid Build Coastguard Worker "base", 749*333d2b36SAndroid Build Coastguard Worker []string{ 750*333d2b36SAndroid Build Coastguard Worker "standalones/standalone-x86.x86_64.apex", 751*333d2b36SAndroid Build Coastguard Worker }}, 752*333d2b36SAndroid Build Coastguard Worker }, 753*333d2b36SAndroid Build Coastguard Worker { 754*333d2b36SAndroid Build Coastguard Worker name: "multi-variant multi-target cross-target", 755*333d2b36SAndroid Build Coastguard Worker targetConfig: TargetConfig{ 756*333d2b36SAndroid Build Coastguard Worker sdkVersion: 33, 757*333d2b36SAndroid Build Coastguard Worker screenDpi: map[bp.ScreenDensity_DensityAlias]bool{ 758*333d2b36SAndroid Build Coastguard Worker bp.ScreenDensity_DENSITY_UNSPECIFIED: true, 759*333d2b36SAndroid Build Coastguard Worker }, 760*333d2b36SAndroid Build Coastguard Worker abis: map[bp.Abi_AbiAlias]int{ 761*333d2b36SAndroid Build Coastguard Worker bp.Abi_ARM64_V8A: 0, 762*333d2b36SAndroid Build Coastguard Worker bp.Abi_X86_64: 1, 763*333d2b36SAndroid Build Coastguard Worker }, 764*333d2b36SAndroid Build Coastguard Worker }, 765*333d2b36SAndroid Build Coastguard Worker expected: SelectionResult{ 766*333d2b36SAndroid Build Coastguard Worker "base", 767*333d2b36SAndroid Build Coastguard Worker []string{ 768*333d2b36SAndroid Build Coastguard Worker "standalones/standalone-arm64_v8a.apex", 769*333d2b36SAndroid Build Coastguard Worker }, 770*333d2b36SAndroid Build Coastguard Worker }, 771*333d2b36SAndroid Build Coastguard Worker }, 772*333d2b36SAndroid Build Coastguard Worker }, 773*333d2b36SAndroid Build Coastguard Worker }, 774*333d2b36SAndroid Build Coastguard Worker } 775*333d2b36SAndroid Build Coastguard Worker for _, testCase := range testCases { 776*333d2b36SAndroid Build Coastguard Worker var toc bp.BuildApksResult 777*333d2b36SAndroid Build Coastguard Worker if err := prototext.Unmarshal([]byte(testCase.protoText), &toc); err != nil { 778*333d2b36SAndroid Build Coastguard Worker t.Fatal(err) 779*333d2b36SAndroid Build Coastguard Worker } 780*333d2b36SAndroid Build Coastguard Worker for _, config := range testCase.configs { 781*333d2b36SAndroid Build Coastguard Worker t.Run(config.name, func(t *testing.T) { 782*333d2b36SAndroid Build Coastguard Worker actual := selectApks(&toc, config.targetConfig) 783*333d2b36SAndroid Build Coastguard Worker if !reflect.DeepEqual(config.expected, actual) { 784*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected %v, got %v", config.expected, actual) 785*333d2b36SAndroid Build Coastguard Worker } 786*333d2b36SAndroid Build Coastguard Worker }) 787*333d2b36SAndroid Build Coastguard Worker } 788*333d2b36SAndroid Build Coastguard Worker } 789*333d2b36SAndroid Build Coastguard Worker} 790*333d2b36SAndroid Build Coastguard Worker 791*333d2b36SAndroid Build Coastguard Workertype testZip2ZipWriter struct { 792*333d2b36SAndroid Build Coastguard Worker entries map[string]string 793*333d2b36SAndroid Build Coastguard Worker} 794*333d2b36SAndroid Build Coastguard Worker 795*333d2b36SAndroid Build Coastguard Workerfunc (w testZip2ZipWriter) CopyFrom(file *zip.File, out string) error { 796*333d2b36SAndroid Build Coastguard Worker if x, ok := w.entries[out]; ok { 797*333d2b36SAndroid Build Coastguard Worker return fmt.Errorf("%s and %s both write to %s", x, file.Name, out) 798*333d2b36SAndroid Build Coastguard Worker } 799*333d2b36SAndroid Build Coastguard Worker w.entries[out] = file.Name 800*333d2b36SAndroid Build Coastguard Worker return nil 801*333d2b36SAndroid Build Coastguard Worker} 802*333d2b36SAndroid Build Coastguard Worker 803*333d2b36SAndroid Build Coastguard Workertype testCaseWriteApks struct { 804*333d2b36SAndroid Build Coastguard Worker name string 805*333d2b36SAndroid Build Coastguard Worker moduleName string 806*333d2b36SAndroid Build Coastguard Worker stem string 807*333d2b36SAndroid Build Coastguard Worker partition string 808*333d2b36SAndroid Build Coastguard Worker // what we write from what 809*333d2b36SAndroid Build Coastguard Worker zipEntries map[string]string 810*333d2b36SAndroid Build Coastguard Worker expectedApkcerts []string 811*333d2b36SAndroid Build Coastguard Worker} 812*333d2b36SAndroid Build Coastguard Worker 813*333d2b36SAndroid Build Coastguard Workerfunc TestWriteApks(t *testing.T) { 814*333d2b36SAndroid Build Coastguard Worker testCases := []testCaseWriteApks{ 815*333d2b36SAndroid Build Coastguard Worker { 816*333d2b36SAndroid Build Coastguard Worker name: "splits", 817*333d2b36SAndroid Build Coastguard Worker moduleName: "mybase", 818*333d2b36SAndroid Build Coastguard Worker stem: "Foo", 819*333d2b36SAndroid Build Coastguard Worker partition: "system", 820*333d2b36SAndroid Build Coastguard Worker zipEntries: map[string]string{ 821*333d2b36SAndroid Build Coastguard Worker "Foo.apk": "splits/mybase-master.apk", 822*333d2b36SAndroid Build Coastguard Worker "Foo-xhdpi.apk": "splits/mybase-xhdpi.apk", 823*333d2b36SAndroid Build Coastguard Worker }, 824*333d2b36SAndroid Build Coastguard Worker expectedApkcerts: []string{ 825*333d2b36SAndroid Build Coastguard Worker `name="Foo-xhdpi.apk" certificate="PRESIGNED" private_key="" partition="system"`, 826*333d2b36SAndroid Build Coastguard Worker `name="Foo.apk" certificate="PRESIGNED" private_key="" partition="system"`, 827*333d2b36SAndroid Build Coastguard Worker }, 828*333d2b36SAndroid Build Coastguard Worker }, 829*333d2b36SAndroid Build Coastguard Worker { 830*333d2b36SAndroid Build Coastguard Worker name: "universal", 831*333d2b36SAndroid Build Coastguard Worker moduleName: "base", 832*333d2b36SAndroid Build Coastguard Worker stem: "Bar", 833*333d2b36SAndroid Build Coastguard Worker partition: "product", 834*333d2b36SAndroid Build Coastguard Worker zipEntries: map[string]string{ 835*333d2b36SAndroid Build Coastguard Worker "Bar.apk": "universal.apk", 836*333d2b36SAndroid Build Coastguard Worker }, 837*333d2b36SAndroid Build Coastguard Worker expectedApkcerts: []string{ 838*333d2b36SAndroid Build Coastguard Worker `name="Bar.apk" certificate="PRESIGNED" private_key="" partition="product"`, 839*333d2b36SAndroid Build Coastguard Worker }, 840*333d2b36SAndroid Build Coastguard Worker }, 841*333d2b36SAndroid Build Coastguard Worker } 842*333d2b36SAndroid Build Coastguard Worker for _, testCase := range testCases { 843*333d2b36SAndroid Build Coastguard Worker t.Run(testCase.name, func(t *testing.T) { 844*333d2b36SAndroid Build Coastguard Worker testZipBuf := &bytes.Buffer{} 845*333d2b36SAndroid Build Coastguard Worker testZip := zip.NewWriter(testZipBuf) 846*333d2b36SAndroid Build Coastguard Worker for _, in := range testCase.zipEntries { 847*333d2b36SAndroid Build Coastguard Worker f, _ := testZip.Create(in) 848*333d2b36SAndroid Build Coastguard Worker f.Write([]byte(in)) 849*333d2b36SAndroid Build Coastguard Worker } 850*333d2b36SAndroid Build Coastguard Worker testZip.Close() 851*333d2b36SAndroid Build Coastguard Worker 852*333d2b36SAndroid Build Coastguard Worker zipReader, _ := zip.NewReader(bytes.NewReader(testZipBuf.Bytes()), int64(testZipBuf.Len())) 853*333d2b36SAndroid Build Coastguard Worker 854*333d2b36SAndroid Build Coastguard Worker apkSet := ApkSet{entries: make(map[string]*zip.File)} 855*333d2b36SAndroid Build Coastguard Worker sel := SelectionResult{moduleName: testCase.moduleName} 856*333d2b36SAndroid Build Coastguard Worker for _, f := range zipReader.File { 857*333d2b36SAndroid Build Coastguard Worker apkSet.entries[f.Name] = f 858*333d2b36SAndroid Build Coastguard Worker sel.entries = append(sel.entries, f.Name) 859*333d2b36SAndroid Build Coastguard Worker } 860*333d2b36SAndroid Build Coastguard Worker 861*333d2b36SAndroid Build Coastguard Worker zipWriter := testZip2ZipWriter{make(map[string]string)} 862*333d2b36SAndroid Build Coastguard Worker outWriter := &bytes.Buffer{} 863*333d2b36SAndroid Build Coastguard Worker config := TargetConfig{stem: testCase.stem} 864*333d2b36SAndroid Build Coastguard Worker apkcerts, err := apkSet.writeApks(sel, config, outWriter, zipWriter, testCase.partition) 865*333d2b36SAndroid Build Coastguard Worker if err != nil { 866*333d2b36SAndroid Build Coastguard Worker t.Error(err) 867*333d2b36SAndroid Build Coastguard Worker } 868*333d2b36SAndroid Build Coastguard Worker expectedZipEntries := make(map[string]string) 869*333d2b36SAndroid Build Coastguard Worker for k, v := range testCase.zipEntries { 870*333d2b36SAndroid Build Coastguard Worker if k != testCase.stem+".apk" { 871*333d2b36SAndroid Build Coastguard Worker expectedZipEntries[k] = v 872*333d2b36SAndroid Build Coastguard Worker } 873*333d2b36SAndroid Build Coastguard Worker } 874*333d2b36SAndroid Build Coastguard Worker if !reflect.DeepEqual(expectedZipEntries, zipWriter.entries) { 875*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected zip entries %v, got %v", testCase.zipEntries, zipWriter.entries) 876*333d2b36SAndroid Build Coastguard Worker } 877*333d2b36SAndroid Build Coastguard Worker if !reflect.DeepEqual(testCase.expectedApkcerts, apkcerts) { 878*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected apkcerts %v, got %v", testCase.expectedApkcerts, apkcerts) 879*333d2b36SAndroid Build Coastguard Worker } 880*333d2b36SAndroid Build Coastguard Worker if g, w := outWriter.String(), testCase.zipEntries[testCase.stem+".apk"]; !reflect.DeepEqual(g, w) { 881*333d2b36SAndroid Build Coastguard Worker t.Errorf("expected output file contents %q, got %q", testCase.stem+".apk", outWriter.String()) 882*333d2b36SAndroid Build Coastguard Worker } 883*333d2b36SAndroid Build Coastguard Worker }) 884*333d2b36SAndroid Build Coastguard Worker } 885*333d2b36SAndroid Build Coastguard Worker} 886