1*333d2b36SAndroid Build Coastguard Worker// Copyright 2024 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 apex 16*333d2b36SAndroid Build Coastguard Worker 17*333d2b36SAndroid Build Coastguard Workerimport ( 18*333d2b36SAndroid Build Coastguard Worker "fmt" 19*333d2b36SAndroid Build Coastguard Worker "testing" 20*333d2b36SAndroid Build Coastguard Worker 21*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 22*333d2b36SAndroid Build Coastguard Worker "android/soong/java" 23*333d2b36SAndroid Build Coastguard Worker) 24*333d2b36SAndroid Build Coastguard Worker 25*333d2b36SAndroid Build Coastguard Workervar checkContainerMatch = func(t *testing.T, name string, container string, expected bool, actual bool) { 26*333d2b36SAndroid Build Coastguard Worker errorMessage := fmt.Sprintf("module %s container %s value differ", name, container) 27*333d2b36SAndroid Build Coastguard Worker android.AssertBoolEquals(t, errorMessage, expected, actual) 28*333d2b36SAndroid Build Coastguard Worker} 29*333d2b36SAndroid Build Coastguard Worker 30*333d2b36SAndroid Build Coastguard Workerfunc TestApexDepsContainers(t *testing.T) { 31*333d2b36SAndroid Build Coastguard Worker t.Parallel() 32*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 33*333d2b36SAndroid Build Coastguard Worker prepareForApexTest, 34*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaSdkLibraryFiles, 35*333d2b36SAndroid Build Coastguard Worker java.FixtureWithLastReleaseApis("mybootclasspathlib", "bar"), 36*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 37*333d2b36SAndroid Build Coastguard Worker apex { 38*333d2b36SAndroid Build Coastguard Worker name: "myapex", 39*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 40*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: [ 41*333d2b36SAndroid Build Coastguard Worker "mybootclasspathfragment", 42*333d2b36SAndroid Build Coastguard Worker ], 43*333d2b36SAndroid Build Coastguard Worker updatable: true, 44*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "30", 45*333d2b36SAndroid Build Coastguard Worker } 46*333d2b36SAndroid Build Coastguard Worker apex_key { 47*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 48*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 49*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 50*333d2b36SAndroid Build Coastguard Worker } 51*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 52*333d2b36SAndroid Build Coastguard Worker name: "mybootclasspathfragment", 53*333d2b36SAndroid Build Coastguard Worker contents: [ 54*333d2b36SAndroid Build Coastguard Worker "mybootclasspathlib", 55*333d2b36SAndroid Build Coastguard Worker ], 56*333d2b36SAndroid Build Coastguard Worker apex_available: [ 57*333d2b36SAndroid Build Coastguard Worker "myapex", 58*333d2b36SAndroid Build Coastguard Worker ], 59*333d2b36SAndroid Build Coastguard Worker hidden_api: { 60*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 61*333d2b36SAndroid Build Coastguard Worker }, 62*333d2b36SAndroid Build Coastguard Worker } 63*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 64*333d2b36SAndroid Build Coastguard Worker name: "mybootclasspathlib", 65*333d2b36SAndroid Build Coastguard Worker srcs: [ 66*333d2b36SAndroid Build Coastguard Worker "mybootclasspathlib.java", 67*333d2b36SAndroid Build Coastguard Worker ], 68*333d2b36SAndroid Build Coastguard Worker apex_available: [ 69*333d2b36SAndroid Build Coastguard Worker "myapex", 70*333d2b36SAndroid Build Coastguard Worker ], 71*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 72*333d2b36SAndroid Build Coastguard Worker static_libs: [ 73*333d2b36SAndroid Build Coastguard Worker "food", 74*333d2b36SAndroid Build Coastguard Worker "baz", 75*333d2b36SAndroid Build Coastguard Worker ], 76*333d2b36SAndroid Build Coastguard Worker libs: [ 77*333d2b36SAndroid Build Coastguard Worker "bar.stubs", 78*333d2b36SAndroid Build Coastguard Worker ], 79*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "30", 80*333d2b36SAndroid Build Coastguard Worker sdk_version: "current", 81*333d2b36SAndroid Build Coastguard Worker } 82*333d2b36SAndroid Build Coastguard Worker java_library { 83*333d2b36SAndroid Build Coastguard Worker name: "food", 84*333d2b36SAndroid Build Coastguard Worker srcs:[ 85*333d2b36SAndroid Build Coastguard Worker "A.java", 86*333d2b36SAndroid Build Coastguard Worker ], 87*333d2b36SAndroid Build Coastguard Worker apex_available: [ 88*333d2b36SAndroid Build Coastguard Worker "myapex", 89*333d2b36SAndroid Build Coastguard Worker ], 90*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "30", 91*333d2b36SAndroid Build Coastguard Worker sdk_version: "core_current", 92*333d2b36SAndroid Build Coastguard Worker } 93*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 94*333d2b36SAndroid Build Coastguard Worker name: "bar", 95*333d2b36SAndroid Build Coastguard Worker srcs:[ 96*333d2b36SAndroid Build Coastguard Worker "A.java", 97*333d2b36SAndroid Build Coastguard Worker ], 98*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "30", 99*333d2b36SAndroid Build Coastguard Worker sdk_version: "core_current", 100*333d2b36SAndroid Build Coastguard Worker } 101*333d2b36SAndroid Build Coastguard Worker java_library { 102*333d2b36SAndroid Build Coastguard Worker name: "baz", 103*333d2b36SAndroid Build Coastguard Worker srcs:[ 104*333d2b36SAndroid Build Coastguard Worker "A.java", 105*333d2b36SAndroid Build Coastguard Worker ], 106*333d2b36SAndroid Build Coastguard Worker apex_available: [ 107*333d2b36SAndroid Build Coastguard Worker "//apex_available:platform", 108*333d2b36SAndroid Build Coastguard Worker "myapex", 109*333d2b36SAndroid Build Coastguard Worker ], 110*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "30", 111*333d2b36SAndroid Build Coastguard Worker sdk_version: "core_current", 112*333d2b36SAndroid Build Coastguard Worker } 113*333d2b36SAndroid Build Coastguard Worker `) 114*333d2b36SAndroid Build Coastguard Worker testcases := []struct { 115*333d2b36SAndroid Build Coastguard Worker moduleName string 116*333d2b36SAndroid Build Coastguard Worker variant string 117*333d2b36SAndroid Build Coastguard Worker isSystemContainer bool 118*333d2b36SAndroid Build Coastguard Worker isApexContainer bool 119*333d2b36SAndroid Build Coastguard Worker }{ 120*333d2b36SAndroid Build Coastguard Worker { 121*333d2b36SAndroid Build Coastguard Worker moduleName: "mybootclasspathlib", 122*333d2b36SAndroid Build Coastguard Worker variant: "android_common_myapex", 123*333d2b36SAndroid Build Coastguard Worker isSystemContainer: true, 124*333d2b36SAndroid Build Coastguard Worker isApexContainer: true, 125*333d2b36SAndroid Build Coastguard Worker }, 126*333d2b36SAndroid Build Coastguard Worker { 127*333d2b36SAndroid Build Coastguard Worker moduleName: "mybootclasspathlib.impl", 128*333d2b36SAndroid Build Coastguard Worker variant: "android_common_apex30", 129*333d2b36SAndroid Build Coastguard Worker isSystemContainer: true, 130*333d2b36SAndroid Build Coastguard Worker isApexContainer: true, 131*333d2b36SAndroid Build Coastguard Worker }, 132*333d2b36SAndroid Build Coastguard Worker { 133*333d2b36SAndroid Build Coastguard Worker moduleName: "mybootclasspathlib.stubs", 134*333d2b36SAndroid Build Coastguard Worker variant: "android_common", 135*333d2b36SAndroid Build Coastguard Worker isSystemContainer: true, 136*333d2b36SAndroid Build Coastguard Worker isApexContainer: false, 137*333d2b36SAndroid Build Coastguard Worker }, 138*333d2b36SAndroid Build Coastguard Worker { 139*333d2b36SAndroid Build Coastguard Worker moduleName: "food", 140*333d2b36SAndroid Build Coastguard Worker variant: "android_common_apex30", 141*333d2b36SAndroid Build Coastguard Worker isSystemContainer: true, 142*333d2b36SAndroid Build Coastguard Worker isApexContainer: true, 143*333d2b36SAndroid Build Coastguard Worker }, 144*333d2b36SAndroid Build Coastguard Worker { 145*333d2b36SAndroid Build Coastguard Worker moduleName: "bar", 146*333d2b36SAndroid Build Coastguard Worker variant: "android_common", 147*333d2b36SAndroid Build Coastguard Worker isSystemContainer: true, 148*333d2b36SAndroid Build Coastguard Worker isApexContainer: false, 149*333d2b36SAndroid Build Coastguard Worker }, 150*333d2b36SAndroid Build Coastguard Worker { 151*333d2b36SAndroid Build Coastguard Worker moduleName: "baz", 152*333d2b36SAndroid Build Coastguard Worker variant: "android_common_apex30", 153*333d2b36SAndroid Build Coastguard Worker isSystemContainer: true, 154*333d2b36SAndroid Build Coastguard Worker isApexContainer: true, 155*333d2b36SAndroid Build Coastguard Worker }, 156*333d2b36SAndroid Build Coastguard Worker } 157*333d2b36SAndroid Build Coastguard Worker 158*333d2b36SAndroid Build Coastguard Worker for _, c := range testcases { 159*333d2b36SAndroid Build Coastguard Worker m := result.ModuleForTests(c.moduleName, c.variant) 160*333d2b36SAndroid Build Coastguard Worker containers, _ := android.OtherModuleProvider(result.TestContext.OtherModuleProviderAdaptor(), m.Module(), android.ContainersInfoProvider) 161*333d2b36SAndroid Build Coastguard Worker belongingContainers := containers.BelongingContainers() 162*333d2b36SAndroid Build Coastguard Worker checkContainerMatch(t, c.moduleName, "system", c.isSystemContainer, android.InList(android.SystemContainer, belongingContainers)) 163*333d2b36SAndroid Build Coastguard Worker checkContainerMatch(t, c.moduleName, "apex", c.isApexContainer, android.InList(android.ApexContainer, belongingContainers)) 164*333d2b36SAndroid Build Coastguard Worker } 165*333d2b36SAndroid Build Coastguard Worker} 166*333d2b36SAndroid Build Coastguard Worker 167*333d2b36SAndroid Build Coastguard Workerfunc TestNonUpdatableApexDepsContainers(t *testing.T) { 168*333d2b36SAndroid Build Coastguard Worker t.Parallel() 169*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 170*333d2b36SAndroid Build Coastguard Worker prepareForApexTest, 171*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaSdkLibraryFiles, 172*333d2b36SAndroid Build Coastguard Worker java.FixtureWithLastReleaseApis("mybootclasspathlib", "bar"), 173*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 174*333d2b36SAndroid Build Coastguard Worker apex { 175*333d2b36SAndroid Build Coastguard Worker name: "myapex", 176*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 177*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: [ 178*333d2b36SAndroid Build Coastguard Worker "mybootclasspathfragment", 179*333d2b36SAndroid Build Coastguard Worker ], 180*333d2b36SAndroid Build Coastguard Worker updatable: false, 181*333d2b36SAndroid Build Coastguard Worker } 182*333d2b36SAndroid Build Coastguard Worker apex_key { 183*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 184*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 185*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 186*333d2b36SAndroid Build Coastguard Worker } 187*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 188*333d2b36SAndroid Build Coastguard Worker name: "mybootclasspathfragment", 189*333d2b36SAndroid Build Coastguard Worker contents: [ 190*333d2b36SAndroid Build Coastguard Worker "mybootclasspathlib", 191*333d2b36SAndroid Build Coastguard Worker ], 192*333d2b36SAndroid Build Coastguard Worker apex_available: [ 193*333d2b36SAndroid Build Coastguard Worker "myapex", 194*333d2b36SAndroid Build Coastguard Worker ], 195*333d2b36SAndroid Build Coastguard Worker hidden_api: { 196*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 197*333d2b36SAndroid Build Coastguard Worker }, 198*333d2b36SAndroid Build Coastguard Worker } 199*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 200*333d2b36SAndroid Build Coastguard Worker name: "mybootclasspathlib", 201*333d2b36SAndroid Build Coastguard Worker srcs: [ 202*333d2b36SAndroid Build Coastguard Worker "mybootclasspathlib.java", 203*333d2b36SAndroid Build Coastguard Worker ], 204*333d2b36SAndroid Build Coastguard Worker apex_available: [ 205*333d2b36SAndroid Build Coastguard Worker "myapex", 206*333d2b36SAndroid Build Coastguard Worker ], 207*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 208*333d2b36SAndroid Build Coastguard Worker static_libs: [ 209*333d2b36SAndroid Build Coastguard Worker "food", 210*333d2b36SAndroid Build Coastguard Worker ], 211*333d2b36SAndroid Build Coastguard Worker libs: [ 212*333d2b36SAndroid Build Coastguard Worker "bar.stubs", 213*333d2b36SAndroid Build Coastguard Worker ], 214*333d2b36SAndroid Build Coastguard Worker sdk_version: "current", 215*333d2b36SAndroid Build Coastguard Worker } 216*333d2b36SAndroid Build Coastguard Worker java_library { 217*333d2b36SAndroid Build Coastguard Worker name: "food", 218*333d2b36SAndroid Build Coastguard Worker srcs:[ 219*333d2b36SAndroid Build Coastguard Worker "A.java", 220*333d2b36SAndroid Build Coastguard Worker ], 221*333d2b36SAndroid Build Coastguard Worker apex_available: [ 222*333d2b36SAndroid Build Coastguard Worker "myapex", 223*333d2b36SAndroid Build Coastguard Worker ], 224*333d2b36SAndroid Build Coastguard Worker sdk_version: "core_current", 225*333d2b36SAndroid Build Coastguard Worker } 226*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 227*333d2b36SAndroid Build Coastguard Worker name: "bar", 228*333d2b36SAndroid Build Coastguard Worker srcs:[ 229*333d2b36SAndroid Build Coastguard Worker "A.java", 230*333d2b36SAndroid Build Coastguard Worker ], 231*333d2b36SAndroid Build Coastguard Worker sdk_version: "none", 232*333d2b36SAndroid Build Coastguard Worker system_modules: "none", 233*333d2b36SAndroid Build Coastguard Worker } 234*333d2b36SAndroid Build Coastguard Worker `) 235*333d2b36SAndroid Build Coastguard Worker testcases := []struct { 236*333d2b36SAndroid Build Coastguard Worker moduleName string 237*333d2b36SAndroid Build Coastguard Worker variant string 238*333d2b36SAndroid Build Coastguard Worker isSystemContainer bool 239*333d2b36SAndroid Build Coastguard Worker isApexContainer bool 240*333d2b36SAndroid Build Coastguard Worker }{ 241*333d2b36SAndroid Build Coastguard Worker { 242*333d2b36SAndroid Build Coastguard Worker moduleName: "mybootclasspathlib", 243*333d2b36SAndroid Build Coastguard Worker variant: "android_common_myapex", 244*333d2b36SAndroid Build Coastguard Worker isSystemContainer: true, 245*333d2b36SAndroid Build Coastguard Worker isApexContainer: true, 246*333d2b36SAndroid Build Coastguard Worker }, 247*333d2b36SAndroid Build Coastguard Worker { 248*333d2b36SAndroid Build Coastguard Worker moduleName: "mybootclasspathlib.impl", 249*333d2b36SAndroid Build Coastguard Worker variant: "android_common_apex10000", 250*333d2b36SAndroid Build Coastguard Worker isSystemContainer: true, 251*333d2b36SAndroid Build Coastguard Worker isApexContainer: true, 252*333d2b36SAndroid Build Coastguard Worker }, 253*333d2b36SAndroid Build Coastguard Worker { 254*333d2b36SAndroid Build Coastguard Worker moduleName: "mybootclasspathlib.stubs", 255*333d2b36SAndroid Build Coastguard Worker variant: "android_common", 256*333d2b36SAndroid Build Coastguard Worker isSystemContainer: true, 257*333d2b36SAndroid Build Coastguard Worker isApexContainer: false, 258*333d2b36SAndroid Build Coastguard Worker }, 259*333d2b36SAndroid Build Coastguard Worker { 260*333d2b36SAndroid Build Coastguard Worker moduleName: "food", 261*333d2b36SAndroid Build Coastguard Worker variant: "android_common_apex10000", 262*333d2b36SAndroid Build Coastguard Worker isSystemContainer: true, 263*333d2b36SAndroid Build Coastguard Worker isApexContainer: true, 264*333d2b36SAndroid Build Coastguard Worker }, 265*333d2b36SAndroid Build Coastguard Worker { 266*333d2b36SAndroid Build Coastguard Worker moduleName: "bar", 267*333d2b36SAndroid Build Coastguard Worker variant: "android_common", 268*333d2b36SAndroid Build Coastguard Worker isSystemContainer: true, 269*333d2b36SAndroid Build Coastguard Worker isApexContainer: false, 270*333d2b36SAndroid Build Coastguard Worker }, 271*333d2b36SAndroid Build Coastguard Worker } 272*333d2b36SAndroid Build Coastguard Worker 273*333d2b36SAndroid Build Coastguard Worker for _, c := range testcases { 274*333d2b36SAndroid Build Coastguard Worker m := result.ModuleForTests(c.moduleName, c.variant) 275*333d2b36SAndroid Build Coastguard Worker containers, _ := android.OtherModuleProvider(result.TestContext.OtherModuleProviderAdaptor(), m.Module(), android.ContainersInfoProvider) 276*333d2b36SAndroid Build Coastguard Worker belongingContainers := containers.BelongingContainers() 277*333d2b36SAndroid Build Coastguard Worker checkContainerMatch(t, c.moduleName, "system", c.isSystemContainer, android.InList(android.SystemContainer, belongingContainers)) 278*333d2b36SAndroid Build Coastguard Worker checkContainerMatch(t, c.moduleName, "apex", c.isApexContainer, android.InList(android.ApexContainer, belongingContainers)) 279*333d2b36SAndroid Build Coastguard Worker } 280*333d2b36SAndroid Build Coastguard Worker} 281*333d2b36SAndroid Build Coastguard Worker 282*333d2b36SAndroid Build Coastguard Workerfunc TestUpdatableAndNonUpdatableApexesIdenticalMinSdkVersion(t *testing.T) { 283*333d2b36SAndroid Build Coastguard Worker t.Parallel() 284*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 285*333d2b36SAndroid Build Coastguard Worker prepareForApexTest, 286*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaSdkLibraryFiles, 287*333d2b36SAndroid Build Coastguard Worker android.FixtureMergeMockFs(android.MockFS{ 288*333d2b36SAndroid Build Coastguard Worker "system/sepolicy/apex/myapex_non_updatable-file_contexts": nil, 289*333d2b36SAndroid Build Coastguard Worker "system/sepolicy/apex/myapex_updatable-file_contexts": nil, 290*333d2b36SAndroid Build Coastguard Worker }), 291*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 292*333d2b36SAndroid Build Coastguard Worker apex { 293*333d2b36SAndroid Build Coastguard Worker name: "myapex_non_updatable", 294*333d2b36SAndroid Build Coastguard Worker key: "myapex_non_updatable.key", 295*333d2b36SAndroid Build Coastguard Worker java_libs: [ 296*333d2b36SAndroid Build Coastguard Worker "foo", 297*333d2b36SAndroid Build Coastguard Worker ], 298*333d2b36SAndroid Build Coastguard Worker updatable: false, 299*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "30", 300*333d2b36SAndroid Build Coastguard Worker } 301*333d2b36SAndroid Build Coastguard Worker apex_key { 302*333d2b36SAndroid Build Coastguard Worker name: "myapex_non_updatable.key", 303*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 304*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 305*333d2b36SAndroid Build Coastguard Worker } 306*333d2b36SAndroid Build Coastguard Worker 307*333d2b36SAndroid Build Coastguard Worker apex { 308*333d2b36SAndroid Build Coastguard Worker name: "myapex_updatable", 309*333d2b36SAndroid Build Coastguard Worker key: "myapex_updatable.key", 310*333d2b36SAndroid Build Coastguard Worker java_libs: [ 311*333d2b36SAndroid Build Coastguard Worker "foo", 312*333d2b36SAndroid Build Coastguard Worker ], 313*333d2b36SAndroid Build Coastguard Worker updatable: true, 314*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "30", 315*333d2b36SAndroid Build Coastguard Worker } 316*333d2b36SAndroid Build Coastguard Worker apex_key { 317*333d2b36SAndroid Build Coastguard Worker name: "myapex_updatable.key", 318*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 319*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 320*333d2b36SAndroid Build Coastguard Worker } 321*333d2b36SAndroid Build Coastguard Worker 322*333d2b36SAndroid Build Coastguard Worker java_library { 323*333d2b36SAndroid Build Coastguard Worker name: "foo", 324*333d2b36SAndroid Build Coastguard Worker srcs:[ 325*333d2b36SAndroid Build Coastguard Worker "A.java", 326*333d2b36SAndroid Build Coastguard Worker ], 327*333d2b36SAndroid Build Coastguard Worker apex_available: [ 328*333d2b36SAndroid Build Coastguard Worker "myapex_non_updatable", 329*333d2b36SAndroid Build Coastguard Worker "myapex_updatable", 330*333d2b36SAndroid Build Coastguard Worker ], 331*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "30", 332*333d2b36SAndroid Build Coastguard Worker sdk_version: "current", 333*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 334*333d2b36SAndroid Build Coastguard Worker } 335*333d2b36SAndroid Build Coastguard Worker `) 336*333d2b36SAndroid Build Coastguard Worker 337*333d2b36SAndroid Build Coastguard Worker fooApexVariant := result.ModuleForTests("foo", "android_common_apex30") 338*333d2b36SAndroid Build Coastguard Worker containers, _ := android.OtherModuleProvider(result.TestContext.OtherModuleProviderAdaptor(), fooApexVariant.Module(), android.ContainersInfoProvider) 339*333d2b36SAndroid Build Coastguard Worker belongingContainers := containers.BelongingContainers() 340*333d2b36SAndroid Build Coastguard Worker checkContainerMatch(t, "foo", "system", true, android.InList(android.SystemContainer, belongingContainers)) 341*333d2b36SAndroid Build Coastguard Worker checkContainerMatch(t, "foo", "apex", true, android.InList(android.ApexContainer, belongingContainers)) 342*333d2b36SAndroid Build Coastguard Worker} 343