1*333d2b36SAndroid Build Coastguard Worker// Copyright (C) 2021 The Android Open Source Project 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 "path" 20*333d2b36SAndroid Build Coastguard Worker "sort" 21*333d2b36SAndroid Build Coastguard Worker "strings" 22*333d2b36SAndroid Build Coastguard Worker "testing" 23*333d2b36SAndroid Build Coastguard Worker 24*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 25*333d2b36SAndroid Build Coastguard Worker "android/soong/dexpreopt" 26*333d2b36SAndroid Build Coastguard Worker "android/soong/java" 27*333d2b36SAndroid Build Coastguard Worker 28*333d2b36SAndroid Build Coastguard Worker "github.com/google/blueprint/proptools" 29*333d2b36SAndroid Build Coastguard Worker) 30*333d2b36SAndroid Build Coastguard Worker 31*333d2b36SAndroid Build Coastguard Worker// Contains tests for bootclasspath_fragment logic from java/bootclasspath_fragment.go as the ART 32*333d2b36SAndroid Build Coastguard Worker// bootclasspath_fragment requires modules from the ART apex. 33*333d2b36SAndroid Build Coastguard Worker 34*333d2b36SAndroid Build Coastguard Workervar prepareForTestWithBootclasspathFragment = android.GroupFixturePreparers( 35*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithDexpreopt, 36*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithApexBuildComponents, 37*333d2b36SAndroid Build Coastguard Worker) 38*333d2b36SAndroid Build Coastguard Worker 39*333d2b36SAndroid Build Coastguard Worker// Some additional files needed for the art apex. 40*333d2b36SAndroid Build Coastguard Workervar prepareForTestWithArtApex = android.GroupFixturePreparers( 41*333d2b36SAndroid Build Coastguard Worker android.FixtureMergeMockFs(android.MockFS{ 42*333d2b36SAndroid Build Coastguard Worker "com.android.art.avbpubkey": nil, 43*333d2b36SAndroid Build Coastguard Worker "com.android.art.pem": nil, 44*333d2b36SAndroid Build Coastguard Worker "system/sepolicy/apex/com.android.art-file_contexts": nil, 45*333d2b36SAndroid Build Coastguard Worker }), 46*333d2b36SAndroid Build Coastguard Worker dexpreopt.FixtureSetBootImageProfiles("art/build/boot/boot-image-profile.txt"), 47*333d2b36SAndroid Build Coastguard Worker) 48*333d2b36SAndroid Build Coastguard Worker 49*333d2b36SAndroid Build Coastguard Workerfunc TestBootclasspathFragments_FragmentDependency(t *testing.T) { 50*333d2b36SAndroid Build Coastguard Worker t.Parallel() 51*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 52*333d2b36SAndroid Build Coastguard Worker prepareForTestWithBootclasspathFragment, 53*333d2b36SAndroid Build Coastguard Worker // Configure some libraries in the art bootclasspath_fragment and platform_bootclasspath. 54*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureBootJars("com.android.art:baz", "com.android.art:quuz"), 55*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureApexBootJars("someapex:foo", "someapex:bar"), 56*333d2b36SAndroid Build Coastguard Worker prepareForTestWithArtApex, 57*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"), 58*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaSdkLibraryFiles, 59*333d2b36SAndroid Build Coastguard Worker java.FixtureWithLastReleaseApis("foo", "baz"), 60*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 61*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 62*333d2b36SAndroid Build Coastguard Worker name: "foo", 63*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 64*333d2b36SAndroid Build Coastguard Worker shared_library: false, 65*333d2b36SAndroid Build Coastguard Worker public: { 66*333d2b36SAndroid Build Coastguard Worker enabled: true, 67*333d2b36SAndroid Build Coastguard Worker }, 68*333d2b36SAndroid Build Coastguard Worker system: { 69*333d2b36SAndroid Build Coastguard Worker enabled: true, 70*333d2b36SAndroid Build Coastguard Worker }, 71*333d2b36SAndroid Build Coastguard Worker } 72*333d2b36SAndroid Build Coastguard Worker 73*333d2b36SAndroid Build Coastguard Worker java_library { 74*333d2b36SAndroid Build Coastguard Worker name: "bar", 75*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 76*333d2b36SAndroid Build Coastguard Worker installable: true, 77*333d2b36SAndroid Build Coastguard Worker } 78*333d2b36SAndroid Build Coastguard Worker 79*333d2b36SAndroid Build Coastguard Worker apex { 80*333d2b36SAndroid Build Coastguard Worker name: "com.android.art", 81*333d2b36SAndroid Build Coastguard Worker key: "com.android.art.key", 82*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: ["art-bootclasspath-fragment"], 83*333d2b36SAndroid Build Coastguard Worker updatable: false, 84*333d2b36SAndroid Build Coastguard Worker } 85*333d2b36SAndroid Build Coastguard Worker 86*333d2b36SAndroid Build Coastguard Worker apex_key { 87*333d2b36SAndroid Build Coastguard Worker name: "com.android.art.key", 88*333d2b36SAndroid Build Coastguard Worker public_key: "com.android.art.avbpubkey", 89*333d2b36SAndroid Build Coastguard Worker private_key: "com.android.art.pem", 90*333d2b36SAndroid Build Coastguard Worker } 91*333d2b36SAndroid Build Coastguard Worker 92*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 93*333d2b36SAndroid Build Coastguard Worker name: "baz", 94*333d2b36SAndroid Build Coastguard Worker apex_available: [ 95*333d2b36SAndroid Build Coastguard Worker "com.android.art", 96*333d2b36SAndroid Build Coastguard Worker ], 97*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 98*333d2b36SAndroid Build Coastguard Worker shared_library: false, 99*333d2b36SAndroid Build Coastguard Worker public: { 100*333d2b36SAndroid Build Coastguard Worker enabled: true, 101*333d2b36SAndroid Build Coastguard Worker }, 102*333d2b36SAndroid Build Coastguard Worker system: { 103*333d2b36SAndroid Build Coastguard Worker enabled: true, 104*333d2b36SAndroid Build Coastguard Worker }, 105*333d2b36SAndroid Build Coastguard Worker test: { 106*333d2b36SAndroid Build Coastguard Worker enabled: true, 107*333d2b36SAndroid Build Coastguard Worker }, 108*333d2b36SAndroid Build Coastguard Worker sdk_version: "core_current", 109*333d2b36SAndroid Build Coastguard Worker } 110*333d2b36SAndroid Build Coastguard Worker 111*333d2b36SAndroid Build Coastguard Worker java_library { 112*333d2b36SAndroid Build Coastguard Worker name: "quuz", 113*333d2b36SAndroid Build Coastguard Worker apex_available: [ 114*333d2b36SAndroid Build Coastguard Worker "com.android.art", 115*333d2b36SAndroid Build Coastguard Worker ], 116*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 117*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 118*333d2b36SAndroid Build Coastguard Worker } 119*333d2b36SAndroid Build Coastguard Worker 120*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 121*333d2b36SAndroid Build Coastguard Worker name: "art-bootclasspath-fragment", 122*333d2b36SAndroid Build Coastguard Worker image_name: "art", 123*333d2b36SAndroid Build Coastguard Worker // Must match the "com.android.art:" entries passed to FixtureConfigureBootJars above. 124*333d2b36SAndroid Build Coastguard Worker contents: ["baz", "quuz"], 125*333d2b36SAndroid Build Coastguard Worker apex_available: [ 126*333d2b36SAndroid Build Coastguard Worker "com.android.art", 127*333d2b36SAndroid Build Coastguard Worker ], 128*333d2b36SAndroid Build Coastguard Worker hidden_api: { 129*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 130*333d2b36SAndroid Build Coastguard Worker }, 131*333d2b36SAndroid Build Coastguard Worker } 132*333d2b36SAndroid Build Coastguard Worker 133*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 134*333d2b36SAndroid Build Coastguard Worker name: "other-bootclasspath-fragment", 135*333d2b36SAndroid Build Coastguard Worker contents: ["foo", "bar"], 136*333d2b36SAndroid Build Coastguard Worker fragments: [ 137*333d2b36SAndroid Build Coastguard Worker { 138*333d2b36SAndroid Build Coastguard Worker apex: "com.android.art", 139*333d2b36SAndroid Build Coastguard Worker module: "art-bootclasspath-fragment", 140*333d2b36SAndroid Build Coastguard Worker }, 141*333d2b36SAndroid Build Coastguard Worker ], 142*333d2b36SAndroid Build Coastguard Worker hidden_api: { 143*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 144*333d2b36SAndroid Build Coastguard Worker }, 145*333d2b36SAndroid Build Coastguard Worker } 146*333d2b36SAndroid Build Coastguard Worker`, 147*333d2b36SAndroid Build Coastguard Worker ) 148*333d2b36SAndroid Build Coastguard Worker 149*333d2b36SAndroid Build Coastguard Worker checkAPIScopeStubs := func(message string, info java.HiddenAPIInfo, apiScope *java.HiddenAPIScope, expectedPaths ...string) { 150*333d2b36SAndroid Build Coastguard Worker t.Helper() 151*333d2b36SAndroid Build Coastguard Worker paths := info.TransitiveStubDexJarsByScope.StubDexJarsForScope(apiScope) 152*333d2b36SAndroid Build Coastguard Worker android.AssertPathsRelativeToTopEquals(t, fmt.Sprintf("%s %s", message, apiScope), expectedPaths, paths) 153*333d2b36SAndroid Build Coastguard Worker } 154*333d2b36SAndroid Build Coastguard Worker 155*333d2b36SAndroid Build Coastguard Worker // Check stub dex paths exported by art. 156*333d2b36SAndroid Build Coastguard Worker artFragment := result.Module("art-bootclasspath-fragment", "android_common") 157*333d2b36SAndroid Build Coastguard Worker artInfo, _ := android.OtherModuleProvider(result, artFragment, java.HiddenAPIInfoProvider) 158*333d2b36SAndroid Build Coastguard Worker 159*333d2b36SAndroid Build Coastguard Worker bazPublicStubs := "out/soong/.intermediates/baz.stubs.exportable/android_common/dex/baz.stubs.exportable.jar" 160*333d2b36SAndroid Build Coastguard Worker bazSystemStubs := "out/soong/.intermediates/baz.stubs.exportable.system/android_common/dex/baz.stubs.exportable.system.jar" 161*333d2b36SAndroid Build Coastguard Worker bazTestStubs := "out/soong/.intermediates/baz.stubs.exportable.test/android_common/dex/baz.stubs.exportable.test.jar" 162*333d2b36SAndroid Build Coastguard Worker 163*333d2b36SAndroid Build Coastguard Worker checkAPIScopeStubs("art", artInfo, java.PublicHiddenAPIScope, bazPublicStubs) 164*333d2b36SAndroid Build Coastguard Worker checkAPIScopeStubs("art", artInfo, java.SystemHiddenAPIScope, bazSystemStubs) 165*333d2b36SAndroid Build Coastguard Worker checkAPIScopeStubs("art", artInfo, java.TestHiddenAPIScope, bazTestStubs) 166*333d2b36SAndroid Build Coastguard Worker checkAPIScopeStubs("art", artInfo, java.CorePlatformHiddenAPIScope) 167*333d2b36SAndroid Build Coastguard Worker 168*333d2b36SAndroid Build Coastguard Worker // Check stub dex paths exported by other. 169*333d2b36SAndroid Build Coastguard Worker otherFragment := result.Module("other-bootclasspath-fragment", "android_common") 170*333d2b36SAndroid Build Coastguard Worker otherInfo, _ := android.OtherModuleProvider(result, otherFragment, java.HiddenAPIInfoProvider) 171*333d2b36SAndroid Build Coastguard Worker 172*333d2b36SAndroid Build Coastguard Worker fooPublicStubs := "out/soong/.intermediates/foo.stubs.exportable/android_common/dex/foo.stubs.exportable.jar" 173*333d2b36SAndroid Build Coastguard Worker fooSystemStubs := "out/soong/.intermediates/foo.stubs.exportable.system/android_common/dex/foo.stubs.exportable.system.jar" 174*333d2b36SAndroid Build Coastguard Worker 175*333d2b36SAndroid Build Coastguard Worker checkAPIScopeStubs("other", otherInfo, java.PublicHiddenAPIScope, bazPublicStubs, fooPublicStubs) 176*333d2b36SAndroid Build Coastguard Worker checkAPIScopeStubs("other", otherInfo, java.SystemHiddenAPIScope, bazSystemStubs, fooSystemStubs) 177*333d2b36SAndroid Build Coastguard Worker checkAPIScopeStubs("other", otherInfo, java.TestHiddenAPIScope, bazTestStubs, fooSystemStubs) 178*333d2b36SAndroid Build Coastguard Worker checkAPIScopeStubs("other", otherInfo, java.CorePlatformHiddenAPIScope) 179*333d2b36SAndroid Build Coastguard Worker} 180*333d2b36SAndroid Build Coastguard Worker 181*333d2b36SAndroid Build Coastguard Workerfunc TestBootclasspathFragmentInArtApex(t *testing.T) { 182*333d2b36SAndroid Build Coastguard Worker t.Parallel() 183*333d2b36SAndroid Build Coastguard Worker commonPreparer := android.GroupFixturePreparers( 184*333d2b36SAndroid Build Coastguard Worker prepareForTestWithBootclasspathFragment, 185*333d2b36SAndroid Build Coastguard Worker prepareForTestWithArtApex, 186*333d2b36SAndroid Build Coastguard Worker 187*333d2b36SAndroid Build Coastguard Worker android.FixtureWithRootAndroidBp(` 188*333d2b36SAndroid Build Coastguard Worker apex { 189*333d2b36SAndroid Build Coastguard Worker name: "com.android.art", 190*333d2b36SAndroid Build Coastguard Worker key: "com.android.art.key", 191*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: [ 192*333d2b36SAndroid Build Coastguard Worker "art-bootclasspath-fragment", 193*333d2b36SAndroid Build Coastguard Worker ], 194*333d2b36SAndroid Build Coastguard Worker // bar (like foo) should be transitively included in this apex because it is part of the 195*333d2b36SAndroid Build Coastguard Worker // art-bootclasspath-fragment bootclasspath_fragment. 196*333d2b36SAndroid Build Coastguard Worker updatable: false, 197*333d2b36SAndroid Build Coastguard Worker } 198*333d2b36SAndroid Build Coastguard Worker 199*333d2b36SAndroid Build Coastguard Worker override_apex { 200*333d2b36SAndroid Build Coastguard Worker name: "com.mycompany.android.art", 201*333d2b36SAndroid Build Coastguard Worker base: "com.android.art", 202*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "33", // mycompany overrides the min_sdk_version 203*333d2b36SAndroid Build Coastguard Worker } 204*333d2b36SAndroid Build Coastguard Worker 205*333d2b36SAndroid Build Coastguard Worker apex_key { 206*333d2b36SAndroid Build Coastguard Worker name: "com.android.art.key", 207*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 208*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 209*333d2b36SAndroid Build Coastguard Worker } 210*333d2b36SAndroid Build Coastguard Worker `), 211*333d2b36SAndroid Build Coastguard Worker ) 212*333d2b36SAndroid Build Coastguard Worker 213*333d2b36SAndroid Build Coastguard Worker contentsInsert := func(contents []string) string { 214*333d2b36SAndroid Build Coastguard Worker insert := "" 215*333d2b36SAndroid Build Coastguard Worker if contents != nil { 216*333d2b36SAndroid Build Coastguard Worker insert = fmt.Sprintf(`contents: ["%s"],`, strings.Join(contents, `", "`)) 217*333d2b36SAndroid Build Coastguard Worker } 218*333d2b36SAndroid Build Coastguard Worker return insert 219*333d2b36SAndroid Build Coastguard Worker } 220*333d2b36SAndroid Build Coastguard Worker 221*333d2b36SAndroid Build Coastguard Worker addSource := func(contents ...string) android.FixturePreparer { 222*333d2b36SAndroid Build Coastguard Worker text := fmt.Sprintf(` 223*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 224*333d2b36SAndroid Build Coastguard Worker name: "art-bootclasspath-fragment", 225*333d2b36SAndroid Build Coastguard Worker image_name: "art", 226*333d2b36SAndroid Build Coastguard Worker %s 227*333d2b36SAndroid Build Coastguard Worker apex_available: [ 228*333d2b36SAndroid Build Coastguard Worker "com.android.art", 229*333d2b36SAndroid Build Coastguard Worker ], 230*333d2b36SAndroid Build Coastguard Worker hidden_api: { 231*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 232*333d2b36SAndroid Build Coastguard Worker }, 233*333d2b36SAndroid Build Coastguard Worker } 234*333d2b36SAndroid Build Coastguard Worker `, contentsInsert(contents)) 235*333d2b36SAndroid Build Coastguard Worker 236*333d2b36SAndroid Build Coastguard Worker for _, content := range contents { 237*333d2b36SAndroid Build Coastguard Worker text += fmt.Sprintf(` 238*333d2b36SAndroid Build Coastguard Worker java_library { 239*333d2b36SAndroid Build Coastguard Worker name: "%[1]s", 240*333d2b36SAndroid Build Coastguard Worker srcs: ["%[1]s.java"], 241*333d2b36SAndroid Build Coastguard Worker installable: true, 242*333d2b36SAndroid Build Coastguard Worker apex_available: [ 243*333d2b36SAndroid Build Coastguard Worker "com.android.art", 244*333d2b36SAndroid Build Coastguard Worker ], 245*333d2b36SAndroid Build Coastguard Worker } 246*333d2b36SAndroid Build Coastguard Worker `, content) 247*333d2b36SAndroid Build Coastguard Worker } 248*333d2b36SAndroid Build Coastguard Worker 249*333d2b36SAndroid Build Coastguard Worker return android.FixtureAddTextFile("art/build/boot/Android.bp", text) 250*333d2b36SAndroid Build Coastguard Worker } 251*333d2b36SAndroid Build Coastguard Worker 252*333d2b36SAndroid Build Coastguard Worker addPrebuilt := func(prefer bool, contents ...string) android.FixturePreparer { 253*333d2b36SAndroid Build Coastguard Worker text := fmt.Sprintf(` 254*333d2b36SAndroid Build Coastguard Worker prebuilt_apex { 255*333d2b36SAndroid Build Coastguard Worker name: "com.android.art", 256*333d2b36SAndroid Build Coastguard Worker arch: { 257*333d2b36SAndroid Build Coastguard Worker arm64: { 258*333d2b36SAndroid Build Coastguard Worker src: "com.android.art-arm64.apex", 259*333d2b36SAndroid Build Coastguard Worker }, 260*333d2b36SAndroid Build Coastguard Worker arm: { 261*333d2b36SAndroid Build Coastguard Worker src: "com.android.art-arm.apex", 262*333d2b36SAndroid Build Coastguard Worker }, 263*333d2b36SAndroid Build Coastguard Worker }, 264*333d2b36SAndroid Build Coastguard Worker exported_bootclasspath_fragments: ["art-bootclasspath-fragment"], 265*333d2b36SAndroid Build Coastguard Worker } 266*333d2b36SAndroid Build Coastguard Worker 267*333d2b36SAndroid Build Coastguard Worker prebuilt_bootclasspath_fragment { 268*333d2b36SAndroid Build Coastguard Worker name: "art-bootclasspath-fragment", 269*333d2b36SAndroid Build Coastguard Worker image_name: "art", 270*333d2b36SAndroid Build Coastguard Worker %s 271*333d2b36SAndroid Build Coastguard Worker prefer: %t, 272*333d2b36SAndroid Build Coastguard Worker apex_available: [ 273*333d2b36SAndroid Build Coastguard Worker "com.android.art", 274*333d2b36SAndroid Build Coastguard Worker ], 275*333d2b36SAndroid Build Coastguard Worker hidden_api: { 276*333d2b36SAndroid Build Coastguard Worker annotation_flags: "hiddenapi/annotation-flags.csv", 277*333d2b36SAndroid Build Coastguard Worker metadata: "hiddenapi/metadata.csv", 278*333d2b36SAndroid Build Coastguard Worker index: "hiddenapi/index.csv", 279*333d2b36SAndroid Build Coastguard Worker stub_flags: "hiddenapi/stub-flags.csv", 280*333d2b36SAndroid Build Coastguard Worker all_flags: "hiddenapi/all-flags.csv", 281*333d2b36SAndroid Build Coastguard Worker }, 282*333d2b36SAndroid Build Coastguard Worker } 283*333d2b36SAndroid Build Coastguard Worker `, contentsInsert(contents), prefer) 284*333d2b36SAndroid Build Coastguard Worker 285*333d2b36SAndroid Build Coastguard Worker for _, content := range contents { 286*333d2b36SAndroid Build Coastguard Worker text += fmt.Sprintf(` 287*333d2b36SAndroid Build Coastguard Worker java_import { 288*333d2b36SAndroid Build Coastguard Worker name: "%[1]s", 289*333d2b36SAndroid Build Coastguard Worker prefer: %[2]t, 290*333d2b36SAndroid Build Coastguard Worker jars: ["%[1]s.jar"], 291*333d2b36SAndroid Build Coastguard Worker apex_available: [ 292*333d2b36SAndroid Build Coastguard Worker "com.android.art", 293*333d2b36SAndroid Build Coastguard Worker ], 294*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 295*333d2b36SAndroid Build Coastguard Worker } 296*333d2b36SAndroid Build Coastguard Worker `, content, prefer) 297*333d2b36SAndroid Build Coastguard Worker } 298*333d2b36SAndroid Build Coastguard Worker 299*333d2b36SAndroid Build Coastguard Worker return android.FixtureAddTextFile("prebuilts/module_sdk/art/Android.bp", text) 300*333d2b36SAndroid Build Coastguard Worker } 301*333d2b36SAndroid Build Coastguard Worker 302*333d2b36SAndroid Build Coastguard Worker t.Run("boot image files from source", func(t *testing.T) { 303*333d2b36SAndroid Build Coastguard Worker t.Parallel() 304*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 305*333d2b36SAndroid Build Coastguard Worker commonPreparer, 306*333d2b36SAndroid Build Coastguard Worker 307*333d2b36SAndroid Build Coastguard Worker // Configure some libraries in the art bootclasspath_fragment that match the source 308*333d2b36SAndroid Build Coastguard Worker // bootclasspath_fragment's contents property. 309*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureBootJars("com.android.art:foo", "com.android.art:bar"), 310*333d2b36SAndroid Build Coastguard Worker dexpreopt.FixtureSetTestOnlyArtBootImageJars("com.android.art:foo", "com.android.art:bar"), 311*333d2b36SAndroid Build Coastguard Worker addSource("foo", "bar"), 312*333d2b36SAndroid Build Coastguard Worker java.FixtureSetBootImageInstallDirOnDevice("art", "apex/com.android.art/javalib"), 313*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 314*333d2b36SAndroid Build Coastguard Worker 315*333d2b36SAndroid Build Coastguard Worker ensureExactContents(t, result.TestContext, "com.android.art", "android_common_com.android.art", []string{ 316*333d2b36SAndroid Build Coastguard Worker "etc/boot-image.prof", 317*333d2b36SAndroid Build Coastguard Worker "etc/classpaths/bootclasspath.pb", 318*333d2b36SAndroid Build Coastguard Worker "javalib/bar.jar", 319*333d2b36SAndroid Build Coastguard Worker "javalib/foo.jar", 320*333d2b36SAndroid Build Coastguard Worker }) 321*333d2b36SAndroid Build Coastguard Worker 322*333d2b36SAndroid Build Coastguard Worker java.CheckModuleDependencies(t, result.TestContext, "com.android.art", "android_common_com.android.art", []string{ 323*333d2b36SAndroid Build Coastguard Worker `art-bootclasspath-fragment`, 324*333d2b36SAndroid Build Coastguard Worker `com.android.art.key`, 325*333d2b36SAndroid Build Coastguard Worker `dex2oatd`, 326*333d2b36SAndroid Build Coastguard Worker }) 327*333d2b36SAndroid Build Coastguard Worker 328*333d2b36SAndroid Build Coastguard Worker // Make sure that the source bootclasspath_fragment copies its dex files to the predefined 329*333d2b36SAndroid Build Coastguard Worker // locations for the art image. 330*333d2b36SAndroid Build Coastguard Worker module := result.ModuleForTests("dex_bootjars", "android_common") 331*333d2b36SAndroid Build Coastguard Worker checkCopiesToPredefinedLocationForArt(t, result.Config, module, "bar", "foo") 332*333d2b36SAndroid Build Coastguard Worker }) 333*333d2b36SAndroid Build Coastguard Worker 334*333d2b36SAndroid Build Coastguard Worker t.Run("boot image files from source of override apex", func(t *testing.T) { 335*333d2b36SAndroid Build Coastguard Worker t.Parallel() 336*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 337*333d2b36SAndroid Build Coastguard Worker commonPreparer, 338*333d2b36SAndroid Build Coastguard Worker 339*333d2b36SAndroid Build Coastguard Worker // Configure some libraries in the art bootclasspath_fragment that match the source 340*333d2b36SAndroid Build Coastguard Worker // bootclasspath_fragment's contents property. 341*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureBootJars("com.android.art:foo", "com.android.art:bar"), 342*333d2b36SAndroid Build Coastguard Worker dexpreopt.FixtureSetTestOnlyArtBootImageJars("com.android.art:foo", "com.android.art:bar"), 343*333d2b36SAndroid Build Coastguard Worker addSource("foo", "bar"), 344*333d2b36SAndroid Build Coastguard Worker java.FixtureSetBootImageInstallDirOnDevice("art", "apex/com.android.art/javalib"), 345*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 346*333d2b36SAndroid Build Coastguard Worker 347*333d2b36SAndroid Build Coastguard Worker ensureExactContents(t, result.TestContext, "com.android.art", "android_common_com.mycompany.android.art_com.mycompany.android.art", []string{ 348*333d2b36SAndroid Build Coastguard Worker "etc/boot-image.prof", 349*333d2b36SAndroid Build Coastguard Worker "etc/classpaths/bootclasspath.pb", 350*333d2b36SAndroid Build Coastguard Worker "javalib/bar.jar", 351*333d2b36SAndroid Build Coastguard Worker "javalib/foo.jar", 352*333d2b36SAndroid Build Coastguard Worker }) 353*333d2b36SAndroid Build Coastguard Worker }) 354*333d2b36SAndroid Build Coastguard Worker 355*333d2b36SAndroid Build Coastguard Worker t.Run("generate boot image profile even if dexpreopt is disabled", func(t *testing.T) { 356*333d2b36SAndroid Build Coastguard Worker t.Parallel() 357*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 358*333d2b36SAndroid Build Coastguard Worker commonPreparer, 359*333d2b36SAndroid Build Coastguard Worker 360*333d2b36SAndroid Build Coastguard Worker // Configure some libraries in the art bootclasspath_fragment that match the source 361*333d2b36SAndroid Build Coastguard Worker // bootclasspath_fragment's contents property. 362*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureBootJars("com.android.art:foo", "com.android.art:bar"), 363*333d2b36SAndroid Build Coastguard Worker addSource("foo", "bar"), 364*333d2b36SAndroid Build Coastguard Worker java.FixtureSetBootImageInstallDirOnDevice("art", "system/framework"), 365*333d2b36SAndroid Build Coastguard Worker dexpreopt.FixtureDisableDexpreoptBootImages(true), 366*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 367*333d2b36SAndroid Build Coastguard Worker 368*333d2b36SAndroid Build Coastguard Worker ensureExactContents(t, result.TestContext, "com.android.art", "android_common_com.android.art", []string{ 369*333d2b36SAndroid Build Coastguard Worker "etc/boot-image.prof", 370*333d2b36SAndroid Build Coastguard Worker "etc/classpaths/bootclasspath.pb", 371*333d2b36SAndroid Build Coastguard Worker "javalib/bar.jar", 372*333d2b36SAndroid Build Coastguard Worker "javalib/foo.jar", 373*333d2b36SAndroid Build Coastguard Worker }) 374*333d2b36SAndroid Build Coastguard Worker }) 375*333d2b36SAndroid Build Coastguard Worker 376*333d2b36SAndroid Build Coastguard Worker t.Run("boot image disable generate profile", func(t *testing.T) { 377*333d2b36SAndroid Build Coastguard Worker t.Parallel() 378*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 379*333d2b36SAndroid Build Coastguard Worker commonPreparer, 380*333d2b36SAndroid Build Coastguard Worker 381*333d2b36SAndroid Build Coastguard Worker // Configure some libraries in the art bootclasspath_fragment that match the source 382*333d2b36SAndroid Build Coastguard Worker // bootclasspath_fragment's contents property. 383*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureBootJars("com.android.art:foo", "com.android.art:bar"), 384*333d2b36SAndroid Build Coastguard Worker addSource("foo", "bar"), 385*333d2b36SAndroid Build Coastguard Worker dexpreopt.FixtureDisableGenerateProfile(true), 386*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 387*333d2b36SAndroid Build Coastguard Worker 388*333d2b36SAndroid Build Coastguard Worker files := getFiles(t, result.TestContext, "com.android.art", "android_common_com.android.art") 389*333d2b36SAndroid Build Coastguard Worker for _, file := range files { 390*333d2b36SAndroid Build Coastguard Worker matched, _ := path.Match("etc/boot-image.prof", file.path) 391*333d2b36SAndroid Build Coastguard Worker android.AssertBoolEquals(t, "\"etc/boot-image.prof\" should not be in the APEX", matched, false) 392*333d2b36SAndroid Build Coastguard Worker } 393*333d2b36SAndroid Build Coastguard Worker }) 394*333d2b36SAndroid Build Coastguard Worker 395*333d2b36SAndroid Build Coastguard Worker t.Run("boot image files with preferred prebuilt", func(t *testing.T) { 396*333d2b36SAndroid Build Coastguard Worker t.Parallel() 397*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 398*333d2b36SAndroid Build Coastguard Worker commonPreparer, 399*333d2b36SAndroid Build Coastguard Worker 400*333d2b36SAndroid Build Coastguard Worker // Configure some libraries in the art bootclasspath_fragment that match the source 401*333d2b36SAndroid Build Coastguard Worker // bootclasspath_fragment's contents property. 402*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureBootJars("com.android.art:foo", "com.android.art:bar"), 403*333d2b36SAndroid Build Coastguard Worker dexpreopt.FixtureSetTestOnlyArtBootImageJars("com.android.art:foo", "com.android.art:bar"), 404*333d2b36SAndroid Build Coastguard Worker addSource("foo", "bar"), 405*333d2b36SAndroid Build Coastguard Worker 406*333d2b36SAndroid Build Coastguard Worker // Make sure that a preferred prebuilt with consistent contents doesn't affect the apex. 407*333d2b36SAndroid Build Coastguard Worker addPrebuilt(true, "foo", "bar"), 408*333d2b36SAndroid Build Coastguard Worker android.FixtureMergeMockFs(android.MockFS{ 409*333d2b36SAndroid Build Coastguard Worker "apex_contributions/Android.bp": []byte(` 410*333d2b36SAndroid Build Coastguard Worker apex_contributions { 411*333d2b36SAndroid Build Coastguard Worker name: "prebuilt_art_contributions", 412*333d2b36SAndroid Build Coastguard Worker contents: ["prebuilt_com.android.art"], 413*333d2b36SAndroid Build Coastguard Worker api_domain: "com.android.art", 414*333d2b36SAndroid Build Coastguard Worker } 415*333d2b36SAndroid Build Coastguard Worker `)}), 416*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithBuildFlag("RELEASE_APEX_CONTRIBUTIONS_ART", "prebuilt_art_contributions"), 417*333d2b36SAndroid Build Coastguard Worker 418*333d2b36SAndroid Build Coastguard Worker java.FixtureSetBootImageInstallDirOnDevice("art", "apex/com.android.art/javalib"), 419*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 420*333d2b36SAndroid Build Coastguard Worker 421*333d2b36SAndroid Build Coastguard Worker ensureExactDeapexedContents(t, result.TestContext, "prebuilt_com.android.art", "android_common_com.android.art", []string{ 422*333d2b36SAndroid Build Coastguard Worker "etc/boot-image.prof", 423*333d2b36SAndroid Build Coastguard Worker "javalib/bar.jar", 424*333d2b36SAndroid Build Coastguard Worker "javalib/foo.jar", 425*333d2b36SAndroid Build Coastguard Worker }) 426*333d2b36SAndroid Build Coastguard Worker 427*333d2b36SAndroid Build Coastguard Worker java.CheckModuleDependencies(t, result.TestContext, "com.android.art", "android_common_com.android.art", []string{ 428*333d2b36SAndroid Build Coastguard Worker `art-bootclasspath-fragment`, 429*333d2b36SAndroid Build Coastguard Worker `com.android.art.key`, 430*333d2b36SAndroid Build Coastguard Worker `dex2oatd`, 431*333d2b36SAndroid Build Coastguard Worker `prebuilt_com.android.art`, 432*333d2b36SAndroid Build Coastguard Worker }) 433*333d2b36SAndroid Build Coastguard Worker 434*333d2b36SAndroid Build Coastguard Worker // Make sure that the prebuilt bootclasspath_fragment copies its dex files to the predefined 435*333d2b36SAndroid Build Coastguard Worker // locations for the art image. 436*333d2b36SAndroid Build Coastguard Worker module := result.ModuleForTests("dex_bootjars", "android_common") 437*333d2b36SAndroid Build Coastguard Worker checkCopiesToPredefinedLocationForArt(t, result.Config, module, "bar", "foo") 438*333d2b36SAndroid Build Coastguard Worker }) 439*333d2b36SAndroid Build Coastguard Worker 440*333d2b36SAndroid Build Coastguard Worker t.Run("source with inconsistency between config and contents", func(t *testing.T) { 441*333d2b36SAndroid Build Coastguard Worker t.Parallel() 442*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 443*333d2b36SAndroid Build Coastguard Worker commonPreparer, 444*333d2b36SAndroid Build Coastguard Worker 445*333d2b36SAndroid Build Coastguard Worker // Create an inconsistency between the ArtApexJars configuration and the art source 446*333d2b36SAndroid Build Coastguard Worker // bootclasspath_fragment module's contents property. 447*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureBootJars("com.android.art:foo"), 448*333d2b36SAndroid Build Coastguard Worker addSource("foo", "bar"), 449*333d2b36SAndroid Build Coastguard Worker ). 450*333d2b36SAndroid Build Coastguard Worker ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`\QArtApexJars configuration specifies []string{"foo"}, contents property specifies []string{"foo", "bar"}\E`)). 451*333d2b36SAndroid Build Coastguard Worker RunTest(t) 452*333d2b36SAndroid Build Coastguard Worker }) 453*333d2b36SAndroid Build Coastguard Worker 454*333d2b36SAndroid Build Coastguard Worker t.Run("prebuilt with inconsistency between config and contents", func(t *testing.T) { 455*333d2b36SAndroid Build Coastguard Worker t.Parallel() 456*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 457*333d2b36SAndroid Build Coastguard Worker commonPreparer, 458*333d2b36SAndroid Build Coastguard Worker 459*333d2b36SAndroid Build Coastguard Worker // Create an inconsistency between the ArtApexJars configuration and the art 460*333d2b36SAndroid Build Coastguard Worker // prebuilt_bootclasspath_fragment module's contents property. 461*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureBootJars("com.android.art:foo"), 462*333d2b36SAndroid Build Coastguard Worker addPrebuilt(false, "foo", "bar"), 463*333d2b36SAndroid Build Coastguard Worker ). 464*333d2b36SAndroid Build Coastguard Worker ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`\QArtApexJars configuration specifies []string{"foo"}, contents property specifies []string{"foo", "bar"}\E`)). 465*333d2b36SAndroid Build Coastguard Worker RunTest(t) 466*333d2b36SAndroid Build Coastguard Worker }) 467*333d2b36SAndroid Build Coastguard Worker 468*333d2b36SAndroid Build Coastguard Worker t.Run("preferred prebuilt with inconsistency between config and contents", func(t *testing.T) { 469*333d2b36SAndroid Build Coastguard Worker t.Parallel() 470*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 471*333d2b36SAndroid Build Coastguard Worker commonPreparer, 472*333d2b36SAndroid Build Coastguard Worker 473*333d2b36SAndroid Build Coastguard Worker // Create an inconsistency between the ArtApexJars configuration and the art 474*333d2b36SAndroid Build Coastguard Worker // prebuilt_bootclasspath_fragment module's contents property. 475*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureBootJars("com.android.art:foo"), 476*333d2b36SAndroid Build Coastguard Worker addPrebuilt(true, "foo", "bar"), 477*333d2b36SAndroid Build Coastguard Worker 478*333d2b36SAndroid Build Coastguard Worker // Source contents property is consistent with the config. 479*333d2b36SAndroid Build Coastguard Worker addSource("foo"), 480*333d2b36SAndroid Build Coastguard Worker ). 481*333d2b36SAndroid Build Coastguard Worker ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`\QArtApexJars configuration specifies []string{"foo"}, contents property specifies []string{"foo", "bar"}\E`)). 482*333d2b36SAndroid Build Coastguard Worker RunTest(t) 483*333d2b36SAndroid Build Coastguard Worker }) 484*333d2b36SAndroid Build Coastguard Worker 485*333d2b36SAndroid Build Coastguard Worker t.Run("source preferred and prebuilt with inconsistency between config and contents", func(t *testing.T) { 486*333d2b36SAndroid Build Coastguard Worker t.Parallel() 487*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 488*333d2b36SAndroid Build Coastguard Worker commonPreparer, 489*333d2b36SAndroid Build Coastguard Worker 490*333d2b36SAndroid Build Coastguard Worker // Create an inconsistency between the ArtApexJars configuration and the art 491*333d2b36SAndroid Build Coastguard Worker // prebuilt_bootclasspath_fragment module's contents property. 492*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureBootJars("com.android.art:foo"), 493*333d2b36SAndroid Build Coastguard Worker addPrebuilt(false, "foo", "bar"), 494*333d2b36SAndroid Build Coastguard Worker 495*333d2b36SAndroid Build Coastguard Worker // Source contents property is consistent with the config. 496*333d2b36SAndroid Build Coastguard Worker addSource("foo"), 497*333d2b36SAndroid Build Coastguard Worker 498*333d2b36SAndroid Build Coastguard Worker // This should pass because while the prebuilt is inconsistent with the configuration it is 499*333d2b36SAndroid Build Coastguard Worker // not actually used. 500*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 501*333d2b36SAndroid Build Coastguard Worker }) 502*333d2b36SAndroid Build Coastguard Worker} 503*333d2b36SAndroid Build Coastguard Worker 504*333d2b36SAndroid Build Coastguard Workerfunc TestBootclasspathFragmentInPrebuiltArtApex(t *testing.T) { 505*333d2b36SAndroid Build Coastguard Worker t.Parallel() 506*333d2b36SAndroid Build Coastguard Worker preparers := android.GroupFixturePreparers( 507*333d2b36SAndroid Build Coastguard Worker prepareForTestWithBootclasspathFragment, 508*333d2b36SAndroid Build Coastguard Worker prepareForTestWithArtApex, 509*333d2b36SAndroid Build Coastguard Worker 510*333d2b36SAndroid Build Coastguard Worker android.FixtureMergeMockFs(android.MockFS{ 511*333d2b36SAndroid Build Coastguard Worker "com.android.art-arm64.apex": nil, 512*333d2b36SAndroid Build Coastguard Worker "com.android.art-arm.apex": nil, 513*333d2b36SAndroid Build Coastguard Worker }), 514*333d2b36SAndroid Build Coastguard Worker 515*333d2b36SAndroid Build Coastguard Worker // Configure some libraries in the art bootclasspath_fragment. 516*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureBootJars("com.android.art:foo", "com.android.art:bar"), 517*333d2b36SAndroid Build Coastguard Worker dexpreopt.FixtureSetTestOnlyArtBootImageJars("com.android.art:foo", "com.android.art:bar"), 518*333d2b36SAndroid Build Coastguard Worker java.FixtureSetBootImageInstallDirOnDevice("art", "apex/com.android.art/javalib"), 519*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithBuildFlag("RELEASE_APEX_CONTRIBUTIONS_ART", "prebuilt_art_contributions"), 520*333d2b36SAndroid Build Coastguard Worker ) 521*333d2b36SAndroid Build Coastguard Worker 522*333d2b36SAndroid Build Coastguard Worker bp := ` 523*333d2b36SAndroid Build Coastguard Worker prebuilt_apex { 524*333d2b36SAndroid Build Coastguard Worker name: "com.android.art", 525*333d2b36SAndroid Build Coastguard Worker arch: { 526*333d2b36SAndroid Build Coastguard Worker arm64: { 527*333d2b36SAndroid Build Coastguard Worker src: "com.android.art-arm64.apex", 528*333d2b36SAndroid Build Coastguard Worker }, 529*333d2b36SAndroid Build Coastguard Worker arm: { 530*333d2b36SAndroid Build Coastguard Worker src: "com.android.art-arm.apex", 531*333d2b36SAndroid Build Coastguard Worker }, 532*333d2b36SAndroid Build Coastguard Worker }, 533*333d2b36SAndroid Build Coastguard Worker exported_bootclasspath_fragments: ["art-bootclasspath-fragment"], 534*333d2b36SAndroid Build Coastguard Worker } 535*333d2b36SAndroid Build Coastguard Worker 536*333d2b36SAndroid Build Coastguard Worker java_import { 537*333d2b36SAndroid Build Coastguard Worker name: "foo", 538*333d2b36SAndroid Build Coastguard Worker jars: ["foo.jar"], 539*333d2b36SAndroid Build Coastguard Worker apex_available: [ 540*333d2b36SAndroid Build Coastguard Worker "com.android.art", 541*333d2b36SAndroid Build Coastguard Worker ], 542*333d2b36SAndroid Build Coastguard Worker } 543*333d2b36SAndroid Build Coastguard Worker 544*333d2b36SAndroid Build Coastguard Worker java_import { 545*333d2b36SAndroid Build Coastguard Worker name: "bar", 546*333d2b36SAndroid Build Coastguard Worker jars: ["bar.jar"], 547*333d2b36SAndroid Build Coastguard Worker apex_available: [ 548*333d2b36SAndroid Build Coastguard Worker "com.android.art", 549*333d2b36SAndroid Build Coastguard Worker ], 550*333d2b36SAndroid Build Coastguard Worker } 551*333d2b36SAndroid Build Coastguard Worker 552*333d2b36SAndroid Build Coastguard Worker prebuilt_bootclasspath_fragment { 553*333d2b36SAndroid Build Coastguard Worker name: "art-bootclasspath-fragment", 554*333d2b36SAndroid Build Coastguard Worker image_name: "art", 555*333d2b36SAndroid Build Coastguard Worker // Must match the "com.android.art:" entries passed to FixtureConfigureBootJars above. 556*333d2b36SAndroid Build Coastguard Worker contents: ["foo", "bar"], 557*333d2b36SAndroid Build Coastguard Worker apex_available: [ 558*333d2b36SAndroid Build Coastguard Worker "com.android.art", 559*333d2b36SAndroid Build Coastguard Worker ], 560*333d2b36SAndroid Build Coastguard Worker hidden_api: { 561*333d2b36SAndroid Build Coastguard Worker annotation_flags: "hiddenapi/annotation-flags.csv", 562*333d2b36SAndroid Build Coastguard Worker metadata: "hiddenapi/metadata.csv", 563*333d2b36SAndroid Build Coastguard Worker index: "hiddenapi/index.csv", 564*333d2b36SAndroid Build Coastguard Worker stub_flags: "hiddenapi/stub-flags.csv", 565*333d2b36SAndroid Build Coastguard Worker all_flags: "hiddenapi/all-flags.csv", 566*333d2b36SAndroid Build Coastguard Worker }, 567*333d2b36SAndroid Build Coastguard Worker } 568*333d2b36SAndroid Build Coastguard Worker 569*333d2b36SAndroid Build Coastguard Worker // A prebuilt apex with the same apex_name that shouldn't interfere when it isn't enabled. 570*333d2b36SAndroid Build Coastguard Worker prebuilt_apex { 571*333d2b36SAndroid Build Coastguard Worker name: "com.mycompany.android.art", 572*333d2b36SAndroid Build Coastguard Worker apex_name: "com.android.art", 573*333d2b36SAndroid Build Coastguard Worker %s 574*333d2b36SAndroid Build Coastguard Worker src: "com.mycompany.android.art.apex", 575*333d2b36SAndroid Build Coastguard Worker exported_bootclasspath_fragments: ["art-bootclasspath-fragment"], 576*333d2b36SAndroid Build Coastguard Worker } 577*333d2b36SAndroid Build Coastguard Worker 578*333d2b36SAndroid Build Coastguard Worker apex_contributions { 579*333d2b36SAndroid Build Coastguard Worker name: "prebuilt_art_contributions", 580*333d2b36SAndroid Build Coastguard Worker contents: ["prebuilt_com.android.art"], 581*333d2b36SAndroid Build Coastguard Worker api_domain: "com.android.art", 582*333d2b36SAndroid Build Coastguard Worker } 583*333d2b36SAndroid Build Coastguard Worker ` 584*333d2b36SAndroid Build Coastguard Worker 585*333d2b36SAndroid Build Coastguard Worker t.Run("disabled alternative APEX", func(t *testing.T) { 586*333d2b36SAndroid Build Coastguard Worker t.Parallel() 587*333d2b36SAndroid Build Coastguard Worker result := preparers.RunTestWithBp(t, fmt.Sprintf(bp, "enabled: false,")) 588*333d2b36SAndroid Build Coastguard Worker 589*333d2b36SAndroid Build Coastguard Worker java.CheckModuleDependencies(t, result.TestContext, "com.android.art", "android_common_com.android.art", []string{ 590*333d2b36SAndroid Build Coastguard Worker `all_apex_contributions`, 591*333d2b36SAndroid Build Coastguard Worker `dex2oatd`, 592*333d2b36SAndroid Build Coastguard Worker `prebuilt_art-bootclasspath-fragment`, 593*333d2b36SAndroid Build Coastguard Worker }) 594*333d2b36SAndroid Build Coastguard Worker 595*333d2b36SAndroid Build Coastguard Worker java.CheckModuleDependencies(t, result.TestContext, "art-bootclasspath-fragment", "android_common_com.android.art", []string{ 596*333d2b36SAndroid Build Coastguard Worker `all_apex_contributions`, 597*333d2b36SAndroid Build Coastguard Worker `dex2oatd`, 598*333d2b36SAndroid Build Coastguard Worker `prebuilt_bar`, 599*333d2b36SAndroid Build Coastguard Worker `prebuilt_foo`, 600*333d2b36SAndroid Build Coastguard Worker }) 601*333d2b36SAndroid Build Coastguard Worker 602*333d2b36SAndroid Build Coastguard Worker module := result.ModuleForTests("dex_bootjars", "android_common") 603*333d2b36SAndroid Build Coastguard Worker checkCopiesToPredefinedLocationForArt(t, result.Config, module, "bar", "foo") 604*333d2b36SAndroid Build Coastguard Worker }) 605*333d2b36SAndroid Build Coastguard Worker} 606*333d2b36SAndroid Build Coastguard Worker 607*333d2b36SAndroid Build Coastguard Worker// checkCopiesToPredefinedLocationForArt checks that the supplied modules are copied to the 608*333d2b36SAndroid Build Coastguard Worker// predefined locations of boot dex jars used as inputs for the ART boot image. 609*333d2b36SAndroid Build Coastguard Workerfunc checkCopiesToPredefinedLocationForArt(t *testing.T, config android.Config, module android.TestingModule, modules ...string) { 610*333d2b36SAndroid Build Coastguard Worker t.Helper() 611*333d2b36SAndroid Build Coastguard Worker bootJarLocations := []string{} 612*333d2b36SAndroid Build Coastguard Worker for _, output := range module.AllOutputs() { 613*333d2b36SAndroid Build Coastguard Worker output = android.StringRelativeToTop(config, output) 614*333d2b36SAndroid Build Coastguard Worker if strings.HasPrefix(output, "out/soong/dexpreopt_arm64/dex_artjars_input/") { 615*333d2b36SAndroid Build Coastguard Worker bootJarLocations = append(bootJarLocations, output) 616*333d2b36SAndroid Build Coastguard Worker } 617*333d2b36SAndroid Build Coastguard Worker } 618*333d2b36SAndroid Build Coastguard Worker 619*333d2b36SAndroid Build Coastguard Worker sort.Strings(bootJarLocations) 620*333d2b36SAndroid Build Coastguard Worker expected := []string{} 621*333d2b36SAndroid Build Coastguard Worker for _, m := range modules { 622*333d2b36SAndroid Build Coastguard Worker expected = append(expected, fmt.Sprintf("out/soong/dexpreopt_arm64/dex_artjars_input/%s.jar", m)) 623*333d2b36SAndroid Build Coastguard Worker } 624*333d2b36SAndroid Build Coastguard Worker sort.Strings(expected) 625*333d2b36SAndroid Build Coastguard Worker 626*333d2b36SAndroid Build Coastguard Worker android.AssertArrayString(t, "copies to predefined locations for art", expected, bootJarLocations) 627*333d2b36SAndroid Build Coastguard Worker} 628*333d2b36SAndroid Build Coastguard Worker 629*333d2b36SAndroid Build Coastguard Workerfunc TestBootclasspathFragmentContentsNoName(t *testing.T) { 630*333d2b36SAndroid Build Coastguard Worker t.Parallel() 631*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 632*333d2b36SAndroid Build Coastguard Worker prepareForTestWithBootclasspathFragment, 633*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 634*333d2b36SAndroid Build Coastguard Worker // Configure bootclasspath jars to ensure that hidden API encoding is performed on them. 635*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureApexBootJars("myapex:foo", "myapex:bar"), 636*333d2b36SAndroid Build Coastguard Worker // Make sure that the frameworks/base/Android.bp file exists as otherwise hidden API encoding 637*333d2b36SAndroid Build Coastguard Worker // is disabled. 638*333d2b36SAndroid Build Coastguard Worker android.FixtureAddTextFile("frameworks/base/Android.bp", ""), 639*333d2b36SAndroid Build Coastguard Worker 640*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaSdkLibraryFiles, 641*333d2b36SAndroid Build Coastguard Worker java.FixtureWithLastReleaseApis("foo"), 642*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 643*333d2b36SAndroid Build Coastguard Worker apex { 644*333d2b36SAndroid Build Coastguard Worker name: "myapex", 645*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 646*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: [ 647*333d2b36SAndroid Build Coastguard Worker "mybootclasspathfragment", 648*333d2b36SAndroid Build Coastguard Worker ], 649*333d2b36SAndroid Build Coastguard Worker updatable: false, 650*333d2b36SAndroid Build Coastguard Worker } 651*333d2b36SAndroid Build Coastguard Worker 652*333d2b36SAndroid Build Coastguard Worker apex_key { 653*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 654*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 655*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 656*333d2b36SAndroid Build Coastguard Worker } 657*333d2b36SAndroid Build Coastguard Worker 658*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 659*333d2b36SAndroid Build Coastguard Worker name: "foo", 660*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 661*333d2b36SAndroid Build Coastguard Worker shared_library: false, 662*333d2b36SAndroid Build Coastguard Worker public: {enabled: true}, 663*333d2b36SAndroid Build Coastguard Worker apex_available: [ 664*333d2b36SAndroid Build Coastguard Worker "myapex", 665*333d2b36SAndroid Build Coastguard Worker ], 666*333d2b36SAndroid Build Coastguard Worker } 667*333d2b36SAndroid Build Coastguard Worker 668*333d2b36SAndroid Build Coastguard Worker java_library { 669*333d2b36SAndroid Build Coastguard Worker name: "bar", 670*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 671*333d2b36SAndroid Build Coastguard Worker installable: true, 672*333d2b36SAndroid Build Coastguard Worker apex_available: [ 673*333d2b36SAndroid Build Coastguard Worker "myapex", 674*333d2b36SAndroid Build Coastguard Worker ], 675*333d2b36SAndroid Build Coastguard Worker } 676*333d2b36SAndroid Build Coastguard Worker 677*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 678*333d2b36SAndroid Build Coastguard Worker name: "mybootclasspathfragment", 679*333d2b36SAndroid Build Coastguard Worker contents: [ 680*333d2b36SAndroid Build Coastguard Worker "foo", 681*333d2b36SAndroid Build Coastguard Worker "bar", 682*333d2b36SAndroid Build Coastguard Worker ], 683*333d2b36SAndroid Build Coastguard Worker apex_available: [ 684*333d2b36SAndroid Build Coastguard Worker "myapex", 685*333d2b36SAndroid Build Coastguard Worker ], 686*333d2b36SAndroid Build Coastguard Worker hidden_api: { 687*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 688*333d2b36SAndroid Build Coastguard Worker }, 689*333d2b36SAndroid Build Coastguard Worker } 690*333d2b36SAndroid Build Coastguard Worker `) 691*333d2b36SAndroid Build Coastguard Worker 692*333d2b36SAndroid Build Coastguard Worker ensureExactContents(t, result.TestContext, "myapex", "android_common_myapex", []string{ 693*333d2b36SAndroid Build Coastguard Worker // This does not include art, oat or vdex files as they are only included for the art boot 694*333d2b36SAndroid Build Coastguard Worker // image. 695*333d2b36SAndroid Build Coastguard Worker "etc/classpaths/bootclasspath.pb", 696*333d2b36SAndroid Build Coastguard Worker "javalib/bar.jar", 697*333d2b36SAndroid Build Coastguard Worker "javalib/foo.jar", 698*333d2b36SAndroid Build Coastguard Worker }) 699*333d2b36SAndroid Build Coastguard Worker 700*333d2b36SAndroid Build Coastguard Worker java.CheckModuleDependencies(t, result.TestContext, "myapex", "android_common_myapex", []string{ 701*333d2b36SAndroid Build Coastguard Worker `dex2oatd`, 702*333d2b36SAndroid Build Coastguard Worker `myapex.key`, 703*333d2b36SAndroid Build Coastguard Worker `mybootclasspathfragment`, 704*333d2b36SAndroid Build Coastguard Worker }) 705*333d2b36SAndroid Build Coastguard Worker 706*333d2b36SAndroid Build Coastguard Worker apex := result.ModuleForTests("myapex", "android_common_myapex") 707*333d2b36SAndroid Build Coastguard Worker apexRule := apex.Rule("apexRule") 708*333d2b36SAndroid Build Coastguard Worker copyCommands := apexRule.Args["copy_commands"] 709*333d2b36SAndroid Build Coastguard Worker 710*333d2b36SAndroid Build Coastguard Worker // Make sure that the fragment provides the hidden API encoded dex jars to the APEX. 711*333d2b36SAndroid Build Coastguard Worker fragment := result.Module("mybootclasspathfragment", "android_common_apex10000") 712*333d2b36SAndroid Build Coastguard Worker 713*333d2b36SAndroid Build Coastguard Worker info, _ := android.OtherModuleProvider(result, fragment, java.BootclasspathFragmentApexContentInfoProvider) 714*333d2b36SAndroid Build Coastguard Worker 715*333d2b36SAndroid Build Coastguard Worker checkFragmentExportedDexJar := func(name string, expectedDexJar string) { 716*333d2b36SAndroid Build Coastguard Worker module := result.Module(name, "android_common_apex10000") 717*333d2b36SAndroid Build Coastguard Worker dexJar, err := info.DexBootJarPathForContentModule(module) 718*333d2b36SAndroid Build Coastguard Worker if err != nil { 719*333d2b36SAndroid Build Coastguard Worker t.Error(err) 720*333d2b36SAndroid Build Coastguard Worker } 721*333d2b36SAndroid Build Coastguard Worker android.AssertPathRelativeToTopEquals(t, name+" dex", expectedDexJar, dexJar) 722*333d2b36SAndroid Build Coastguard Worker 723*333d2b36SAndroid Build Coastguard Worker expectedCopyCommand := fmt.Sprintf("&& cp -f %s out/soong/.intermediates/myapex/android_common_myapex/image.apex/javalib/%s.jar", expectedDexJar, name) 724*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, name+" apex copy command", copyCommands, expectedCopyCommand) 725*333d2b36SAndroid Build Coastguard Worker } 726*333d2b36SAndroid Build Coastguard Worker 727*333d2b36SAndroid Build Coastguard Worker checkFragmentExportedDexJar("foo", "out/soong/.intermediates/mybootclasspathfragment/android_common_apex10000/hiddenapi-modular/encoded/foo.jar") 728*333d2b36SAndroid Build Coastguard Worker checkFragmentExportedDexJar("bar", "out/soong/.intermediates/mybootclasspathfragment/android_common_apex10000/hiddenapi-modular/encoded/bar.jar") 729*333d2b36SAndroid Build Coastguard Worker} 730*333d2b36SAndroid Build Coastguard Worker 731*333d2b36SAndroid Build Coastguard Workerfunc getDexJarPath(result *android.TestResult, name string) string { 732*333d2b36SAndroid Build Coastguard Worker module := result.Module(name, "android_common") 733*333d2b36SAndroid Build Coastguard Worker return module.(java.UsesLibraryDependency).DexJarBuildPath(moduleErrorfTestCtx{}).Path().RelativeToTop().String() 734*333d2b36SAndroid Build Coastguard Worker} 735*333d2b36SAndroid Build Coastguard Worker 736*333d2b36SAndroid Build Coastguard Worker// TestBootclasspathFragment_HiddenAPIList checks to make sure that the correct parameters are 737*333d2b36SAndroid Build Coastguard Worker// passed to the hiddenapi list tool. 738*333d2b36SAndroid Build Coastguard Workerfunc TestBootclasspathFragment_HiddenAPIList(t *testing.T) { 739*333d2b36SAndroid Build Coastguard Worker t.Parallel() 740*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 741*333d2b36SAndroid Build Coastguard Worker prepareForTestWithBootclasspathFragment, 742*333d2b36SAndroid Build Coastguard Worker prepareForTestWithArtApex, 743*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 744*333d2b36SAndroid Build Coastguard Worker // Configure bootclasspath jars to ensure that hidden API encoding is performed on them. 745*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureBootJars("com.android.art:baz", "com.android.art:quuz"), 746*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureApexBootJars("myapex:foo", "myapex:bar"), 747*333d2b36SAndroid Build Coastguard Worker // Make sure that the frameworks/base/Android.bp file exists as otherwise hidden API encoding 748*333d2b36SAndroid Build Coastguard Worker // is disabled. 749*333d2b36SAndroid Build Coastguard Worker android.FixtureAddTextFile("frameworks/base/Android.bp", ""), 750*333d2b36SAndroid Build Coastguard Worker 751*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaSdkLibraryFiles, 752*333d2b36SAndroid Build Coastguard Worker java.FixtureWithLastReleaseApis("foo", "quuz"), 753*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"), 754*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 755*333d2b36SAndroid Build Coastguard Worker apex { 756*333d2b36SAndroid Build Coastguard Worker name: "com.android.art", 757*333d2b36SAndroid Build Coastguard Worker key: "com.android.art.key", 758*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: ["art-bootclasspath-fragment"], 759*333d2b36SAndroid Build Coastguard Worker updatable: false, 760*333d2b36SAndroid Build Coastguard Worker } 761*333d2b36SAndroid Build Coastguard Worker 762*333d2b36SAndroid Build Coastguard Worker apex_key { 763*333d2b36SAndroid Build Coastguard Worker name: "com.android.art.key", 764*333d2b36SAndroid Build Coastguard Worker public_key: "com.android.art.avbpubkey", 765*333d2b36SAndroid Build Coastguard Worker private_key: "com.android.art.pem", 766*333d2b36SAndroid Build Coastguard Worker } 767*333d2b36SAndroid Build Coastguard Worker 768*333d2b36SAndroid Build Coastguard Worker java_library { 769*333d2b36SAndroid Build Coastguard Worker name: "baz", 770*333d2b36SAndroid Build Coastguard Worker apex_available: [ 771*333d2b36SAndroid Build Coastguard Worker "com.android.art", 772*333d2b36SAndroid Build Coastguard Worker ], 773*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 774*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 775*333d2b36SAndroid Build Coastguard Worker sdk_version: "core_current", 776*333d2b36SAndroid Build Coastguard Worker } 777*333d2b36SAndroid Build Coastguard Worker 778*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 779*333d2b36SAndroid Build Coastguard Worker name: "quuz", 780*333d2b36SAndroid Build Coastguard Worker apex_available: [ 781*333d2b36SAndroid Build Coastguard Worker "com.android.art", 782*333d2b36SAndroid Build Coastguard Worker ], 783*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 784*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 785*333d2b36SAndroid Build Coastguard Worker public: {enabled: true}, 786*333d2b36SAndroid Build Coastguard Worker system: {enabled: true}, 787*333d2b36SAndroid Build Coastguard Worker test: {enabled: true}, 788*333d2b36SAndroid Build Coastguard Worker module_lib: {enabled: true}, 789*333d2b36SAndroid Build Coastguard Worker } 790*333d2b36SAndroid Build Coastguard Worker 791*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 792*333d2b36SAndroid Build Coastguard Worker name: "art-bootclasspath-fragment", 793*333d2b36SAndroid Build Coastguard Worker image_name: "art", 794*333d2b36SAndroid Build Coastguard Worker // Must match the "com.android.art:" entries passed to FixtureConfigureBootJars above. 795*333d2b36SAndroid Build Coastguard Worker contents: ["baz", "quuz"], 796*333d2b36SAndroid Build Coastguard Worker apex_available: [ 797*333d2b36SAndroid Build Coastguard Worker "com.android.art", 798*333d2b36SAndroid Build Coastguard Worker ], 799*333d2b36SAndroid Build Coastguard Worker hidden_api: { 800*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 801*333d2b36SAndroid Build Coastguard Worker }, 802*333d2b36SAndroid Build Coastguard Worker } 803*333d2b36SAndroid Build Coastguard Worker 804*333d2b36SAndroid Build Coastguard Worker apex { 805*333d2b36SAndroid Build Coastguard Worker name: "myapex", 806*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 807*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: [ 808*333d2b36SAndroid Build Coastguard Worker "mybootclasspathfragment", 809*333d2b36SAndroid Build Coastguard Worker ], 810*333d2b36SAndroid Build Coastguard Worker updatable: false, 811*333d2b36SAndroid Build Coastguard Worker } 812*333d2b36SAndroid Build Coastguard Worker 813*333d2b36SAndroid Build Coastguard Worker apex_key { 814*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 815*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 816*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 817*333d2b36SAndroid Build Coastguard Worker } 818*333d2b36SAndroid Build Coastguard Worker 819*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 820*333d2b36SAndroid Build Coastguard Worker name: "foo", 821*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 822*333d2b36SAndroid Build Coastguard Worker shared_library: false, 823*333d2b36SAndroid Build Coastguard Worker public: {enabled: true}, 824*333d2b36SAndroid Build Coastguard Worker apex_available: [ 825*333d2b36SAndroid Build Coastguard Worker "myapex", 826*333d2b36SAndroid Build Coastguard Worker ], 827*333d2b36SAndroid Build Coastguard Worker } 828*333d2b36SAndroid Build Coastguard Worker 829*333d2b36SAndroid Build Coastguard Worker java_library { 830*333d2b36SAndroid Build Coastguard Worker name: "bar", 831*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 832*333d2b36SAndroid Build Coastguard Worker installable: true, 833*333d2b36SAndroid Build Coastguard Worker apex_available: [ 834*333d2b36SAndroid Build Coastguard Worker "myapex", 835*333d2b36SAndroid Build Coastguard Worker ], 836*333d2b36SAndroid Build Coastguard Worker } 837*333d2b36SAndroid Build Coastguard Worker 838*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 839*333d2b36SAndroid Build Coastguard Worker name: "mybootclasspathfragment", 840*333d2b36SAndroid Build Coastguard Worker contents: [ 841*333d2b36SAndroid Build Coastguard Worker "foo", 842*333d2b36SAndroid Build Coastguard Worker "bar", 843*333d2b36SAndroid Build Coastguard Worker ], 844*333d2b36SAndroid Build Coastguard Worker apex_available: [ 845*333d2b36SAndroid Build Coastguard Worker "myapex", 846*333d2b36SAndroid Build Coastguard Worker ], 847*333d2b36SAndroid Build Coastguard Worker fragments: [ 848*333d2b36SAndroid Build Coastguard Worker { 849*333d2b36SAndroid Build Coastguard Worker apex: "com.android.art", 850*333d2b36SAndroid Build Coastguard Worker module: "art-bootclasspath-fragment", 851*333d2b36SAndroid Build Coastguard Worker }, 852*333d2b36SAndroid Build Coastguard Worker ], 853*333d2b36SAndroid Build Coastguard Worker hidden_api: { 854*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 855*333d2b36SAndroid Build Coastguard Worker }, 856*333d2b36SAndroid Build Coastguard Worker } 857*333d2b36SAndroid Build Coastguard Worker `) 858*333d2b36SAndroid Build Coastguard Worker 859*333d2b36SAndroid Build Coastguard Worker java.CheckModuleDependencies(t, result.TestContext, "mybootclasspathfragment", "android_common_apex10000", []string{ 860*333d2b36SAndroid Build Coastguard Worker "all_apex_contributions", 861*333d2b36SAndroid Build Coastguard Worker "art-bootclasspath-fragment", 862*333d2b36SAndroid Build Coastguard Worker "bar", 863*333d2b36SAndroid Build Coastguard Worker "dex2oatd", 864*333d2b36SAndroid Build Coastguard Worker "foo", 865*333d2b36SAndroid Build Coastguard Worker }) 866*333d2b36SAndroid Build Coastguard Worker 867*333d2b36SAndroid Build Coastguard Worker fooStubs := getDexJarPath(result, "foo.stubs.exportable") 868*333d2b36SAndroid Build Coastguard Worker quuzPublicStubs := getDexJarPath(result, "quuz.stubs.exportable") 869*333d2b36SAndroid Build Coastguard Worker quuzSystemStubs := getDexJarPath(result, "quuz.stubs.exportable.system") 870*333d2b36SAndroid Build Coastguard Worker quuzTestStubs := getDexJarPath(result, "quuz.stubs.exportable.test") 871*333d2b36SAndroid Build Coastguard Worker quuzModuleLibStubs := getDexJarPath(result, "quuz.stubs.exportable.module_lib") 872*333d2b36SAndroid Build Coastguard Worker 873*333d2b36SAndroid Build Coastguard Worker // Make sure that the fragment uses the quuz stub dex jars when generating the hidden API flags. 874*333d2b36SAndroid Build Coastguard Worker fragment := result.ModuleForTests("mybootclasspathfragment", "android_common_apex10000") 875*333d2b36SAndroid Build Coastguard Worker 876*333d2b36SAndroid Build Coastguard Worker rule := fragment.Rule("modularHiddenAPIStubFlagsFile") 877*333d2b36SAndroid Build Coastguard Worker command := rule.RuleParams.Command 878*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "check correct rule", command, "hiddenapi list") 879*333d2b36SAndroid Build Coastguard Worker 880*333d2b36SAndroid Build Coastguard Worker // Make sure that the quuz stubs are available for resolving references from the implementation 881*333d2b36SAndroid Build Coastguard Worker // boot dex jars provided by this module. 882*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "quuz widest", command, "--dependency-stub-dex="+quuzModuleLibStubs) 883*333d2b36SAndroid Build Coastguard Worker 884*333d2b36SAndroid Build Coastguard Worker // Make sure that the quuz stubs are available for resolving references from the different API 885*333d2b36SAndroid Build Coastguard Worker // stubs provided by this module. 886*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "public", command, "--public-stub-classpath="+quuzPublicStubs+":"+fooStubs) 887*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "system", command, "--system-stub-classpath="+quuzSystemStubs+":"+fooStubs) 888*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "test", command, "--test-stub-classpath="+quuzTestStubs+":"+fooStubs) 889*333d2b36SAndroid Build Coastguard Worker} 890*333d2b36SAndroid Build Coastguard Worker 891*333d2b36SAndroid Build Coastguard Worker// TestBootclasspathFragment_AndroidNonUpdatable checks to make sure that setting 892*333d2b36SAndroid Build Coastguard Worker// additional_stubs: ["android-non-updatable"] causes the source android-non-updatable modules to be 893*333d2b36SAndroid Build Coastguard Worker// added to the hiddenapi list tool. 894*333d2b36SAndroid Build Coastguard Workerfunc TestBootclasspathFragment_AndroidNonUpdatable_FromSource(t *testing.T) { 895*333d2b36SAndroid Build Coastguard Worker t.Parallel() 896*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 897*333d2b36SAndroid Build Coastguard Worker prepareForTestWithBootclasspathFragment, 898*333d2b36SAndroid Build Coastguard Worker prepareForTestWithArtApex, 899*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 900*333d2b36SAndroid Build Coastguard Worker // Configure bootclasspath jars to ensure that hidden API encoding is performed on them. 901*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureBootJars("com.android.art:baz", "com.android.art:quuz"), 902*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureApexBootJars("myapex:foo", "myapex:bar"), 903*333d2b36SAndroid Build Coastguard Worker // Make sure that the frameworks/base/Android.bp file exists as otherwise hidden API encoding 904*333d2b36SAndroid Build Coastguard Worker // is disabled. 905*333d2b36SAndroid Build Coastguard Worker android.FixtureAddTextFile("frameworks/base/Android.bp", ""), 906*333d2b36SAndroid Build Coastguard Worker android.FixtureModifyConfig(func(config android.Config) { 907*333d2b36SAndroid Build Coastguard Worker config.SetBuildFromTextStub(false) 908*333d2b36SAndroid Build Coastguard Worker }), 909*333d2b36SAndroid Build Coastguard Worker 910*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaSdkLibraryFiles, 911*333d2b36SAndroid Build Coastguard Worker java.FixtureWithLastReleaseApis("foo", "android-non-updatable"), 912*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 913*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 914*333d2b36SAndroid Build Coastguard Worker name: "android-non-updatable", 915*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 916*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 917*333d2b36SAndroid Build Coastguard Worker public: { 918*333d2b36SAndroid Build Coastguard Worker enabled: true, 919*333d2b36SAndroid Build Coastguard Worker }, 920*333d2b36SAndroid Build Coastguard Worker system: { 921*333d2b36SAndroid Build Coastguard Worker enabled: true, 922*333d2b36SAndroid Build Coastguard Worker }, 923*333d2b36SAndroid Build Coastguard Worker test: { 924*333d2b36SAndroid Build Coastguard Worker enabled: true, 925*333d2b36SAndroid Build Coastguard Worker }, 926*333d2b36SAndroid Build Coastguard Worker module_lib: { 927*333d2b36SAndroid Build Coastguard Worker enabled: true, 928*333d2b36SAndroid Build Coastguard Worker }, 929*333d2b36SAndroid Build Coastguard Worker } 930*333d2b36SAndroid Build Coastguard Worker 931*333d2b36SAndroid Build Coastguard Worker apex { 932*333d2b36SAndroid Build Coastguard Worker name: "com.android.art", 933*333d2b36SAndroid Build Coastguard Worker key: "com.android.art.key", 934*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: ["art-bootclasspath-fragment"], 935*333d2b36SAndroid Build Coastguard Worker updatable: false, 936*333d2b36SAndroid Build Coastguard Worker } 937*333d2b36SAndroid Build Coastguard Worker 938*333d2b36SAndroid Build Coastguard Worker apex_key { 939*333d2b36SAndroid Build Coastguard Worker name: "com.android.art.key", 940*333d2b36SAndroid Build Coastguard Worker public_key: "com.android.art.avbpubkey", 941*333d2b36SAndroid Build Coastguard Worker private_key: "com.android.art.pem", 942*333d2b36SAndroid Build Coastguard Worker } 943*333d2b36SAndroid Build Coastguard Worker 944*333d2b36SAndroid Build Coastguard Worker java_library { 945*333d2b36SAndroid Build Coastguard Worker name: "baz", 946*333d2b36SAndroid Build Coastguard Worker apex_available: [ 947*333d2b36SAndroid Build Coastguard Worker "com.android.art", 948*333d2b36SAndroid Build Coastguard Worker ], 949*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 950*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 951*333d2b36SAndroid Build Coastguard Worker sdk_version: "core_current", 952*333d2b36SAndroid Build Coastguard Worker } 953*333d2b36SAndroid Build Coastguard Worker 954*333d2b36SAndroid Build Coastguard Worker java_library { 955*333d2b36SAndroid Build Coastguard Worker name: "quuz", 956*333d2b36SAndroid Build Coastguard Worker apex_available: [ 957*333d2b36SAndroid Build Coastguard Worker "com.android.art", 958*333d2b36SAndroid Build Coastguard Worker ], 959*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 960*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 961*333d2b36SAndroid Build Coastguard Worker } 962*333d2b36SAndroid Build Coastguard Worker 963*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 964*333d2b36SAndroid Build Coastguard Worker name: "art-bootclasspath-fragment", 965*333d2b36SAndroid Build Coastguard Worker image_name: "art", 966*333d2b36SAndroid Build Coastguard Worker // Must match the "com.android.art:" entries passed to FixtureConfigureBootJars above. 967*333d2b36SAndroid Build Coastguard Worker contents: ["baz", "quuz"], 968*333d2b36SAndroid Build Coastguard Worker apex_available: [ 969*333d2b36SAndroid Build Coastguard Worker "com.android.art", 970*333d2b36SAndroid Build Coastguard Worker ], 971*333d2b36SAndroid Build Coastguard Worker hidden_api: { 972*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 973*333d2b36SAndroid Build Coastguard Worker }, 974*333d2b36SAndroid Build Coastguard Worker } 975*333d2b36SAndroid Build Coastguard Worker 976*333d2b36SAndroid Build Coastguard Worker apex { 977*333d2b36SAndroid Build Coastguard Worker name: "myapex", 978*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 979*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: [ 980*333d2b36SAndroid Build Coastguard Worker "mybootclasspathfragment", 981*333d2b36SAndroid Build Coastguard Worker ], 982*333d2b36SAndroid Build Coastguard Worker updatable: false, 983*333d2b36SAndroid Build Coastguard Worker } 984*333d2b36SAndroid Build Coastguard Worker 985*333d2b36SAndroid Build Coastguard Worker apex_key { 986*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 987*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 988*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 989*333d2b36SAndroid Build Coastguard Worker } 990*333d2b36SAndroid Build Coastguard Worker 991*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 992*333d2b36SAndroid Build Coastguard Worker name: "foo", 993*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 994*333d2b36SAndroid Build Coastguard Worker shared_library: false, 995*333d2b36SAndroid Build Coastguard Worker public: {enabled: true}, 996*333d2b36SAndroid Build Coastguard Worker apex_available: [ 997*333d2b36SAndroid Build Coastguard Worker "myapex", 998*333d2b36SAndroid Build Coastguard Worker ], 999*333d2b36SAndroid Build Coastguard Worker } 1000*333d2b36SAndroid Build Coastguard Worker 1001*333d2b36SAndroid Build Coastguard Worker java_library { 1002*333d2b36SAndroid Build Coastguard Worker name: "bar", 1003*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 1004*333d2b36SAndroid Build Coastguard Worker installable: true, 1005*333d2b36SAndroid Build Coastguard Worker apex_available: [ 1006*333d2b36SAndroid Build Coastguard Worker "myapex", 1007*333d2b36SAndroid Build Coastguard Worker ], 1008*333d2b36SAndroid Build Coastguard Worker } 1009*333d2b36SAndroid Build Coastguard Worker 1010*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 1011*333d2b36SAndroid Build Coastguard Worker name: "mybootclasspathfragment", 1012*333d2b36SAndroid Build Coastguard Worker contents: [ 1013*333d2b36SAndroid Build Coastguard Worker "foo", 1014*333d2b36SAndroid Build Coastguard Worker "bar", 1015*333d2b36SAndroid Build Coastguard Worker ], 1016*333d2b36SAndroid Build Coastguard Worker apex_available: [ 1017*333d2b36SAndroid Build Coastguard Worker "myapex", 1018*333d2b36SAndroid Build Coastguard Worker ], 1019*333d2b36SAndroid Build Coastguard Worker additional_stubs: ["android-non-updatable"], 1020*333d2b36SAndroid Build Coastguard Worker fragments: [ 1021*333d2b36SAndroid Build Coastguard Worker { 1022*333d2b36SAndroid Build Coastguard Worker apex: "com.android.art", 1023*333d2b36SAndroid Build Coastguard Worker module: "art-bootclasspath-fragment", 1024*333d2b36SAndroid Build Coastguard Worker }, 1025*333d2b36SAndroid Build Coastguard Worker ], 1026*333d2b36SAndroid Build Coastguard Worker hidden_api: { 1027*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 1028*333d2b36SAndroid Build Coastguard Worker }, 1029*333d2b36SAndroid Build Coastguard Worker } 1030*333d2b36SAndroid Build Coastguard Worker `) 1031*333d2b36SAndroid Build Coastguard Worker 1032*333d2b36SAndroid Build Coastguard Worker java.CheckModuleDependencies(t, result.TestContext, "mybootclasspathfragment", "android_common_apex10000", []string{ 1033*333d2b36SAndroid Build Coastguard Worker "all_apex_contributions", 1034*333d2b36SAndroid Build Coastguard Worker "android-non-updatable.stubs", 1035*333d2b36SAndroid Build Coastguard Worker "android-non-updatable.stubs.module_lib", 1036*333d2b36SAndroid Build Coastguard Worker "android-non-updatable.stubs.system", 1037*333d2b36SAndroid Build Coastguard Worker "android-non-updatable.stubs.test", 1038*333d2b36SAndroid Build Coastguard Worker "art-bootclasspath-fragment", 1039*333d2b36SAndroid Build Coastguard Worker "bar", 1040*333d2b36SAndroid Build Coastguard Worker "dex2oatd", 1041*333d2b36SAndroid Build Coastguard Worker "foo", 1042*333d2b36SAndroid Build Coastguard Worker }) 1043*333d2b36SAndroid Build Coastguard Worker 1044*333d2b36SAndroid Build Coastguard Worker nonUpdatablePublicStubs := getDexJarPath(result, "android-non-updatable.stubs") 1045*333d2b36SAndroid Build Coastguard Worker nonUpdatableSystemStubs := getDexJarPath(result, "android-non-updatable.stubs.system") 1046*333d2b36SAndroid Build Coastguard Worker nonUpdatableTestStubs := getDexJarPath(result, "android-non-updatable.stubs.test") 1047*333d2b36SAndroid Build Coastguard Worker nonUpdatableModuleLibStubs := getDexJarPath(result, "android-non-updatable.stubs.module_lib") 1048*333d2b36SAndroid Build Coastguard Worker 1049*333d2b36SAndroid Build Coastguard Worker // Make sure that the fragment uses the android-non-updatable modules when generating the hidden 1050*333d2b36SAndroid Build Coastguard Worker // API flags. 1051*333d2b36SAndroid Build Coastguard Worker fragment := result.ModuleForTests("mybootclasspathfragment", "android_common_apex10000") 1052*333d2b36SAndroid Build Coastguard Worker 1053*333d2b36SAndroid Build Coastguard Worker rule := fragment.Rule("modularHiddenAPIStubFlagsFile") 1054*333d2b36SAndroid Build Coastguard Worker command := rule.RuleParams.Command 1055*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "check correct rule", command, "hiddenapi list") 1056*333d2b36SAndroid Build Coastguard Worker 1057*333d2b36SAndroid Build Coastguard Worker // Make sure that the module_lib non-updatable stubs are available for resolving references from 1058*333d2b36SAndroid Build Coastguard Worker // the implementation boot dex jars provided by this module. 1059*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "android-non-updatable widest", command, "--dependency-stub-dex="+nonUpdatableModuleLibStubs) 1060*333d2b36SAndroid Build Coastguard Worker 1061*333d2b36SAndroid Build Coastguard Worker // Make sure that the appropriate non-updatable stubs are available for resolving references from 1062*333d2b36SAndroid Build Coastguard Worker // the different API stubs provided by this module. 1063*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "public", command, "--public-stub-classpath="+nonUpdatablePublicStubs) 1064*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "system", command, "--system-stub-classpath="+nonUpdatableSystemStubs) 1065*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "test", command, "--test-stub-classpath="+nonUpdatableTestStubs) 1066*333d2b36SAndroid Build Coastguard Worker} 1067*333d2b36SAndroid Build Coastguard Worker 1068*333d2b36SAndroid Build Coastguard Workerfunc TestBootclasspathFragment_AndroidNonUpdatable_FromText(t *testing.T) { 1069*333d2b36SAndroid Build Coastguard Worker t.Parallel() 1070*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 1071*333d2b36SAndroid Build Coastguard Worker prepareForTestWithBootclasspathFragment, 1072*333d2b36SAndroid Build Coastguard Worker prepareForTestWithArtApex, 1073*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 1074*333d2b36SAndroid Build Coastguard Worker // Configure bootclasspath jars to ensure that hidden API encoding is performed on them. 1075*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureBootJars("com.android.art:baz", "com.android.art:quuz"), 1076*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureApexBootJars("myapex:foo", "myapex:bar"), 1077*333d2b36SAndroid Build Coastguard Worker // Make sure that the frameworks/base/Android.bp file exists as otherwise hidden API encoding 1078*333d2b36SAndroid Build Coastguard Worker // is disabled. 1079*333d2b36SAndroid Build Coastguard Worker android.FixtureAddTextFile("frameworks/base/Android.bp", ""), 1080*333d2b36SAndroid Build Coastguard Worker android.FixtureModifyConfig(func(config android.Config) { 1081*333d2b36SAndroid Build Coastguard Worker config.SetBuildFromTextStub(true) 1082*333d2b36SAndroid Build Coastguard Worker }), 1083*333d2b36SAndroid Build Coastguard Worker 1084*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaSdkLibraryFiles, 1085*333d2b36SAndroid Build Coastguard Worker java.FixtureWithLastReleaseApis("foo", "android-non-updatable"), 1086*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 1087*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1088*333d2b36SAndroid Build Coastguard Worker name: "android-non-updatable", 1089*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 1090*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 1091*333d2b36SAndroid Build Coastguard Worker public: { 1092*333d2b36SAndroid Build Coastguard Worker enabled: true, 1093*333d2b36SAndroid Build Coastguard Worker }, 1094*333d2b36SAndroid Build Coastguard Worker system: { 1095*333d2b36SAndroid Build Coastguard Worker enabled: true, 1096*333d2b36SAndroid Build Coastguard Worker }, 1097*333d2b36SAndroid Build Coastguard Worker test: { 1098*333d2b36SAndroid Build Coastguard Worker enabled: true, 1099*333d2b36SAndroid Build Coastguard Worker }, 1100*333d2b36SAndroid Build Coastguard Worker module_lib: { 1101*333d2b36SAndroid Build Coastguard Worker enabled: true, 1102*333d2b36SAndroid Build Coastguard Worker }, 1103*333d2b36SAndroid Build Coastguard Worker } 1104*333d2b36SAndroid Build Coastguard Worker 1105*333d2b36SAndroid Build Coastguard Worker apex { 1106*333d2b36SAndroid Build Coastguard Worker name: "com.android.art", 1107*333d2b36SAndroid Build Coastguard Worker key: "com.android.art.key", 1108*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: ["art-bootclasspath-fragment"], 1109*333d2b36SAndroid Build Coastguard Worker updatable: false, 1110*333d2b36SAndroid Build Coastguard Worker } 1111*333d2b36SAndroid Build Coastguard Worker 1112*333d2b36SAndroid Build Coastguard Worker apex_key { 1113*333d2b36SAndroid Build Coastguard Worker name: "com.android.art.key", 1114*333d2b36SAndroid Build Coastguard Worker public_key: "com.android.art.avbpubkey", 1115*333d2b36SAndroid Build Coastguard Worker private_key: "com.android.art.pem", 1116*333d2b36SAndroid Build Coastguard Worker } 1117*333d2b36SAndroid Build Coastguard Worker 1118*333d2b36SAndroid Build Coastguard Worker java_library { 1119*333d2b36SAndroid Build Coastguard Worker name: "baz", 1120*333d2b36SAndroid Build Coastguard Worker apex_available: [ 1121*333d2b36SAndroid Build Coastguard Worker "com.android.art", 1122*333d2b36SAndroid Build Coastguard Worker ], 1123*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 1124*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 1125*333d2b36SAndroid Build Coastguard Worker sdk_version: "core_current", 1126*333d2b36SAndroid Build Coastguard Worker } 1127*333d2b36SAndroid Build Coastguard Worker 1128*333d2b36SAndroid Build Coastguard Worker java_library { 1129*333d2b36SAndroid Build Coastguard Worker name: "quuz", 1130*333d2b36SAndroid Build Coastguard Worker apex_available: [ 1131*333d2b36SAndroid Build Coastguard Worker "com.android.art", 1132*333d2b36SAndroid Build Coastguard Worker ], 1133*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 1134*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 1135*333d2b36SAndroid Build Coastguard Worker } 1136*333d2b36SAndroid Build Coastguard Worker 1137*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 1138*333d2b36SAndroid Build Coastguard Worker name: "art-bootclasspath-fragment", 1139*333d2b36SAndroid Build Coastguard Worker image_name: "art", 1140*333d2b36SAndroid Build Coastguard Worker // Must match the "com.android.art:" entries passed to FixtureConfigureBootJars above. 1141*333d2b36SAndroid Build Coastguard Worker contents: ["baz", "quuz"], 1142*333d2b36SAndroid Build Coastguard Worker apex_available: [ 1143*333d2b36SAndroid Build Coastguard Worker "com.android.art", 1144*333d2b36SAndroid Build Coastguard Worker ], 1145*333d2b36SAndroid Build Coastguard Worker hidden_api: { 1146*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 1147*333d2b36SAndroid Build Coastguard Worker }, 1148*333d2b36SAndroid Build Coastguard Worker } 1149*333d2b36SAndroid Build Coastguard Worker 1150*333d2b36SAndroid Build Coastguard Worker apex { 1151*333d2b36SAndroid Build Coastguard Worker name: "myapex", 1152*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 1153*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: [ 1154*333d2b36SAndroid Build Coastguard Worker "mybootclasspathfragment", 1155*333d2b36SAndroid Build Coastguard Worker ], 1156*333d2b36SAndroid Build Coastguard Worker updatable: false, 1157*333d2b36SAndroid Build Coastguard Worker } 1158*333d2b36SAndroid Build Coastguard Worker 1159*333d2b36SAndroid Build Coastguard Worker apex_key { 1160*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 1161*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 1162*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 1163*333d2b36SAndroid Build Coastguard Worker } 1164*333d2b36SAndroid Build Coastguard Worker 1165*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1166*333d2b36SAndroid Build Coastguard Worker name: "foo", 1167*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 1168*333d2b36SAndroid Build Coastguard Worker shared_library: false, 1169*333d2b36SAndroid Build Coastguard Worker public: {enabled: true}, 1170*333d2b36SAndroid Build Coastguard Worker apex_available: [ 1171*333d2b36SAndroid Build Coastguard Worker "myapex", 1172*333d2b36SAndroid Build Coastguard Worker ], 1173*333d2b36SAndroid Build Coastguard Worker } 1174*333d2b36SAndroid Build Coastguard Worker 1175*333d2b36SAndroid Build Coastguard Worker java_library { 1176*333d2b36SAndroid Build Coastguard Worker name: "bar", 1177*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 1178*333d2b36SAndroid Build Coastguard Worker installable: true, 1179*333d2b36SAndroid Build Coastguard Worker apex_available: [ 1180*333d2b36SAndroid Build Coastguard Worker "myapex", 1181*333d2b36SAndroid Build Coastguard Worker ], 1182*333d2b36SAndroid Build Coastguard Worker } 1183*333d2b36SAndroid Build Coastguard Worker 1184*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 1185*333d2b36SAndroid Build Coastguard Worker name: "mybootclasspathfragment", 1186*333d2b36SAndroid Build Coastguard Worker contents: [ 1187*333d2b36SAndroid Build Coastguard Worker "foo", 1188*333d2b36SAndroid Build Coastguard Worker "bar", 1189*333d2b36SAndroid Build Coastguard Worker ], 1190*333d2b36SAndroid Build Coastguard Worker apex_available: [ 1191*333d2b36SAndroid Build Coastguard Worker "myapex", 1192*333d2b36SAndroid Build Coastguard Worker ], 1193*333d2b36SAndroid Build Coastguard Worker additional_stubs: ["android-non-updatable"], 1194*333d2b36SAndroid Build Coastguard Worker fragments: [ 1195*333d2b36SAndroid Build Coastguard Worker { 1196*333d2b36SAndroid Build Coastguard Worker apex: "com.android.art", 1197*333d2b36SAndroid Build Coastguard Worker module: "art-bootclasspath-fragment", 1198*333d2b36SAndroid Build Coastguard Worker }, 1199*333d2b36SAndroid Build Coastguard Worker ], 1200*333d2b36SAndroid Build Coastguard Worker hidden_api: { 1201*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 1202*333d2b36SAndroid Build Coastguard Worker }, 1203*333d2b36SAndroid Build Coastguard Worker } 1204*333d2b36SAndroid Build Coastguard Worker `) 1205*333d2b36SAndroid Build Coastguard Worker 1206*333d2b36SAndroid Build Coastguard Worker java.CheckModuleDependencies(t, result.TestContext, "mybootclasspathfragment", "android_common_apex10000", []string{ 1207*333d2b36SAndroid Build Coastguard Worker "all_apex_contributions", 1208*333d2b36SAndroid Build Coastguard Worker "android-non-updatable.stubs", 1209*333d2b36SAndroid Build Coastguard Worker "android-non-updatable.stubs.system", 1210*333d2b36SAndroid Build Coastguard Worker "android-non-updatable.stubs.test", 1211*333d2b36SAndroid Build Coastguard Worker "android-non-updatable.stubs.test_module_lib", 1212*333d2b36SAndroid Build Coastguard Worker "art-bootclasspath-fragment", 1213*333d2b36SAndroid Build Coastguard Worker "bar", 1214*333d2b36SAndroid Build Coastguard Worker "dex2oatd", 1215*333d2b36SAndroid Build Coastguard Worker "foo", 1216*333d2b36SAndroid Build Coastguard Worker }) 1217*333d2b36SAndroid Build Coastguard Worker 1218*333d2b36SAndroid Build Coastguard Worker nonUpdatableTestModuleLibStubs := getDexJarPath(result, "android-non-updatable.stubs.test_module_lib") 1219*333d2b36SAndroid Build Coastguard Worker 1220*333d2b36SAndroid Build Coastguard Worker // Make sure that the fragment uses the android-non-updatable modules when generating the hidden 1221*333d2b36SAndroid Build Coastguard Worker // API flags. 1222*333d2b36SAndroid Build Coastguard Worker fragment := result.ModuleForTests("mybootclasspathfragment", "android_common_apex10000") 1223*333d2b36SAndroid Build Coastguard Worker 1224*333d2b36SAndroid Build Coastguard Worker rule := fragment.Rule("modularHiddenAPIStubFlagsFile") 1225*333d2b36SAndroid Build Coastguard Worker command := rule.RuleParams.Command 1226*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "check correct rule", command, "hiddenapi list") 1227*333d2b36SAndroid Build Coastguard Worker 1228*333d2b36SAndroid Build Coastguard Worker // Make sure that the test_module_lib non-updatable stubs are available for resolving references from 1229*333d2b36SAndroid Build Coastguard Worker // the implementation boot dex jars provided by this module. 1230*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "android-non-updatable widest", command, "--dependency-stub-dex="+nonUpdatableTestModuleLibStubs) 1231*333d2b36SAndroid Build Coastguard Worker} 1232*333d2b36SAndroid Build Coastguard Worker 1233*333d2b36SAndroid Build Coastguard Worker// TestBootclasspathFragment_AndroidNonUpdatable_AlwaysUsePrebuiltSdks checks to make sure that 1234*333d2b36SAndroid Build Coastguard Worker// setting additional_stubs: ["android-non-updatable"] causes the prebuilt android-non-updatable 1235*333d2b36SAndroid Build Coastguard Worker// modules to be added to the hiddenapi list tool. 1236*333d2b36SAndroid Build Coastguard Workerfunc TestBootclasspathFragment_AndroidNonUpdatable_AlwaysUsePrebuiltSdks(t *testing.T) { 1237*333d2b36SAndroid Build Coastguard Worker t.Parallel() 1238*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 1239*333d2b36SAndroid Build Coastguard Worker prepareForTestWithBootclasspathFragment, 1240*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithDexpreopt, 1241*333d2b36SAndroid Build Coastguard Worker prepareForTestWithArtApex, 1242*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 1243*333d2b36SAndroid Build Coastguard Worker // Configure bootclasspath jars to ensure that hidden API encoding is performed on them. 1244*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureBootJars("com.android.art:baz", "com.android.art:quuz"), 1245*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureApexBootJars("myapex:foo", "myapex:bar"), 1246*333d2b36SAndroid Build Coastguard Worker // Make sure that the frameworks/base/Android.bp file exists as otherwise hidden API encoding 1247*333d2b36SAndroid Build Coastguard Worker // is disabled. 1248*333d2b36SAndroid Build Coastguard Worker android.FixtureAddTextFile("frameworks/base/Android.bp", ""), 1249*333d2b36SAndroid Build Coastguard Worker 1250*333d2b36SAndroid Build Coastguard Worker android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { 1251*333d2b36SAndroid Build Coastguard Worker variables.Always_use_prebuilt_sdks = proptools.BoolPtr(true) 1252*333d2b36SAndroid Build Coastguard Worker }), 1253*333d2b36SAndroid Build Coastguard Worker 1254*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaSdkLibraryFiles, 1255*333d2b36SAndroid Build Coastguard Worker java.FixtureWithPrebuiltApis(map[string][]string{ 1256*333d2b36SAndroid Build Coastguard Worker "current": {"android-non-updatable"}, 1257*333d2b36SAndroid Build Coastguard Worker "30": {"foo"}, 1258*333d2b36SAndroid Build Coastguard Worker }), 1259*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 1260*333d2b36SAndroid Build Coastguard Worker apex { 1261*333d2b36SAndroid Build Coastguard Worker name: "com.android.art", 1262*333d2b36SAndroid Build Coastguard Worker key: "com.android.art.key", 1263*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: ["art-bootclasspath-fragment"], 1264*333d2b36SAndroid Build Coastguard Worker updatable: false, 1265*333d2b36SAndroid Build Coastguard Worker } 1266*333d2b36SAndroid Build Coastguard Worker 1267*333d2b36SAndroid Build Coastguard Worker apex_key { 1268*333d2b36SAndroid Build Coastguard Worker name: "com.android.art.key", 1269*333d2b36SAndroid Build Coastguard Worker public_key: "com.android.art.avbpubkey", 1270*333d2b36SAndroid Build Coastguard Worker private_key: "com.android.art.pem", 1271*333d2b36SAndroid Build Coastguard Worker } 1272*333d2b36SAndroid Build Coastguard Worker 1273*333d2b36SAndroid Build Coastguard Worker java_library { 1274*333d2b36SAndroid Build Coastguard Worker name: "baz", 1275*333d2b36SAndroid Build Coastguard Worker apex_available: [ 1276*333d2b36SAndroid Build Coastguard Worker "com.android.art", 1277*333d2b36SAndroid Build Coastguard Worker ], 1278*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 1279*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 1280*333d2b36SAndroid Build Coastguard Worker sdk_version: "core_current", 1281*333d2b36SAndroid Build Coastguard Worker } 1282*333d2b36SAndroid Build Coastguard Worker 1283*333d2b36SAndroid Build Coastguard Worker java_library { 1284*333d2b36SAndroid Build Coastguard Worker name: "quuz", 1285*333d2b36SAndroid Build Coastguard Worker apex_available: [ 1286*333d2b36SAndroid Build Coastguard Worker "com.android.art", 1287*333d2b36SAndroid Build Coastguard Worker ], 1288*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 1289*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 1290*333d2b36SAndroid Build Coastguard Worker } 1291*333d2b36SAndroid Build Coastguard Worker 1292*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 1293*333d2b36SAndroid Build Coastguard Worker name: "art-bootclasspath-fragment", 1294*333d2b36SAndroid Build Coastguard Worker image_name: "art", 1295*333d2b36SAndroid Build Coastguard Worker // Must match the "com.android.art:" entries passed to FixtureConfigureBootJars above. 1296*333d2b36SAndroid Build Coastguard Worker contents: ["baz", "quuz"], 1297*333d2b36SAndroid Build Coastguard Worker apex_available: [ 1298*333d2b36SAndroid Build Coastguard Worker "com.android.art", 1299*333d2b36SAndroid Build Coastguard Worker ], 1300*333d2b36SAndroid Build Coastguard Worker hidden_api: { 1301*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 1302*333d2b36SAndroid Build Coastguard Worker }, 1303*333d2b36SAndroid Build Coastguard Worker } 1304*333d2b36SAndroid Build Coastguard Worker 1305*333d2b36SAndroid Build Coastguard Worker apex { 1306*333d2b36SAndroid Build Coastguard Worker name: "myapex", 1307*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 1308*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: [ 1309*333d2b36SAndroid Build Coastguard Worker "mybootclasspathfragment", 1310*333d2b36SAndroid Build Coastguard Worker ], 1311*333d2b36SAndroid Build Coastguard Worker updatable: false, 1312*333d2b36SAndroid Build Coastguard Worker } 1313*333d2b36SAndroid Build Coastguard Worker 1314*333d2b36SAndroid Build Coastguard Worker apex_key { 1315*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 1316*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 1317*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 1318*333d2b36SAndroid Build Coastguard Worker } 1319*333d2b36SAndroid Build Coastguard Worker 1320*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1321*333d2b36SAndroid Build Coastguard Worker name: "foo", 1322*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 1323*333d2b36SAndroid Build Coastguard Worker shared_library: false, 1324*333d2b36SAndroid Build Coastguard Worker public: {enabled: true}, 1325*333d2b36SAndroid Build Coastguard Worker apex_available: [ 1326*333d2b36SAndroid Build Coastguard Worker "myapex", 1327*333d2b36SAndroid Build Coastguard Worker ], 1328*333d2b36SAndroid Build Coastguard Worker } 1329*333d2b36SAndroid Build Coastguard Worker 1330*333d2b36SAndroid Build Coastguard Worker java_library { 1331*333d2b36SAndroid Build Coastguard Worker name: "bar", 1332*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 1333*333d2b36SAndroid Build Coastguard Worker installable: true, 1334*333d2b36SAndroid Build Coastguard Worker apex_available: [ 1335*333d2b36SAndroid Build Coastguard Worker "myapex", 1336*333d2b36SAndroid Build Coastguard Worker ], 1337*333d2b36SAndroid Build Coastguard Worker } 1338*333d2b36SAndroid Build Coastguard Worker 1339*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 1340*333d2b36SAndroid Build Coastguard Worker name: "mybootclasspathfragment", 1341*333d2b36SAndroid Build Coastguard Worker contents: [ 1342*333d2b36SAndroid Build Coastguard Worker "foo", 1343*333d2b36SAndroid Build Coastguard Worker "bar", 1344*333d2b36SAndroid Build Coastguard Worker ], 1345*333d2b36SAndroid Build Coastguard Worker apex_available: [ 1346*333d2b36SAndroid Build Coastguard Worker "myapex", 1347*333d2b36SAndroid Build Coastguard Worker ], 1348*333d2b36SAndroid Build Coastguard Worker additional_stubs: ["android-non-updatable"], 1349*333d2b36SAndroid Build Coastguard Worker fragments: [ 1350*333d2b36SAndroid Build Coastguard Worker { 1351*333d2b36SAndroid Build Coastguard Worker apex: "com.android.art", 1352*333d2b36SAndroid Build Coastguard Worker module: "art-bootclasspath-fragment", 1353*333d2b36SAndroid Build Coastguard Worker }, 1354*333d2b36SAndroid Build Coastguard Worker ], 1355*333d2b36SAndroid Build Coastguard Worker hidden_api: { 1356*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 1357*333d2b36SAndroid Build Coastguard Worker }, 1358*333d2b36SAndroid Build Coastguard Worker } 1359*333d2b36SAndroid Build Coastguard Worker `) 1360*333d2b36SAndroid Build Coastguard Worker 1361*333d2b36SAndroid Build Coastguard Worker java.CheckModuleDependencies(t, result.TestContext, "mybootclasspathfragment", "android_common_apex10000", []string{ 1362*333d2b36SAndroid Build Coastguard Worker "all_apex_contributions", 1363*333d2b36SAndroid Build Coastguard Worker "art-bootclasspath-fragment", 1364*333d2b36SAndroid Build Coastguard Worker "bar", 1365*333d2b36SAndroid Build Coastguard Worker "dex2oatd", 1366*333d2b36SAndroid Build Coastguard Worker "foo", 1367*333d2b36SAndroid Build Coastguard Worker "prebuilt_sdk_module-lib_current_android-non-updatable", 1368*333d2b36SAndroid Build Coastguard Worker "prebuilt_sdk_public_current_android-non-updatable", 1369*333d2b36SAndroid Build Coastguard Worker "prebuilt_sdk_system_current_android-non-updatable", 1370*333d2b36SAndroid Build Coastguard Worker "prebuilt_sdk_test_current_android-non-updatable", 1371*333d2b36SAndroid Build Coastguard Worker }) 1372*333d2b36SAndroid Build Coastguard Worker 1373*333d2b36SAndroid Build Coastguard Worker nonUpdatablePublicStubs := getDexJarPath(result, "sdk_public_current_android-non-updatable") 1374*333d2b36SAndroid Build Coastguard Worker nonUpdatableSystemStubs := getDexJarPath(result, "sdk_system_current_android-non-updatable") 1375*333d2b36SAndroid Build Coastguard Worker nonUpdatableTestStubs := getDexJarPath(result, "sdk_test_current_android-non-updatable") 1376*333d2b36SAndroid Build Coastguard Worker nonUpdatableModuleLibStubs := getDexJarPath(result, "sdk_module-lib_current_android-non-updatable") 1377*333d2b36SAndroid Build Coastguard Worker 1378*333d2b36SAndroid Build Coastguard Worker // Make sure that the fragment uses the android-non-updatable modules when generating the hidden 1379*333d2b36SAndroid Build Coastguard Worker // API flags. 1380*333d2b36SAndroid Build Coastguard Worker fragment := result.ModuleForTests("mybootclasspathfragment", "android_common_apex10000") 1381*333d2b36SAndroid Build Coastguard Worker 1382*333d2b36SAndroid Build Coastguard Worker rule := fragment.Rule("modularHiddenAPIStubFlagsFile") 1383*333d2b36SAndroid Build Coastguard Worker command := rule.RuleParams.Command 1384*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "check correct rule", command, "hiddenapi list") 1385*333d2b36SAndroid Build Coastguard Worker 1386*333d2b36SAndroid Build Coastguard Worker // Make sure that the module_lib non-updatable stubs are available for resolving references from 1387*333d2b36SAndroid Build Coastguard Worker // the implementation boot dex jars provided by this module. 1388*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "android-non-updatable widest", command, "--dependency-stub-dex="+nonUpdatableModuleLibStubs) 1389*333d2b36SAndroid Build Coastguard Worker 1390*333d2b36SAndroid Build Coastguard Worker // Make sure that the appropriate non-updatable stubs are available for resolving references from 1391*333d2b36SAndroid Build Coastguard Worker // the different API stubs provided by this module. 1392*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "public", command, "--public-stub-classpath="+nonUpdatablePublicStubs) 1393*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "system", command, "--system-stub-classpath="+nonUpdatableSystemStubs) 1394*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "test", command, "--test-stub-classpath="+nonUpdatableTestStubs) 1395*333d2b36SAndroid Build Coastguard Worker} 1396*333d2b36SAndroid Build Coastguard Worker 1397*333d2b36SAndroid Build Coastguard Workerfunc TestBootclasspathFragmentProtoContainsMinSdkVersion(t *testing.T) { 1398*333d2b36SAndroid Build Coastguard Worker t.Parallel() 1399*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 1400*333d2b36SAndroid Build Coastguard Worker prepareForTestWithBootclasspathFragment, 1401*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 1402*333d2b36SAndroid Build Coastguard Worker // Configure bootclasspath jars to ensure that hidden API encoding is performed on them. 1403*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureApexBootJars("myapex:foo", "myapex:bar"), 1404*333d2b36SAndroid Build Coastguard Worker // Make sure that the frameworks/base/Android.bp file exists as otherwise hidden API encoding 1405*333d2b36SAndroid Build Coastguard Worker // is disabled. 1406*333d2b36SAndroid Build Coastguard Worker android.FixtureAddTextFile("frameworks/base/Android.bp", ""), 1407*333d2b36SAndroid Build Coastguard Worker 1408*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaSdkLibraryFiles, 1409*333d2b36SAndroid Build Coastguard Worker java.FixtureWithLastReleaseApis("foo", "bar"), 1410*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 1411*333d2b36SAndroid Build Coastguard Worker apex { 1412*333d2b36SAndroid Build Coastguard Worker name: "myapex", 1413*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 1414*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: [ 1415*333d2b36SAndroid Build Coastguard Worker "mybootclasspathfragment", 1416*333d2b36SAndroid Build Coastguard Worker ], 1417*333d2b36SAndroid Build Coastguard Worker updatable: false, 1418*333d2b36SAndroid Build Coastguard Worker } 1419*333d2b36SAndroid Build Coastguard Worker 1420*333d2b36SAndroid Build Coastguard Worker apex_key { 1421*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 1422*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 1423*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 1424*333d2b36SAndroid Build Coastguard Worker } 1425*333d2b36SAndroid Build Coastguard Worker 1426*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1427*333d2b36SAndroid Build Coastguard Worker name: "foo", 1428*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 1429*333d2b36SAndroid Build Coastguard Worker shared_library: false, 1430*333d2b36SAndroid Build Coastguard Worker public: {enabled: true}, 1431*333d2b36SAndroid Build Coastguard Worker apex_available: [ 1432*333d2b36SAndroid Build Coastguard Worker "myapex", 1433*333d2b36SAndroid Build Coastguard Worker ], 1434*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "33", 1435*333d2b36SAndroid Build Coastguard Worker } 1436*333d2b36SAndroid Build Coastguard Worker 1437*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 1438*333d2b36SAndroid Build Coastguard Worker name: "bar", 1439*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 1440*333d2b36SAndroid Build Coastguard Worker shared_library: false, 1441*333d2b36SAndroid Build Coastguard Worker public: {enabled: true}, 1442*333d2b36SAndroid Build Coastguard Worker apex_available: [ 1443*333d2b36SAndroid Build Coastguard Worker "myapex", 1444*333d2b36SAndroid Build Coastguard Worker ], 1445*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "34", 1446*333d2b36SAndroid Build Coastguard Worker } 1447*333d2b36SAndroid Build Coastguard Worker 1448*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 1449*333d2b36SAndroid Build Coastguard Worker name: "mybootclasspathfragment", 1450*333d2b36SAndroid Build Coastguard Worker contents: [ 1451*333d2b36SAndroid Build Coastguard Worker "foo", 1452*333d2b36SAndroid Build Coastguard Worker "bar", 1453*333d2b36SAndroid Build Coastguard Worker ], 1454*333d2b36SAndroid Build Coastguard Worker apex_available: [ 1455*333d2b36SAndroid Build Coastguard Worker "myapex", 1456*333d2b36SAndroid Build Coastguard Worker ], 1457*333d2b36SAndroid Build Coastguard Worker hidden_api: { 1458*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 1459*333d2b36SAndroid Build Coastguard Worker }, 1460*333d2b36SAndroid Build Coastguard Worker } 1461*333d2b36SAndroid Build Coastguard Worker `) 1462*333d2b36SAndroid Build Coastguard Worker 1463*333d2b36SAndroid Build Coastguard Worker fragment := result.ModuleForTests("mybootclasspathfragment", "android_common_apex10000") 1464*333d2b36SAndroid Build Coastguard Worker classPathProtoContent := android.ContentFromFileRuleForTests(t, result.TestContext, fragment.Output("bootclasspath.pb.textproto")) 1465*333d2b36SAndroid Build Coastguard Worker // foo 1466*333d2b36SAndroid Build Coastguard Worker ensureContains(t, classPathProtoContent, `jars { 1467*333d2b36SAndroid Build Coastguard Workerpath: "/apex/myapex/javalib/foo.jar" 1468*333d2b36SAndroid Build Coastguard Workerclasspath: BOOTCLASSPATH 1469*333d2b36SAndroid Build Coastguard Workermin_sdk_version: "33" 1470*333d2b36SAndroid Build Coastguard Workermax_sdk_version: "" 1471*333d2b36SAndroid Build Coastguard Worker} 1472*333d2b36SAndroid Build Coastguard Worker`) 1473*333d2b36SAndroid Build Coastguard Worker // bar 1474*333d2b36SAndroid Build Coastguard Worker ensureContains(t, classPathProtoContent, `jars { 1475*333d2b36SAndroid Build Coastguard Workerpath: "/apex/myapex/javalib/bar.jar" 1476*333d2b36SAndroid Build Coastguard Workerclasspath: BOOTCLASSPATH 1477*333d2b36SAndroid Build Coastguard Workermin_sdk_version: "34" 1478*333d2b36SAndroid Build Coastguard Workermax_sdk_version: "" 1479*333d2b36SAndroid Build Coastguard Worker} 1480*333d2b36SAndroid Build Coastguard Worker`) 1481*333d2b36SAndroid Build Coastguard Worker} 1482*333d2b36SAndroid Build Coastguard Worker 1483*333d2b36SAndroid Build Coastguard Worker// TODO(b/177892522) - add test for host apex. 1484