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 "strings" 20*333d2b36SAndroid Build Coastguard Worker "testing" 21*333d2b36SAndroid Build Coastguard Worker 22*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 23*333d2b36SAndroid Build Coastguard Worker "android/soong/dexpreopt" 24*333d2b36SAndroid Build Coastguard Worker "android/soong/java" 25*333d2b36SAndroid Build Coastguard Worker 26*333d2b36SAndroid Build Coastguard Worker "github.com/google/blueprint" 27*333d2b36SAndroid Build Coastguard Worker "github.com/google/blueprint/proptools" 28*333d2b36SAndroid Build Coastguard Worker) 29*333d2b36SAndroid Build Coastguard Worker 30*333d2b36SAndroid Build Coastguard Worker// Contains tests for platform_bootclasspath logic from java/platform_bootclasspath.go that requires 31*333d2b36SAndroid Build Coastguard Worker// apexes. 32*333d2b36SAndroid Build Coastguard Worker 33*333d2b36SAndroid Build Coastguard Workervar prepareForTestWithPlatformBootclasspath = android.GroupFixturePreparers( 34*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaDefaultModules, 35*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithApexBuildComponents, 36*333d2b36SAndroid Build Coastguard Worker) 37*333d2b36SAndroid Build Coastguard Worker 38*333d2b36SAndroid Build Coastguard Workerfunc TestPlatformBootclasspath_Fragments(t *testing.T) { 39*333d2b36SAndroid Build Coastguard Worker t.Parallel() 40*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 41*333d2b36SAndroid Build Coastguard Worker prepareForTestWithPlatformBootclasspath, 42*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 43*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaSdkLibraryFiles, 44*333d2b36SAndroid Build Coastguard Worker java.FixtureWithLastReleaseApis("foo"), 45*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureApexBootJars("myapex:bar"), 46*333d2b36SAndroid Build Coastguard Worker android.FixtureWithRootAndroidBp(` 47*333d2b36SAndroid Build Coastguard Worker platform_bootclasspath { 48*333d2b36SAndroid Build Coastguard Worker name: "platform-bootclasspath", 49*333d2b36SAndroid Build Coastguard Worker fragments: [ 50*333d2b36SAndroid Build Coastguard Worker { 51*333d2b36SAndroid Build Coastguard Worker apex: "myapex", 52*333d2b36SAndroid Build Coastguard Worker module:"bar-fragment", 53*333d2b36SAndroid Build Coastguard Worker }, 54*333d2b36SAndroid Build Coastguard Worker ], 55*333d2b36SAndroid Build Coastguard Worker hidden_api: { 56*333d2b36SAndroid Build Coastguard Worker unsupported: [ 57*333d2b36SAndroid Build Coastguard Worker "unsupported.txt", 58*333d2b36SAndroid Build Coastguard Worker ], 59*333d2b36SAndroid Build Coastguard Worker removed: [ 60*333d2b36SAndroid Build Coastguard Worker "removed.txt", 61*333d2b36SAndroid Build Coastguard Worker ], 62*333d2b36SAndroid Build Coastguard Worker max_target_r_low_priority: [ 63*333d2b36SAndroid Build Coastguard Worker "max-target-r-low-priority.txt", 64*333d2b36SAndroid Build Coastguard Worker ], 65*333d2b36SAndroid Build Coastguard Worker max_target_q: [ 66*333d2b36SAndroid Build Coastguard Worker "max-target-q.txt", 67*333d2b36SAndroid Build Coastguard Worker ], 68*333d2b36SAndroid Build Coastguard Worker max_target_p: [ 69*333d2b36SAndroid Build Coastguard Worker "max-target-p.txt", 70*333d2b36SAndroid Build Coastguard Worker ], 71*333d2b36SAndroid Build Coastguard Worker max_target_o_low_priority: [ 72*333d2b36SAndroid Build Coastguard Worker "max-target-o-low-priority.txt", 73*333d2b36SAndroid Build Coastguard Worker ], 74*333d2b36SAndroid Build Coastguard Worker blocked: [ 75*333d2b36SAndroid Build Coastguard Worker "blocked.txt", 76*333d2b36SAndroid Build Coastguard Worker ], 77*333d2b36SAndroid Build Coastguard Worker unsupported_packages: [ 78*333d2b36SAndroid Build Coastguard Worker "unsupported-packages.txt", 79*333d2b36SAndroid Build Coastguard Worker ], 80*333d2b36SAndroid Build Coastguard Worker }, 81*333d2b36SAndroid Build Coastguard Worker } 82*333d2b36SAndroid Build Coastguard Worker 83*333d2b36SAndroid Build Coastguard Worker apex { 84*333d2b36SAndroid Build Coastguard Worker name: "myapex", 85*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 86*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: [ 87*333d2b36SAndroid Build Coastguard Worker "bar-fragment", 88*333d2b36SAndroid Build Coastguard Worker ], 89*333d2b36SAndroid Build Coastguard Worker updatable: false, 90*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "30", // R 91*333d2b36SAndroid Build Coastguard Worker } 92*333d2b36SAndroid Build Coastguard Worker 93*333d2b36SAndroid Build Coastguard Worker apex_key { 94*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 95*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 96*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 97*333d2b36SAndroid Build Coastguard Worker } 98*333d2b36SAndroid Build Coastguard Worker 99*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 100*333d2b36SAndroid Build Coastguard Worker name: "bar-fragment", 101*333d2b36SAndroid Build Coastguard Worker contents: ["bar"], 102*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 103*333d2b36SAndroid Build Coastguard Worker api: { 104*333d2b36SAndroid Build Coastguard Worker stub_libs: ["foo"], 105*333d2b36SAndroid Build Coastguard Worker }, 106*333d2b36SAndroid Build Coastguard Worker hidden_api: { 107*333d2b36SAndroid Build Coastguard Worker unsupported: [ 108*333d2b36SAndroid Build Coastguard Worker "bar-unsupported.txt", 109*333d2b36SAndroid Build Coastguard Worker ], 110*333d2b36SAndroid Build Coastguard Worker removed: [ 111*333d2b36SAndroid Build Coastguard Worker "bar-removed.txt", 112*333d2b36SAndroid Build Coastguard Worker ], 113*333d2b36SAndroid Build Coastguard Worker max_target_r_low_priority: [ 114*333d2b36SAndroid Build Coastguard Worker "bar-max-target-r-low-priority.txt", 115*333d2b36SAndroid Build Coastguard Worker ], 116*333d2b36SAndroid Build Coastguard Worker max_target_q: [ 117*333d2b36SAndroid Build Coastguard Worker "bar-max-target-q.txt", 118*333d2b36SAndroid Build Coastguard Worker ], 119*333d2b36SAndroid Build Coastguard Worker max_target_p: [ 120*333d2b36SAndroid Build Coastguard Worker "bar-max-target-p.txt", 121*333d2b36SAndroid Build Coastguard Worker ], 122*333d2b36SAndroid Build Coastguard Worker max_target_o_low_priority: [ 123*333d2b36SAndroid Build Coastguard Worker "bar-max-target-o-low-priority.txt", 124*333d2b36SAndroid Build Coastguard Worker ], 125*333d2b36SAndroid Build Coastguard Worker blocked: [ 126*333d2b36SAndroid Build Coastguard Worker "bar-blocked.txt", 127*333d2b36SAndroid Build Coastguard Worker ], 128*333d2b36SAndroid Build Coastguard Worker unsupported_packages: [ 129*333d2b36SAndroid Build Coastguard Worker "bar-unsupported-packages.txt", 130*333d2b36SAndroid Build Coastguard Worker ], 131*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 132*333d2b36SAndroid Build Coastguard Worker }, 133*333d2b36SAndroid Build Coastguard Worker } 134*333d2b36SAndroid Build Coastguard Worker 135*333d2b36SAndroid Build Coastguard Worker java_library { 136*333d2b36SAndroid Build Coastguard Worker name: "bar", 137*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 138*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 139*333d2b36SAndroid Build Coastguard Worker system_modules: "none", 140*333d2b36SAndroid Build Coastguard Worker sdk_version: "none", 141*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 142*333d2b36SAndroid Build Coastguard Worker permitted_packages: ["bar"], 143*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "30", // R 144*333d2b36SAndroid Build Coastguard Worker } 145*333d2b36SAndroid Build Coastguard Worker 146*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 147*333d2b36SAndroid Build Coastguard Worker name: "foo", 148*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 149*333d2b36SAndroid Build Coastguard Worker public: { 150*333d2b36SAndroid Build Coastguard Worker enabled: true, 151*333d2b36SAndroid Build Coastguard Worker }, 152*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 153*333d2b36SAndroid Build Coastguard Worker } 154*333d2b36SAndroid Build Coastguard Worker `), 155*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 156*333d2b36SAndroid Build Coastguard Worker 157*333d2b36SAndroid Build Coastguard Worker pbcp := result.Module("platform-bootclasspath", "android_common") 158*333d2b36SAndroid Build Coastguard Worker info, _ := android.OtherModuleProvider(result, pbcp, java.MonolithicHiddenAPIInfoProvider) 159*333d2b36SAndroid Build Coastguard Worker 160*333d2b36SAndroid Build Coastguard Worker for _, category := range java.HiddenAPIFlagFileCategories { 161*333d2b36SAndroid Build Coastguard Worker name := category.PropertyName() 162*333d2b36SAndroid Build Coastguard Worker message := fmt.Sprintf("category %s", name) 163*333d2b36SAndroid Build Coastguard Worker filename := strings.ReplaceAll(name, "_", "-") 164*333d2b36SAndroid Build Coastguard Worker expected := []string{fmt.Sprintf("%s.txt", filename), fmt.Sprintf("bar-%s.txt", filename)} 165*333d2b36SAndroid Build Coastguard Worker android.AssertPathsRelativeToTopEquals(t, message, expected, info.FlagsFilesByCategory[category]) 166*333d2b36SAndroid Build Coastguard Worker } 167*333d2b36SAndroid Build Coastguard Worker 168*333d2b36SAndroid Build Coastguard Worker android.AssertPathsRelativeToTopEquals(t, "annotation flags", []string{"out/soong/.intermediates/bar-fragment/android_common_apex30/modular-hiddenapi/annotation-flags.csv"}, info.AnnotationFlagsPaths) 169*333d2b36SAndroid Build Coastguard Worker android.AssertPathsRelativeToTopEquals(t, "metadata flags", []string{"out/soong/.intermediates/bar-fragment/android_common_apex30/modular-hiddenapi/metadata.csv"}, info.MetadataPaths) 170*333d2b36SAndroid Build Coastguard Worker android.AssertPathsRelativeToTopEquals(t, "index flags", []string{"out/soong/.intermediates/bar-fragment/android_common_apex30/modular-hiddenapi/index.csv"}, info.IndexPaths) 171*333d2b36SAndroid Build Coastguard Worker 172*333d2b36SAndroid Build Coastguard Worker android.AssertArrayString(t, "stub flags", []string{"out/soong/.intermediates/bar-fragment/android_common_apex30/modular-hiddenapi/filtered-stub-flags.csv:out/soong/.intermediates/bar-fragment/android_common_apex30/modular-hiddenapi/signature-patterns.csv"}, info.StubFlagSubsets.RelativeToTop()) 173*333d2b36SAndroid Build Coastguard Worker android.AssertArrayString(t, "all flags", []string{"out/soong/.intermediates/bar-fragment/android_common_apex30/modular-hiddenapi/filtered-flags.csv:out/soong/.intermediates/bar-fragment/android_common_apex30/modular-hiddenapi/signature-patterns.csv"}, info.FlagSubsets.RelativeToTop()) 174*333d2b36SAndroid Build Coastguard Worker} 175*333d2b36SAndroid Build Coastguard Worker 176*333d2b36SAndroid Build Coastguard Worker// TestPlatformBootclasspath_LegacyPrebuiltFragment verifies that the 177*333d2b36SAndroid Build Coastguard Worker// prebuilt_bootclasspath_fragment falls back to using the complete stub-flags/all-flags if the 178*333d2b36SAndroid Build Coastguard Worker// filtered files are not provided. 179*333d2b36SAndroid Build Coastguard Worker// 180*333d2b36SAndroid Build Coastguard Worker// TODO: Remove once all prebuilts use the filtered_... properties. 181*333d2b36SAndroid Build Coastguard Workerfunc TestPlatformBootclasspath_LegacyPrebuiltFragment(t *testing.T) { 182*333d2b36SAndroid Build Coastguard Worker t.Parallel() 183*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 184*333d2b36SAndroid Build Coastguard Worker prepareForTestWithPlatformBootclasspath, 185*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureApexBootJars("myapex:foo"), 186*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaSdkLibraryFiles, 187*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 188*333d2b36SAndroid Build Coastguard Worker prebuilt_apex { 189*333d2b36SAndroid Build Coastguard Worker name: "myapex", 190*333d2b36SAndroid Build Coastguard Worker src: "myapex.apex", 191*333d2b36SAndroid Build Coastguard Worker exported_bootclasspath_fragments: ["mybootclasspath-fragment"], 192*333d2b36SAndroid Build Coastguard Worker } 193*333d2b36SAndroid Build Coastguard Worker 194*333d2b36SAndroid Build Coastguard Worker // A prebuilt java_sdk_library_import that is not preferred by default but will be preferred 195*333d2b36SAndroid Build Coastguard Worker // because AlwaysUsePrebuiltSdks() is true. 196*333d2b36SAndroid Build Coastguard Worker java_sdk_library_import { 197*333d2b36SAndroid Build Coastguard Worker name: "foo", 198*333d2b36SAndroid Build Coastguard Worker prefer: false, 199*333d2b36SAndroid Build Coastguard Worker shared_library: false, 200*333d2b36SAndroid Build Coastguard Worker permitted_packages: ["foo"], 201*333d2b36SAndroid Build Coastguard Worker public: { 202*333d2b36SAndroid Build Coastguard Worker jars: ["sdk_library/public/foo-stubs.jar"], 203*333d2b36SAndroid Build Coastguard Worker stub_srcs: ["sdk_library/public/foo_stub_sources"], 204*333d2b36SAndroid Build Coastguard Worker current_api: "sdk_library/public/foo.txt", 205*333d2b36SAndroid Build Coastguard Worker removed_api: "sdk_library/public/foo-removed.txt", 206*333d2b36SAndroid Build Coastguard Worker sdk_version: "current", 207*333d2b36SAndroid Build Coastguard Worker }, 208*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 209*333d2b36SAndroid Build Coastguard Worker } 210*333d2b36SAndroid Build Coastguard Worker 211*333d2b36SAndroid Build Coastguard Worker prebuilt_bootclasspath_fragment { 212*333d2b36SAndroid Build Coastguard Worker name: "mybootclasspath-fragment", 213*333d2b36SAndroid Build Coastguard Worker apex_available: [ 214*333d2b36SAndroid Build Coastguard Worker "myapex", 215*333d2b36SAndroid Build Coastguard Worker ], 216*333d2b36SAndroid Build Coastguard Worker contents: [ 217*333d2b36SAndroid Build Coastguard Worker "foo", 218*333d2b36SAndroid Build Coastguard Worker ], 219*333d2b36SAndroid Build Coastguard Worker hidden_api: { 220*333d2b36SAndroid Build Coastguard Worker stub_flags: "prebuilt-stub-flags.csv", 221*333d2b36SAndroid Build Coastguard Worker annotation_flags: "prebuilt-annotation-flags.csv", 222*333d2b36SAndroid Build Coastguard Worker metadata: "prebuilt-metadata.csv", 223*333d2b36SAndroid Build Coastguard Worker index: "prebuilt-index.csv", 224*333d2b36SAndroid Build Coastguard Worker all_flags: "prebuilt-all-flags.csv", 225*333d2b36SAndroid Build Coastguard Worker }, 226*333d2b36SAndroid Build Coastguard Worker } 227*333d2b36SAndroid Build Coastguard Worker 228*333d2b36SAndroid Build Coastguard Worker platform_bootclasspath { 229*333d2b36SAndroid Build Coastguard Worker name: "myplatform-bootclasspath", 230*333d2b36SAndroid Build Coastguard Worker fragments: [ 231*333d2b36SAndroid Build Coastguard Worker { 232*333d2b36SAndroid Build Coastguard Worker apex: "myapex", 233*333d2b36SAndroid Build Coastguard Worker module:"mybootclasspath-fragment", 234*333d2b36SAndroid Build Coastguard Worker }, 235*333d2b36SAndroid Build Coastguard Worker ], 236*333d2b36SAndroid Build Coastguard Worker } 237*333d2b36SAndroid Build Coastguard Worker`, 238*333d2b36SAndroid Build Coastguard Worker ) 239*333d2b36SAndroid Build Coastguard Worker 240*333d2b36SAndroid Build Coastguard Worker pbcp := result.Module("myplatform-bootclasspath", "android_common") 241*333d2b36SAndroid Build Coastguard Worker info, _ := android.OtherModuleProvider(result, pbcp, java.MonolithicHiddenAPIInfoProvider) 242*333d2b36SAndroid Build Coastguard Worker 243*333d2b36SAndroid Build Coastguard Worker android.AssertArrayString(t, "stub flags", []string{"prebuilt-stub-flags.csv:out/soong/.intermediates/mybootclasspath-fragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv"}, info.StubFlagSubsets.RelativeToTop()) 244*333d2b36SAndroid Build Coastguard Worker android.AssertArrayString(t, "all flags", []string{"prebuilt-all-flags.csv:out/soong/.intermediates/mybootclasspath-fragment/android_common_myapex/modular-hiddenapi/signature-patterns.csv"}, info.FlagSubsets.RelativeToTop()) 245*333d2b36SAndroid Build Coastguard Worker} 246*333d2b36SAndroid Build Coastguard Worker 247*333d2b36SAndroid Build Coastguard Workerfunc TestPlatformBootclasspathDependencies(t *testing.T) { 248*333d2b36SAndroid Build Coastguard Worker t.Parallel() 249*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 250*333d2b36SAndroid Build Coastguard Worker prepareForTestWithPlatformBootclasspath, 251*333d2b36SAndroid Build Coastguard Worker prepareForTestWithArtApex, 252*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 253*333d2b36SAndroid Build Coastguard Worker // Configure some libraries in the art and framework boot images. 254*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureBootJars("com.android.art:baz", "com.android.art:quuz", "platform:foo"), 255*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureApexBootJars("myapex:bar"), 256*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaSdkLibraryFiles, 257*333d2b36SAndroid Build Coastguard Worker java.FixtureWithLastReleaseApis("foo"), 258*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithDexpreopt, 259*333d2b36SAndroid Build Coastguard Worker dexpreopt.FixtureDisableDexpreoptBootImages(false), 260*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"), 261*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 262*333d2b36SAndroid Build Coastguard Worker apex { 263*333d2b36SAndroid Build Coastguard Worker name: "com.android.art", 264*333d2b36SAndroid Build Coastguard Worker key: "com.android.art.key", 265*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: [ 266*333d2b36SAndroid Build Coastguard Worker "art-bootclasspath-fragment", 267*333d2b36SAndroid Build Coastguard Worker ], 268*333d2b36SAndroid Build Coastguard Worker updatable: false, 269*333d2b36SAndroid Build Coastguard Worker } 270*333d2b36SAndroid Build Coastguard Worker 271*333d2b36SAndroid Build Coastguard Worker apex_key { 272*333d2b36SAndroid Build Coastguard Worker name: "com.android.art.key", 273*333d2b36SAndroid Build Coastguard Worker public_key: "com.android.art.avbpubkey", 274*333d2b36SAndroid Build Coastguard Worker private_key: "com.android.art.pem", 275*333d2b36SAndroid Build Coastguard Worker } 276*333d2b36SAndroid Build Coastguard Worker 277*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 278*333d2b36SAndroid Build Coastguard Worker name: "art-bootclasspath-fragment", 279*333d2b36SAndroid Build Coastguard Worker image_name: "art", 280*333d2b36SAndroid Build Coastguard Worker apex_available: [ 281*333d2b36SAndroid Build Coastguard Worker "com.android.art", 282*333d2b36SAndroid Build Coastguard Worker ], 283*333d2b36SAndroid Build Coastguard Worker contents: [ 284*333d2b36SAndroid Build Coastguard Worker "baz", 285*333d2b36SAndroid Build Coastguard Worker "quuz", 286*333d2b36SAndroid Build Coastguard Worker ], 287*333d2b36SAndroid Build Coastguard Worker hidden_api: { 288*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 289*333d2b36SAndroid Build Coastguard Worker }, 290*333d2b36SAndroid Build Coastguard Worker } 291*333d2b36SAndroid Build Coastguard Worker 292*333d2b36SAndroid Build Coastguard Worker java_library { 293*333d2b36SAndroid Build Coastguard Worker name: "baz", 294*333d2b36SAndroid Build Coastguard Worker apex_available: [ 295*333d2b36SAndroid Build Coastguard Worker "com.android.art", 296*333d2b36SAndroid Build Coastguard Worker ], 297*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 298*333d2b36SAndroid Build Coastguard Worker installable: true, 299*333d2b36SAndroid Build Coastguard Worker sdk_version: "core_current", 300*333d2b36SAndroid Build Coastguard Worker } 301*333d2b36SAndroid Build Coastguard Worker 302*333d2b36SAndroid Build Coastguard Worker // Add a java_import that is not preferred and so won't have an appropriate apex variant created 303*333d2b36SAndroid Build Coastguard Worker // for it to make sure that the platform_bootclasspath doesn't try and add a dependency onto it. 304*333d2b36SAndroid Build Coastguard Worker java_import { 305*333d2b36SAndroid Build Coastguard Worker name: "baz", 306*333d2b36SAndroid Build Coastguard Worker apex_available: [ 307*333d2b36SAndroid Build Coastguard Worker "com.android.art", 308*333d2b36SAndroid Build Coastguard Worker ], 309*333d2b36SAndroid Build Coastguard Worker jars: ["b.jar"], 310*333d2b36SAndroid Build Coastguard Worker } 311*333d2b36SAndroid Build Coastguard Worker 312*333d2b36SAndroid Build Coastguard Worker java_library { 313*333d2b36SAndroid Build Coastguard Worker name: "quuz", 314*333d2b36SAndroid Build Coastguard Worker apex_available: [ 315*333d2b36SAndroid Build Coastguard Worker "com.android.art", 316*333d2b36SAndroid Build Coastguard Worker ], 317*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 318*333d2b36SAndroid Build Coastguard Worker installable: true, 319*333d2b36SAndroid Build Coastguard Worker } 320*333d2b36SAndroid Build Coastguard Worker 321*333d2b36SAndroid Build Coastguard Worker apex { 322*333d2b36SAndroid Build Coastguard Worker name: "myapex", 323*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 324*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: [ 325*333d2b36SAndroid Build Coastguard Worker "my-bootclasspath-fragment", 326*333d2b36SAndroid Build Coastguard Worker ], 327*333d2b36SAndroid Build Coastguard Worker updatable: false, 328*333d2b36SAndroid Build Coastguard Worker } 329*333d2b36SAndroid Build Coastguard Worker 330*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 331*333d2b36SAndroid Build Coastguard Worker name: "my-bootclasspath-fragment", 332*333d2b36SAndroid Build Coastguard Worker contents: ["bar"], 333*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 334*333d2b36SAndroid Build Coastguard Worker hidden_api: { 335*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 336*333d2b36SAndroid Build Coastguard Worker }, 337*333d2b36SAndroid Build Coastguard Worker } 338*333d2b36SAndroid Build Coastguard Worker 339*333d2b36SAndroid Build Coastguard Worker apex_key { 340*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 341*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 342*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 343*333d2b36SAndroid Build Coastguard Worker } 344*333d2b36SAndroid Build Coastguard Worker 345*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 346*333d2b36SAndroid Build Coastguard Worker name: "foo", 347*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 348*333d2b36SAndroid Build Coastguard Worker } 349*333d2b36SAndroid Build Coastguard Worker 350*333d2b36SAndroid Build Coastguard Worker java_library { 351*333d2b36SAndroid Build Coastguard Worker name: "bar", 352*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 353*333d2b36SAndroid Build Coastguard Worker installable: true, 354*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 355*333d2b36SAndroid Build Coastguard Worker permitted_packages: ["bar"], 356*333d2b36SAndroid Build Coastguard Worker } 357*333d2b36SAndroid Build Coastguard Worker 358*333d2b36SAndroid Build Coastguard Worker platform_bootclasspath { 359*333d2b36SAndroid Build Coastguard Worker name: "myplatform-bootclasspath", 360*333d2b36SAndroid Build Coastguard Worker 361*333d2b36SAndroid Build Coastguard Worker fragments: [ 362*333d2b36SAndroid Build Coastguard Worker { 363*333d2b36SAndroid Build Coastguard Worker apex: "com.android.art", 364*333d2b36SAndroid Build Coastguard Worker module: "art-bootclasspath-fragment", 365*333d2b36SAndroid Build Coastguard Worker }, 366*333d2b36SAndroid Build Coastguard Worker { 367*333d2b36SAndroid Build Coastguard Worker apex: "myapex", 368*333d2b36SAndroid Build Coastguard Worker module: "my-bootclasspath-fragment", 369*333d2b36SAndroid Build Coastguard Worker }, 370*333d2b36SAndroid Build Coastguard Worker ], 371*333d2b36SAndroid Build Coastguard Worker } 372*333d2b36SAndroid Build Coastguard Worker`, 373*333d2b36SAndroid Build Coastguard Worker ) 374*333d2b36SAndroid Build Coastguard Worker 375*333d2b36SAndroid Build Coastguard Worker java.CheckPlatformBootclasspathModules(t, result, "myplatform-bootclasspath", []string{ 376*333d2b36SAndroid Build Coastguard Worker // The configured contents of BootJars. 377*333d2b36SAndroid Build Coastguard Worker "com.android.art:baz", 378*333d2b36SAndroid Build Coastguard Worker "com.android.art:quuz", 379*333d2b36SAndroid Build Coastguard Worker "platform:foo", 380*333d2b36SAndroid Build Coastguard Worker 381*333d2b36SAndroid Build Coastguard Worker // The configured contents of ApexBootJars. 382*333d2b36SAndroid Build Coastguard Worker "myapex:bar", 383*333d2b36SAndroid Build Coastguard Worker }) 384*333d2b36SAndroid Build Coastguard Worker 385*333d2b36SAndroid Build Coastguard Worker java.CheckPlatformBootclasspathFragments(t, result, "myplatform-bootclasspath", []string{ 386*333d2b36SAndroid Build Coastguard Worker "com.android.art:art-bootclasspath-fragment", 387*333d2b36SAndroid Build Coastguard Worker "myapex:my-bootclasspath-fragment", 388*333d2b36SAndroid Build Coastguard Worker }) 389*333d2b36SAndroid Build Coastguard Worker 390*333d2b36SAndroid Build Coastguard Worker // Make sure that the myplatform-bootclasspath has the correct dependencies. 391*333d2b36SAndroid Build Coastguard Worker CheckModuleDependencies(t, result.TestContext, "myplatform-bootclasspath", "android_common", []string{ 392*333d2b36SAndroid Build Coastguard Worker // source vs prebuilt selection metadata module 393*333d2b36SAndroid Build Coastguard Worker `platform:all_apex_contributions`, 394*333d2b36SAndroid Build Coastguard Worker 395*333d2b36SAndroid Build Coastguard Worker // The following are stubs. 396*333d2b36SAndroid Build Coastguard Worker `platform:android_stubs_current_exportable`, 397*333d2b36SAndroid Build Coastguard Worker `platform:android_system_stubs_current_exportable`, 398*333d2b36SAndroid Build Coastguard Worker `platform:android_test_stubs_current_exportable`, 399*333d2b36SAndroid Build Coastguard Worker `platform:legacy.core.platform.api.stubs.exportable`, 400*333d2b36SAndroid Build Coastguard Worker 401*333d2b36SAndroid Build Coastguard Worker // Needed for generating the boot image. 402*333d2b36SAndroid Build Coastguard Worker `platform:dex2oatd`, 403*333d2b36SAndroid Build Coastguard Worker 404*333d2b36SAndroid Build Coastguard Worker // The configured contents of BootJars. 405*333d2b36SAndroid Build Coastguard Worker `com.android.art:baz`, 406*333d2b36SAndroid Build Coastguard Worker `com.android.art:quuz`, 407*333d2b36SAndroid Build Coastguard Worker `platform:foo`, 408*333d2b36SAndroid Build Coastguard Worker 409*333d2b36SAndroid Build Coastguard Worker // The configured contents of ApexBootJars. 410*333d2b36SAndroid Build Coastguard Worker `myapex:bar`, 411*333d2b36SAndroid Build Coastguard Worker 412*333d2b36SAndroid Build Coastguard Worker // The fragments. 413*333d2b36SAndroid Build Coastguard Worker `com.android.art:art-bootclasspath-fragment`, 414*333d2b36SAndroid Build Coastguard Worker `myapex:my-bootclasspath-fragment`, 415*333d2b36SAndroid Build Coastguard Worker 416*333d2b36SAndroid Build Coastguard Worker // Impl lib of sdk_library for transitive srcjar generation 417*333d2b36SAndroid Build Coastguard Worker `platform:foo.impl`, 418*333d2b36SAndroid Build Coastguard Worker }) 419*333d2b36SAndroid Build Coastguard Worker} 420*333d2b36SAndroid Build Coastguard Worker 421*333d2b36SAndroid Build Coastguard Worker// TestPlatformBootclasspath_AlwaysUsePrebuiltSdks verifies that the build does not fail when 422*333d2b36SAndroid Build Coastguard Worker// AlwaysUsePrebuiltSdk() returns true. 423*333d2b36SAndroid Build Coastguard Workerfunc TestPlatformBootclasspath_AlwaysUsePrebuiltSdks(t *testing.T) { 424*333d2b36SAndroid Build Coastguard Worker t.Parallel() 425*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 426*333d2b36SAndroid Build Coastguard Worker prepareForTestWithPlatformBootclasspath, 427*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 428*333d2b36SAndroid Build Coastguard Worker // Configure two libraries, the first is a java_sdk_library whose prebuilt will be used because 429*333d2b36SAndroid Build Coastguard Worker // of AlwaysUsePrebuiltsSdk(). The second is a normal library that is unaffected. The order 430*333d2b36SAndroid Build Coastguard Worker // matters, so that the dependencies resolved by the platform_bootclasspath matches the 431*333d2b36SAndroid Build Coastguard Worker // configured list. 432*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureApexBootJars("myapex:foo", "myapex:bar"), 433*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithJavaSdkLibraryFiles, 434*333d2b36SAndroid Build Coastguard Worker android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { 435*333d2b36SAndroid Build Coastguard Worker variables.Always_use_prebuilt_sdks = proptools.BoolPtr(true) 436*333d2b36SAndroid Build Coastguard Worker }), 437*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithBuildFlag("RELEASE_HIDDEN_API_EXPORTABLE_STUBS", "true"), 438*333d2b36SAndroid Build Coastguard Worker 439*333d2b36SAndroid Build Coastguard Worker java.FixtureWithPrebuiltApis(map[string][]string{ 440*333d2b36SAndroid Build Coastguard Worker "current": {}, 441*333d2b36SAndroid Build Coastguard Worker "30": {"foo"}, 442*333d2b36SAndroid Build Coastguard Worker }), 443*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 444*333d2b36SAndroid Build Coastguard Worker apex { 445*333d2b36SAndroid Build Coastguard Worker name: "myapex", 446*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 447*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: [ 448*333d2b36SAndroid Build Coastguard Worker "mybootclasspath-fragment", 449*333d2b36SAndroid Build Coastguard Worker ], 450*333d2b36SAndroid Build Coastguard Worker updatable: false, 451*333d2b36SAndroid Build Coastguard Worker } 452*333d2b36SAndroid Build Coastguard Worker 453*333d2b36SAndroid Build Coastguard Worker apex_key { 454*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 455*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 456*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 457*333d2b36SAndroid Build Coastguard Worker } 458*333d2b36SAndroid Build Coastguard Worker 459*333d2b36SAndroid Build Coastguard Worker java_library { 460*333d2b36SAndroid Build Coastguard Worker name: "bar", 461*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 462*333d2b36SAndroid Build Coastguard Worker installable: true, 463*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 464*333d2b36SAndroid Build Coastguard Worker permitted_packages: ["bar"], 465*333d2b36SAndroid Build Coastguard Worker } 466*333d2b36SAndroid Build Coastguard Worker 467*333d2b36SAndroid Build Coastguard Worker java_sdk_library { 468*333d2b36SAndroid Build Coastguard Worker name: "foo", 469*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 470*333d2b36SAndroid Build Coastguard Worker shared_library: false, 471*333d2b36SAndroid Build Coastguard Worker public: { 472*333d2b36SAndroid Build Coastguard Worker enabled: true, 473*333d2b36SAndroid Build Coastguard Worker }, 474*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 475*333d2b36SAndroid Build Coastguard Worker permitted_packages: ["foo"], 476*333d2b36SAndroid Build Coastguard Worker } 477*333d2b36SAndroid Build Coastguard Worker 478*333d2b36SAndroid Build Coastguard Worker prebuilt_apex { 479*333d2b36SAndroid Build Coastguard Worker name: "myapex", 480*333d2b36SAndroid Build Coastguard Worker src: "myapex.apex", 481*333d2b36SAndroid Build Coastguard Worker exported_bootclasspath_fragments: ["mybootclasspath-fragment"], 482*333d2b36SAndroid Build Coastguard Worker } 483*333d2b36SAndroid Build Coastguard Worker 484*333d2b36SAndroid Build Coastguard Worker // A prebuilt java_sdk_library_import that is not preferred by default but will be preferred 485*333d2b36SAndroid Build Coastguard Worker // because AlwaysUsePrebuiltSdks() is true. 486*333d2b36SAndroid Build Coastguard Worker java_sdk_library_import { 487*333d2b36SAndroid Build Coastguard Worker name: "foo", 488*333d2b36SAndroid Build Coastguard Worker prefer: false, 489*333d2b36SAndroid Build Coastguard Worker shared_library: false, 490*333d2b36SAndroid Build Coastguard Worker permitted_packages: ["foo"], 491*333d2b36SAndroid Build Coastguard Worker public: { 492*333d2b36SAndroid Build Coastguard Worker jars: ["sdk_library/public/foo-stubs.jar"], 493*333d2b36SAndroid Build Coastguard Worker stub_srcs: ["sdk_library/public/foo_stub_sources"], 494*333d2b36SAndroid Build Coastguard Worker current_api: "sdk_library/public/foo.txt", 495*333d2b36SAndroid Build Coastguard Worker removed_api: "sdk_library/public/foo-removed.txt", 496*333d2b36SAndroid Build Coastguard Worker sdk_version: "current", 497*333d2b36SAndroid Build Coastguard Worker }, 498*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 499*333d2b36SAndroid Build Coastguard Worker } 500*333d2b36SAndroid Build Coastguard Worker 501*333d2b36SAndroid Build Coastguard Worker // This always depends on the source foo module, its dependencies are not affected by the 502*333d2b36SAndroid Build Coastguard Worker // AlwaysUsePrebuiltSdks(). 503*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 504*333d2b36SAndroid Build Coastguard Worker name: "mybootclasspath-fragment", 505*333d2b36SAndroid Build Coastguard Worker apex_available: [ 506*333d2b36SAndroid Build Coastguard Worker "myapex", 507*333d2b36SAndroid Build Coastguard Worker ], 508*333d2b36SAndroid Build Coastguard Worker contents: [ 509*333d2b36SAndroid Build Coastguard Worker "foo", "bar", 510*333d2b36SAndroid Build Coastguard Worker ], 511*333d2b36SAndroid Build Coastguard Worker hidden_api: { 512*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 513*333d2b36SAndroid Build Coastguard Worker }, 514*333d2b36SAndroid Build Coastguard Worker } 515*333d2b36SAndroid Build Coastguard Worker 516*333d2b36SAndroid Build Coastguard Worker prebuilt_bootclasspath_fragment { 517*333d2b36SAndroid Build Coastguard Worker name: "mybootclasspath-fragment", 518*333d2b36SAndroid Build Coastguard Worker apex_available: [ 519*333d2b36SAndroid Build Coastguard Worker "myapex", 520*333d2b36SAndroid Build Coastguard Worker ], 521*333d2b36SAndroid Build Coastguard Worker contents: [ 522*333d2b36SAndroid Build Coastguard Worker "foo", 523*333d2b36SAndroid Build Coastguard Worker ], 524*333d2b36SAndroid Build Coastguard Worker hidden_api: { 525*333d2b36SAndroid Build Coastguard Worker stub_flags: "", 526*333d2b36SAndroid Build Coastguard Worker annotation_flags: "", 527*333d2b36SAndroid Build Coastguard Worker metadata: "", 528*333d2b36SAndroid Build Coastguard Worker index: "", 529*333d2b36SAndroid Build Coastguard Worker all_flags: "", 530*333d2b36SAndroid Build Coastguard Worker }, 531*333d2b36SAndroid Build Coastguard Worker } 532*333d2b36SAndroid Build Coastguard Worker 533*333d2b36SAndroid Build Coastguard Worker platform_bootclasspath { 534*333d2b36SAndroid Build Coastguard Worker name: "myplatform-bootclasspath", 535*333d2b36SAndroid Build Coastguard Worker fragments: [ 536*333d2b36SAndroid Build Coastguard Worker { 537*333d2b36SAndroid Build Coastguard Worker apex: "myapex", 538*333d2b36SAndroid Build Coastguard Worker module:"mybootclasspath-fragment", 539*333d2b36SAndroid Build Coastguard Worker }, 540*333d2b36SAndroid Build Coastguard Worker ], 541*333d2b36SAndroid Build Coastguard Worker } 542*333d2b36SAndroid Build Coastguard Worker`, 543*333d2b36SAndroid Build Coastguard Worker ) 544*333d2b36SAndroid Build Coastguard Worker 545*333d2b36SAndroid Build Coastguard Worker java.CheckPlatformBootclasspathModules(t, result, "myplatform-bootclasspath", []string{ 546*333d2b36SAndroid Build Coastguard Worker // The configured contents of BootJars. 547*333d2b36SAndroid Build Coastguard Worker "myapex:prebuilt_foo", 548*333d2b36SAndroid Build Coastguard Worker "myapex:bar", 549*333d2b36SAndroid Build Coastguard Worker }) 550*333d2b36SAndroid Build Coastguard Worker 551*333d2b36SAndroid Build Coastguard Worker // Make sure that the myplatform-bootclasspath has the correct dependencies. 552*333d2b36SAndroid Build Coastguard Worker CheckModuleDependencies(t, result.TestContext, "myplatform-bootclasspath", "android_common", []string{ 553*333d2b36SAndroid Build Coastguard Worker // source vs prebuilt selection metadata module 554*333d2b36SAndroid Build Coastguard Worker `platform:all_apex_contributions`, 555*333d2b36SAndroid Build Coastguard Worker 556*333d2b36SAndroid Build Coastguard Worker // The following are stubs. 557*333d2b36SAndroid Build Coastguard Worker "platform:prebuilt_sdk_public_current_android", 558*333d2b36SAndroid Build Coastguard Worker "platform:prebuilt_sdk_system_current_android", 559*333d2b36SAndroid Build Coastguard Worker "platform:prebuilt_sdk_test_current_android", 560*333d2b36SAndroid Build Coastguard Worker 561*333d2b36SAndroid Build Coastguard Worker // Not a prebuilt as no prebuilt existed when it was added. 562*333d2b36SAndroid Build Coastguard Worker "platform:legacy.core.platform.api.stubs.exportable", 563*333d2b36SAndroid Build Coastguard Worker 564*333d2b36SAndroid Build Coastguard Worker // The platform_bootclasspath intentionally adds dependencies on both source and prebuilt 565*333d2b36SAndroid Build Coastguard Worker // modules when available as it does not know which one will be preferred. 566*333d2b36SAndroid Build Coastguard Worker "myapex:foo", 567*333d2b36SAndroid Build Coastguard Worker "myapex:prebuilt_foo", 568*333d2b36SAndroid Build Coastguard Worker 569*333d2b36SAndroid Build Coastguard Worker // Only a source module exists. 570*333d2b36SAndroid Build Coastguard Worker "myapex:bar", 571*333d2b36SAndroid Build Coastguard Worker 572*333d2b36SAndroid Build Coastguard Worker // The fragments. 573*333d2b36SAndroid Build Coastguard Worker "myapex:mybootclasspath-fragment", 574*333d2b36SAndroid Build Coastguard Worker "myapex:prebuilt_mybootclasspath-fragment", 575*333d2b36SAndroid Build Coastguard Worker 576*333d2b36SAndroid Build Coastguard Worker // Impl lib of sdk_library for transitive srcjar generation 577*333d2b36SAndroid Build Coastguard Worker "platform:foo.impl", 578*333d2b36SAndroid Build Coastguard Worker }) 579*333d2b36SAndroid Build Coastguard Worker} 580*333d2b36SAndroid Build Coastguard Worker 581*333d2b36SAndroid Build Coastguard Worker// CheckModuleDependencies checks the dependencies of the selected module against the expected list. 582*333d2b36SAndroid Build Coastguard Worker// 583*333d2b36SAndroid Build Coastguard Worker// The expected list must be a list of strings of the form "<apex>:<module>", where <apex> is the 584*333d2b36SAndroid Build Coastguard Worker// name of the apex, or platform is it is not part of an apex and <module> is the module name. 585*333d2b36SAndroid Build Coastguard Workerfunc CheckModuleDependencies(t *testing.T, ctx *android.TestContext, name, variant string, expected []string) { 586*333d2b36SAndroid Build Coastguard Worker t.Helper() 587*333d2b36SAndroid Build Coastguard Worker module := ctx.ModuleForTests(name, variant).Module() 588*333d2b36SAndroid Build Coastguard Worker modules := []android.Module{} 589*333d2b36SAndroid Build Coastguard Worker ctx.VisitDirectDeps(module, func(m blueprint.Module) { 590*333d2b36SAndroid Build Coastguard Worker modules = append(modules, m.(android.Module)) 591*333d2b36SAndroid Build Coastguard Worker }) 592*333d2b36SAndroid Build Coastguard Worker 593*333d2b36SAndroid Build Coastguard Worker pairs := java.ApexNamePairsFromModules(ctx, modules) 594*333d2b36SAndroid Build Coastguard Worker android.AssertDeepEquals(t, "module dependencies", expected, pairs) 595*333d2b36SAndroid Build Coastguard Worker} 596*333d2b36SAndroid Build Coastguard Worker 597*333d2b36SAndroid Build Coastguard Worker// TestPlatformBootclasspath_IncludesRemainingApexJars verifies that any apex boot jar is present in 598*333d2b36SAndroid Build Coastguard Worker// platform_bootclasspath's classpaths.proto config, if the apex does not generate its own config 599*333d2b36SAndroid Build Coastguard Worker// by setting generate_classpaths_proto property to false. 600*333d2b36SAndroid Build Coastguard Workerfunc TestPlatformBootclasspath_IncludesRemainingApexJars(t *testing.T) { 601*333d2b36SAndroid Build Coastguard Worker t.Parallel() 602*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 603*333d2b36SAndroid Build Coastguard Worker prepareForTestWithPlatformBootclasspath, 604*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 605*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureApexBootJars("myapex:foo"), 606*333d2b36SAndroid Build Coastguard Worker android.FixtureWithRootAndroidBp(` 607*333d2b36SAndroid Build Coastguard Worker platform_bootclasspath { 608*333d2b36SAndroid Build Coastguard Worker name: "platform-bootclasspath", 609*333d2b36SAndroid Build Coastguard Worker fragments: [ 610*333d2b36SAndroid Build Coastguard Worker { 611*333d2b36SAndroid Build Coastguard Worker apex: "myapex", 612*333d2b36SAndroid Build Coastguard Worker module:"foo-fragment", 613*333d2b36SAndroid Build Coastguard Worker }, 614*333d2b36SAndroid Build Coastguard Worker ], 615*333d2b36SAndroid Build Coastguard Worker } 616*333d2b36SAndroid Build Coastguard Worker 617*333d2b36SAndroid Build Coastguard Worker apex { 618*333d2b36SAndroid Build Coastguard Worker name: "myapex", 619*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 620*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: ["foo-fragment"], 621*333d2b36SAndroid Build Coastguard Worker updatable: false, 622*333d2b36SAndroid Build Coastguard Worker } 623*333d2b36SAndroid Build Coastguard Worker 624*333d2b36SAndroid Build Coastguard Worker apex_key { 625*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 626*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 627*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 628*333d2b36SAndroid Build Coastguard Worker } 629*333d2b36SAndroid Build Coastguard Worker 630*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 631*333d2b36SAndroid Build Coastguard Worker name: "foo-fragment", 632*333d2b36SAndroid Build Coastguard Worker generate_classpaths_proto: false, 633*333d2b36SAndroid Build Coastguard Worker contents: ["foo"], 634*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 635*333d2b36SAndroid Build Coastguard Worker hidden_api: { 636*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 637*333d2b36SAndroid Build Coastguard Worker }, 638*333d2b36SAndroid Build Coastguard Worker } 639*333d2b36SAndroid Build Coastguard Worker 640*333d2b36SAndroid Build Coastguard Worker java_library { 641*333d2b36SAndroid Build Coastguard Worker name: "foo", 642*333d2b36SAndroid Build Coastguard Worker srcs: ["a.java"], 643*333d2b36SAndroid Build Coastguard Worker system_modules: "none", 644*333d2b36SAndroid Build Coastguard Worker sdk_version: "none", 645*333d2b36SAndroid Build Coastguard Worker compile_dex: true, 646*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 647*333d2b36SAndroid Build Coastguard Worker permitted_packages: ["foo"], 648*333d2b36SAndroid Build Coastguard Worker } 649*333d2b36SAndroid Build Coastguard Worker `), 650*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 651*333d2b36SAndroid Build Coastguard Worker 652*333d2b36SAndroid Build Coastguard Worker java.CheckClasspathFragmentProtoContentInfoProvider(t, result, 653*333d2b36SAndroid Build Coastguard Worker true, // proto should be generated 654*333d2b36SAndroid Build Coastguard Worker "myapex:foo", // apex doesn't generate its own config, so must be in platform_bootclasspath 655*333d2b36SAndroid Build Coastguard Worker "bootclasspath.pb", 656*333d2b36SAndroid Build Coastguard Worker "out/soong/target/product/test_device/system/etc/classpaths", 657*333d2b36SAndroid Build Coastguard Worker ) 658*333d2b36SAndroid Build Coastguard Worker} 659*333d2b36SAndroid Build Coastguard Worker 660*333d2b36SAndroid Build Coastguard Workerfunc TestBootJarNotInApex(t *testing.T) { 661*333d2b36SAndroid Build Coastguard Worker t.Parallel() 662*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 663*333d2b36SAndroid Build Coastguard Worker prepareForTestWithPlatformBootclasspath, 664*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithApexBuildComponents, 665*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 666*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureApexBootJars("myapex:foo"), 667*333d2b36SAndroid Build Coastguard Worker ).ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern( 668*333d2b36SAndroid Build Coastguard Worker `dependency "foo" of "myplatform-bootclasspath" missing variant`)). 669*333d2b36SAndroid Build Coastguard Worker RunTestWithBp(t, ` 670*333d2b36SAndroid Build Coastguard Worker apex { 671*333d2b36SAndroid Build Coastguard Worker name: "myapex", 672*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 673*333d2b36SAndroid Build Coastguard Worker updatable: false, 674*333d2b36SAndroid Build Coastguard Worker } 675*333d2b36SAndroid Build Coastguard Worker 676*333d2b36SAndroid Build Coastguard Worker apex_key { 677*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 678*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 679*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 680*333d2b36SAndroid Build Coastguard Worker } 681*333d2b36SAndroid Build Coastguard Worker 682*333d2b36SAndroid Build Coastguard Worker java_library { 683*333d2b36SAndroid Build Coastguard Worker name: "foo", 684*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 685*333d2b36SAndroid Build Coastguard Worker installable: true, 686*333d2b36SAndroid Build Coastguard Worker apex_available: [ 687*333d2b36SAndroid Build Coastguard Worker "myapex", 688*333d2b36SAndroid Build Coastguard Worker ], 689*333d2b36SAndroid Build Coastguard Worker } 690*333d2b36SAndroid Build Coastguard Worker 691*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 692*333d2b36SAndroid Build Coastguard Worker name: "not-in-apex-fragment", 693*333d2b36SAndroid Build Coastguard Worker contents: [ 694*333d2b36SAndroid Build Coastguard Worker "foo", 695*333d2b36SAndroid Build Coastguard Worker ], 696*333d2b36SAndroid Build Coastguard Worker hidden_api: { 697*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 698*333d2b36SAndroid Build Coastguard Worker }, 699*333d2b36SAndroid Build Coastguard Worker } 700*333d2b36SAndroid Build Coastguard Worker 701*333d2b36SAndroid Build Coastguard Worker platform_bootclasspath { 702*333d2b36SAndroid Build Coastguard Worker name: "myplatform-bootclasspath", 703*333d2b36SAndroid Build Coastguard Worker } 704*333d2b36SAndroid Build Coastguard Worker `) 705*333d2b36SAndroid Build Coastguard Worker} 706*333d2b36SAndroid Build Coastguard Worker 707*333d2b36SAndroid Build Coastguard Workerfunc TestBootFragmentNotInApex(t *testing.T) { 708*333d2b36SAndroid Build Coastguard Worker t.Parallel() 709*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 710*333d2b36SAndroid Build Coastguard Worker prepareForTestWithPlatformBootclasspath, 711*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithApexBuildComponents, 712*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 713*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureApexBootJars("myapex:foo"), 714*333d2b36SAndroid Build Coastguard Worker ).ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern( 715*333d2b36SAndroid Build Coastguard Worker `library foo.*have no corresponding fragment.*`)).RunTestWithBp(t, ` 716*333d2b36SAndroid Build Coastguard Worker apex { 717*333d2b36SAndroid Build Coastguard Worker name: "myapex", 718*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 719*333d2b36SAndroid Build Coastguard Worker java_libs: ["foo"], 720*333d2b36SAndroid Build Coastguard Worker updatable: false, 721*333d2b36SAndroid Build Coastguard Worker } 722*333d2b36SAndroid Build Coastguard Worker 723*333d2b36SAndroid Build Coastguard Worker apex_key { 724*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 725*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 726*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 727*333d2b36SAndroid Build Coastguard Worker } 728*333d2b36SAndroid Build Coastguard Worker 729*333d2b36SAndroid Build Coastguard Worker java_library { 730*333d2b36SAndroid Build Coastguard Worker name: "foo", 731*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 732*333d2b36SAndroid Build Coastguard Worker installable: true, 733*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 734*333d2b36SAndroid Build Coastguard Worker permitted_packages: ["foo"], 735*333d2b36SAndroid Build Coastguard Worker } 736*333d2b36SAndroid Build Coastguard Worker 737*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 738*333d2b36SAndroid Build Coastguard Worker name: "not-in-apex-fragment", 739*333d2b36SAndroid Build Coastguard Worker contents: ["foo"], 740*333d2b36SAndroid Build Coastguard Worker hidden_api: { 741*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 742*333d2b36SAndroid Build Coastguard Worker }, 743*333d2b36SAndroid Build Coastguard Worker } 744*333d2b36SAndroid Build Coastguard Worker 745*333d2b36SAndroid Build Coastguard Worker platform_bootclasspath { 746*333d2b36SAndroid Build Coastguard Worker name: "myplatform-bootclasspath", 747*333d2b36SAndroid Build Coastguard Worker } 748*333d2b36SAndroid Build Coastguard Worker `) 749*333d2b36SAndroid Build Coastguard Worker} 750*333d2b36SAndroid Build Coastguard Worker 751*333d2b36SAndroid Build Coastguard Workerfunc TestNonBootJarInFragment(t *testing.T) { 752*333d2b36SAndroid Build Coastguard Worker t.Parallel() 753*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 754*333d2b36SAndroid Build Coastguard Worker prepareForTestWithPlatformBootclasspath, 755*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithApexBuildComponents, 756*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 757*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureApexBootJars("myapex:foo"), 758*333d2b36SAndroid Build Coastguard Worker ).ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern( 759*333d2b36SAndroid Build Coastguard Worker `in contents must also be declared in PRODUCT_APEX_BOOT_JARS`)). 760*333d2b36SAndroid Build Coastguard Worker RunTestWithBp(t, ` 761*333d2b36SAndroid Build Coastguard Worker apex { 762*333d2b36SAndroid Build Coastguard Worker name: "myapex", 763*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 764*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: ["apex-fragment"], 765*333d2b36SAndroid Build Coastguard Worker updatable: false, 766*333d2b36SAndroid Build Coastguard Worker } 767*333d2b36SAndroid Build Coastguard Worker 768*333d2b36SAndroid Build Coastguard Worker apex_key { 769*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 770*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 771*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 772*333d2b36SAndroid Build Coastguard Worker } 773*333d2b36SAndroid Build Coastguard Worker 774*333d2b36SAndroid Build Coastguard Worker java_library { 775*333d2b36SAndroid Build Coastguard Worker name: "foo", 776*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 777*333d2b36SAndroid Build Coastguard Worker installable: true, 778*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 779*333d2b36SAndroid Build Coastguard Worker permitted_packages: ["foo"], 780*333d2b36SAndroid Build Coastguard Worker } 781*333d2b36SAndroid Build Coastguard Worker 782*333d2b36SAndroid Build Coastguard Worker java_library { 783*333d2b36SAndroid Build Coastguard Worker name: "bar", 784*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 785*333d2b36SAndroid Build Coastguard Worker installable: true, 786*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 787*333d2b36SAndroid Build Coastguard Worker permitted_packages: ["bar"], 788*333d2b36SAndroid Build Coastguard Worker } 789*333d2b36SAndroid Build Coastguard Worker 790*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 791*333d2b36SAndroid Build Coastguard Worker name: "apex-fragment", 792*333d2b36SAndroid Build Coastguard Worker contents: ["foo", "bar"], 793*333d2b36SAndroid Build Coastguard Worker apex_available:[ "myapex" ], 794*333d2b36SAndroid Build Coastguard Worker hidden_api: { 795*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 796*333d2b36SAndroid Build Coastguard Worker }, 797*333d2b36SAndroid Build Coastguard Worker } 798*333d2b36SAndroid Build Coastguard Worker 799*333d2b36SAndroid Build Coastguard Worker platform_bootclasspath { 800*333d2b36SAndroid Build Coastguard Worker name: "myplatform-bootclasspath", 801*333d2b36SAndroid Build Coastguard Worker fragments: [{ 802*333d2b36SAndroid Build Coastguard Worker apex: "myapex", 803*333d2b36SAndroid Build Coastguard Worker module:"apex-fragment", 804*333d2b36SAndroid Build Coastguard Worker }], 805*333d2b36SAndroid Build Coastguard Worker } 806*333d2b36SAndroid Build Coastguard Worker `) 807*333d2b36SAndroid Build Coastguard Worker} 808*333d2b36SAndroid Build Coastguard Worker 809*333d2b36SAndroid Build Coastguard Worker// Skip bcp_fragment content validation of source apexes if prebuilts are active. 810*333d2b36SAndroid Build Coastguard Workerfunc TestNonBootJarInPrebuilts(t *testing.T) { 811*333d2b36SAndroid Build Coastguard Worker t.Parallel() 812*333d2b36SAndroid Build Coastguard Worker testCases := []struct { 813*333d2b36SAndroid Build Coastguard Worker description string 814*333d2b36SAndroid Build Coastguard Worker selectedApexContributions string 815*333d2b36SAndroid Build Coastguard Worker expectedError string 816*333d2b36SAndroid Build Coastguard Worker }{ 817*333d2b36SAndroid Build Coastguard Worker { 818*333d2b36SAndroid Build Coastguard Worker description: "source is active", 819*333d2b36SAndroid Build Coastguard Worker selectedApexContributions: "", 820*333d2b36SAndroid Build Coastguard Worker expectedError: "in contents must also be declared in PRODUCT_APEX_BOOT_JARS", 821*333d2b36SAndroid Build Coastguard Worker }, 822*333d2b36SAndroid Build Coastguard Worker { 823*333d2b36SAndroid Build Coastguard Worker description: "prebuilts are active", 824*333d2b36SAndroid Build Coastguard Worker selectedApexContributions: "myapex.prebuilt.contributions", 825*333d2b36SAndroid Build Coastguard Worker expectedError: "", // skip content validation of source bcp fragment 826*333d2b36SAndroid Build Coastguard Worker }, 827*333d2b36SAndroid Build Coastguard Worker } 828*333d2b36SAndroid Build Coastguard Worker bp := ` 829*333d2b36SAndroid Build Coastguard Worker// Source 830*333d2b36SAndroid Build Coastguard Workerapex { 831*333d2b36SAndroid Build Coastguard Worker name: "myapex", 832*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 833*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: ["apex-fragment"], 834*333d2b36SAndroid Build Coastguard Worker updatable: false, 835*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "29", 836*333d2b36SAndroid Build Coastguard Worker} 837*333d2b36SAndroid Build Coastguard Worker 838*333d2b36SAndroid Build Coastguard Workeroverride_apex { 839*333d2b36SAndroid Build Coastguard Worker name: "myapex.override", // overrides the min_sdk_version, thereby creating different variants of its transitive deps 840*333d2b36SAndroid Build Coastguard Worker base: "myapex", 841*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "34", 842*333d2b36SAndroid Build Coastguard Worker} 843*333d2b36SAndroid Build Coastguard Worker 844*333d2b36SAndroid Build Coastguard Workerapex_key { 845*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 846*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 847*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 848*333d2b36SAndroid Build Coastguard Worker} 849*333d2b36SAndroid Build Coastguard Worker 850*333d2b36SAndroid Build Coastguard Workerjava_library { 851*333d2b36SAndroid Build Coastguard Worker name: "foo", 852*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 853*333d2b36SAndroid Build Coastguard Worker installable: true, 854*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 855*333d2b36SAndroid Build Coastguard Worker permitted_packages: ["foo"], 856*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "29", 857*333d2b36SAndroid Build Coastguard Worker} 858*333d2b36SAndroid Build Coastguard Worker 859*333d2b36SAndroid Build Coastguard Workerjava_library { 860*333d2b36SAndroid Build Coastguard Worker name: "bar", 861*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 862*333d2b36SAndroid Build Coastguard Worker installable: true, 863*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 864*333d2b36SAndroid Build Coastguard Worker permitted_packages: ["bar"], 865*333d2b36SAndroid Build Coastguard Worker min_sdk_version: "29", 866*333d2b36SAndroid Build Coastguard Worker} 867*333d2b36SAndroid Build Coastguard Worker 868*333d2b36SAndroid Build Coastguard Workerbootclasspath_fragment { 869*333d2b36SAndroid Build Coastguard Worker name: "apex-fragment", 870*333d2b36SAndroid Build Coastguard Worker contents: ["foo", "bar"], 871*333d2b36SAndroid Build Coastguard Worker apex_available:[ "myapex" ], 872*333d2b36SAndroid Build Coastguard Worker hidden_api: { 873*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 874*333d2b36SAndroid Build Coastguard Worker }, 875*333d2b36SAndroid Build Coastguard Worker} 876*333d2b36SAndroid Build Coastguard Worker 877*333d2b36SAndroid Build Coastguard Workerplatform_bootclasspath { 878*333d2b36SAndroid Build Coastguard Worker name: "myplatform-bootclasspath", 879*333d2b36SAndroid Build Coastguard Worker fragments: [{ 880*333d2b36SAndroid Build Coastguard Worker apex: "myapex", 881*333d2b36SAndroid Build Coastguard Worker module:"apex-fragment", 882*333d2b36SAndroid Build Coastguard Worker }], 883*333d2b36SAndroid Build Coastguard Worker} 884*333d2b36SAndroid Build Coastguard Worker 885*333d2b36SAndroid Build Coastguard Worker// prebuilts 886*333d2b36SAndroid Build Coastguard Workerprebuilt_apex { 887*333d2b36SAndroid Build Coastguard Worker name: "myapex", 888*333d2b36SAndroid Build Coastguard Worker apex_name: "myapex", 889*333d2b36SAndroid Build Coastguard Worker src: "myapex.apex", 890*333d2b36SAndroid Build Coastguard Worker exported_bootclasspath_fragments: ["apex-fragment"], 891*333d2b36SAndroid Build Coastguard Worker } 892*333d2b36SAndroid Build Coastguard Worker 893*333d2b36SAndroid Build Coastguard Worker prebuilt_bootclasspath_fragment { 894*333d2b36SAndroid Build Coastguard Worker name: "apex-fragment", 895*333d2b36SAndroid Build Coastguard Worker contents: ["foo"], 896*333d2b36SAndroid Build Coastguard Worker hidden_api: { 897*333d2b36SAndroid Build Coastguard Worker annotation_flags: "my-bootclasspath-fragment/annotation-flags.csv", 898*333d2b36SAndroid Build Coastguard Worker metadata: "my-bootclasspath-fragment/metadata.csv", 899*333d2b36SAndroid Build Coastguard Worker index: "my-bootclasspath-fragment/index.csv", 900*333d2b36SAndroid Build Coastguard Worker stub_flags: "my-bootclasspath-fragment/stub-flags.csv", 901*333d2b36SAndroid Build Coastguard Worker all_flags: "my-bootclasspath-fragment/all-flags.csv", 902*333d2b36SAndroid Build Coastguard Worker }, 903*333d2b36SAndroid Build Coastguard Worker } 904*333d2b36SAndroid Build Coastguard Worker java_import { 905*333d2b36SAndroid Build Coastguard Worker name: "foo", 906*333d2b36SAndroid Build Coastguard Worker jars: ["foo.jar"], 907*333d2b36SAndroid Build Coastguard Worker } 908*333d2b36SAndroid Build Coastguard Worker 909*333d2b36SAndroid Build Coastguard Workerapex_contributions { 910*333d2b36SAndroid Build Coastguard Worker name: "myapex.prebuilt.contributions", 911*333d2b36SAndroid Build Coastguard Worker api_domain: "myapex", 912*333d2b36SAndroid Build Coastguard Worker contents: ["prebuilt_myapex"], 913*333d2b36SAndroid Build Coastguard Worker} 914*333d2b36SAndroid Build Coastguard Worker` 915*333d2b36SAndroid Build Coastguard Worker 916*333d2b36SAndroid Build Coastguard Worker for _, tc := range testCases { 917*333d2b36SAndroid Build Coastguard Worker fixture := android.GroupFixturePreparers( 918*333d2b36SAndroid Build Coastguard Worker prepareForTestWithPlatformBootclasspath, 919*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithApexBuildComponents, 920*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 921*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureApexBootJars("myapex:foo"), 922*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithBuildFlag("RELEASE_APEX_CONTRIBUTIONS_ADSERVICES", tc.selectedApexContributions), 923*333d2b36SAndroid Build Coastguard Worker ) 924*333d2b36SAndroid Build Coastguard Worker if tc.expectedError != "" { 925*333d2b36SAndroid Build Coastguard Worker fixture = fixture.ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(tc.expectedError)) 926*333d2b36SAndroid Build Coastguard Worker } 927*333d2b36SAndroid Build Coastguard Worker fixture.RunTestWithBp(t, bp) 928*333d2b36SAndroid Build Coastguard Worker } 929*333d2b36SAndroid Build Coastguard Worker 930*333d2b36SAndroid Build Coastguard Worker} 931*333d2b36SAndroid Build Coastguard Worker 932*333d2b36SAndroid Build Coastguard Worker// Source and prebuilt apex provide different set of boot jars 933*333d2b36SAndroid Build Coastguard Workerfunc TestNonBootJarMissingInPrebuiltFragment(t *testing.T) { 934*333d2b36SAndroid Build Coastguard Worker t.Parallel() 935*333d2b36SAndroid Build Coastguard Worker bp := ` 936*333d2b36SAndroid Build Coastguard Worker apex { 937*333d2b36SAndroid Build Coastguard Worker name: "myapex", 938*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 939*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragments: ["apex-fragment"], 940*333d2b36SAndroid Build Coastguard Worker updatable: false, 941*333d2b36SAndroid Build Coastguard Worker } 942*333d2b36SAndroid Build Coastguard Worker 943*333d2b36SAndroid Build Coastguard Worker apex_key { 944*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 945*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 946*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 947*333d2b36SAndroid Build Coastguard Worker } 948*333d2b36SAndroid Build Coastguard Worker 949*333d2b36SAndroid Build Coastguard Worker java_library { 950*333d2b36SAndroid Build Coastguard Worker name: "foo", 951*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 952*333d2b36SAndroid Build Coastguard Worker installable: true, 953*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 954*333d2b36SAndroid Build Coastguard Worker permitted_packages: ["foo"], 955*333d2b36SAndroid Build Coastguard Worker } 956*333d2b36SAndroid Build Coastguard Worker 957*333d2b36SAndroid Build Coastguard Worker java_library { 958*333d2b36SAndroid Build Coastguard Worker name: "bar", 959*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 960*333d2b36SAndroid Build Coastguard Worker installable: true, 961*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 962*333d2b36SAndroid Build Coastguard Worker permitted_packages: ["bar"], 963*333d2b36SAndroid Build Coastguard Worker } 964*333d2b36SAndroid Build Coastguard Worker 965*333d2b36SAndroid Build Coastguard Worker bootclasspath_fragment { 966*333d2b36SAndroid Build Coastguard Worker name: "apex-fragment", 967*333d2b36SAndroid Build Coastguard Worker contents: ["foo", "bar"], 968*333d2b36SAndroid Build Coastguard Worker apex_available:[ "myapex" ], 969*333d2b36SAndroid Build Coastguard Worker hidden_api: { 970*333d2b36SAndroid Build Coastguard Worker split_packages: ["*"], 971*333d2b36SAndroid Build Coastguard Worker }, 972*333d2b36SAndroid Build Coastguard Worker } 973*333d2b36SAndroid Build Coastguard Worker 974*333d2b36SAndroid Build Coastguard Worker prebuilt_apex { 975*333d2b36SAndroid Build Coastguard Worker name: "com.google.android.myapex", // mainline prebuilt selection logic in soong relies on the naming convention com.google.android 976*333d2b36SAndroid Build Coastguard Worker apex_name: "myapex", 977*333d2b36SAndroid Build Coastguard Worker source_apex_name: "myapex", 978*333d2b36SAndroid Build Coastguard Worker src: "myapex.apex", 979*333d2b36SAndroid Build Coastguard Worker exported_bootclasspath_fragments: ["apex-fragment"], 980*333d2b36SAndroid Build Coastguard Worker } 981*333d2b36SAndroid Build Coastguard Worker 982*333d2b36SAndroid Build Coastguard Worker java_import { 983*333d2b36SAndroid Build Coastguard Worker name: "foo", 984*333d2b36SAndroid Build Coastguard Worker jars: ["foo.jar"], 985*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 986*333d2b36SAndroid Build Coastguard Worker permitted_packages: ["foo"], 987*333d2b36SAndroid Build Coastguard Worker } 988*333d2b36SAndroid Build Coastguard Worker 989*333d2b36SAndroid Build Coastguard Worker prebuilt_bootclasspath_fragment { 990*333d2b36SAndroid Build Coastguard Worker name: "apex-fragment", 991*333d2b36SAndroid Build Coastguard Worker contents: ["foo"], // Unlike the source fragment, this is missing bar 992*333d2b36SAndroid Build Coastguard Worker apex_available:[ "myapex" ], 993*333d2b36SAndroid Build Coastguard Worker hidden_api: { 994*333d2b36SAndroid Build Coastguard Worker annotation_flags: "my-bootclasspath-fragment/annotation-flags.csv", 995*333d2b36SAndroid Build Coastguard Worker metadata: "my-bootclasspath-fragment/metadata.csv", 996*333d2b36SAndroid Build Coastguard Worker index: "my-bootclasspath-fragment/index.csv", 997*333d2b36SAndroid Build Coastguard Worker stub_flags: "my-bootclasspath-fragment/stub-flags.csv", 998*333d2b36SAndroid Build Coastguard Worker all_flags: "my-bootclasspath-fragment/all-flags.csv", 999*333d2b36SAndroid Build Coastguard Worker }, 1000*333d2b36SAndroid Build Coastguard Worker } 1001*333d2b36SAndroid Build Coastguard Worker 1002*333d2b36SAndroid Build Coastguard Worker // Another prebuilt apex, but this is not selected during the build. 1003*333d2b36SAndroid Build Coastguard Worker prebuilt_apex { 1004*333d2b36SAndroid Build Coastguard Worker name: "com.google.android.myapex.v2", // mainline prebuilt selection logic in soong relies on the naming convention com.google.android 1005*333d2b36SAndroid Build Coastguard Worker apex_name: "myapex", 1006*333d2b36SAndroid Build Coastguard Worker source_apex_name: "myapex", 1007*333d2b36SAndroid Build Coastguard Worker src: "myapex.apex", 1008*333d2b36SAndroid Build Coastguard Worker exported_bootclasspath_fragments: ["apex-fragment.v2"], 1009*333d2b36SAndroid Build Coastguard Worker } 1010*333d2b36SAndroid Build Coastguard Worker 1011*333d2b36SAndroid Build Coastguard Worker java_import { 1012*333d2b36SAndroid Build Coastguard Worker name: "bar", 1013*333d2b36SAndroid Build Coastguard Worker jars: ["bar.jar"], 1014*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 1015*333d2b36SAndroid Build Coastguard Worker permitted_packages: ["bar"], 1016*333d2b36SAndroid Build Coastguard Worker } 1017*333d2b36SAndroid Build Coastguard Worker 1018*333d2b36SAndroid Build Coastguard Worker prebuilt_bootclasspath_fragment { 1019*333d2b36SAndroid Build Coastguard Worker name: "apex-fragment.v2", 1020*333d2b36SAndroid Build Coastguard Worker contents: ["bar"], // Unlike the source fragment, this is missing foo 1021*333d2b36SAndroid Build Coastguard Worker apex_available:[ "myapex" ], 1022*333d2b36SAndroid Build Coastguard Worker hidden_api: { 1023*333d2b36SAndroid Build Coastguard Worker annotation_flags: "my-bootclasspath-fragment/annotation-flags.csv", 1024*333d2b36SAndroid Build Coastguard Worker metadata: "my-bootclasspath-fragment/metadata.csv", 1025*333d2b36SAndroid Build Coastguard Worker index: "my-bootclasspath-fragment/index.csv", 1026*333d2b36SAndroid Build Coastguard Worker stub_flags: "my-bootclasspath-fragment/stub-flags.csv", 1027*333d2b36SAndroid Build Coastguard Worker all_flags: "my-bootclasspath-fragment/all-flags.csv", 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 apex_contributions { 1033*333d2b36SAndroid Build Coastguard Worker name: "my_apex_contributions", 1034*333d2b36SAndroid Build Coastguard Worker api_domain: "myapex", 1035*333d2b36SAndroid Build Coastguard Worker contents: [%v], 1036*333d2b36SAndroid Build Coastguard Worker } 1037*333d2b36SAndroid Build Coastguard Worker ` 1038*333d2b36SAndroid Build Coastguard Worker testCases := []struct { 1039*333d2b36SAndroid Build Coastguard Worker desc string 1040*333d2b36SAndroid Build Coastguard Worker configuredBootJars []string 1041*333d2b36SAndroid Build Coastguard Worker apexContributionContents string 1042*333d2b36SAndroid Build Coastguard Worker errorExpected bool 1043*333d2b36SAndroid Build Coastguard Worker }{ 1044*333d2b36SAndroid Build Coastguard Worker { 1045*333d2b36SAndroid Build Coastguard Worker desc: "Source apex is selected, and APEX_BOOT_JARS is correctly configured for source apex builds", 1046*333d2b36SAndroid Build Coastguard Worker configuredBootJars: []string{"myapex:foo", "myapex:bar"}, 1047*333d2b36SAndroid Build Coastguard Worker }, 1048*333d2b36SAndroid Build Coastguard Worker { 1049*333d2b36SAndroid Build Coastguard Worker desc: "Source apex is selected, and APEX_BOOT_JARS is missing bar", 1050*333d2b36SAndroid Build Coastguard Worker configuredBootJars: []string{"myapex:foo"}, 1051*333d2b36SAndroid Build Coastguard Worker errorExpected: true, 1052*333d2b36SAndroid Build Coastguard Worker }, 1053*333d2b36SAndroid Build Coastguard Worker { 1054*333d2b36SAndroid Build Coastguard Worker desc: "Prebuilt apex is selected, and APEX_BOOT_JARS is correctly configured for prebuilt apex build", 1055*333d2b36SAndroid Build Coastguard Worker configuredBootJars: []string{"myapex:foo"}, 1056*333d2b36SAndroid Build Coastguard Worker apexContributionContents: `"prebuilt_com.google.android.myapex"`, 1057*333d2b36SAndroid Build Coastguard Worker }, 1058*333d2b36SAndroid Build Coastguard Worker { 1059*333d2b36SAndroid Build Coastguard Worker desc: "Prebuilt apex is selected, and APEX_BOOT_JARS is missing foo", 1060*333d2b36SAndroid Build Coastguard Worker configuredBootJars: []string{"myapex:bar"}, 1061*333d2b36SAndroid Build Coastguard Worker apexContributionContents: `"prebuilt_com.google.android.myapex"`, 1062*333d2b36SAndroid Build Coastguard Worker errorExpected: true, 1063*333d2b36SAndroid Build Coastguard Worker }, 1064*333d2b36SAndroid Build Coastguard Worker } 1065*333d2b36SAndroid Build Coastguard Worker 1066*333d2b36SAndroid Build Coastguard Worker for _, tc := range testCases { 1067*333d2b36SAndroid Build Coastguard Worker fixture := android.GroupFixturePreparers( 1068*333d2b36SAndroid Build Coastguard Worker prepareForTestWithPlatformBootclasspath, 1069*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithApexBuildComponents, 1070*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 1071*333d2b36SAndroid Build Coastguard Worker java.FixtureConfigureApexBootJars(tc.configuredBootJars...), 1072*333d2b36SAndroid Build Coastguard Worker android.PrepareForTestWithBuildFlag("RELEASE_APEX_CONTRIBUTIONS_ART", "my_apex_contributions"), 1073*333d2b36SAndroid Build Coastguard Worker ) 1074*333d2b36SAndroid Build Coastguard Worker if tc.errorExpected { 1075*333d2b36SAndroid Build Coastguard Worker fixture = fixture.ExtendWithErrorHandler( 1076*333d2b36SAndroid Build Coastguard Worker android.FixtureExpectsAtLeastOneErrorMatchingPattern(`in contents.*must also be declared in PRODUCT_APEX_BOOT_JARS`), 1077*333d2b36SAndroid Build Coastguard Worker ) 1078*333d2b36SAndroid Build Coastguard Worker } 1079*333d2b36SAndroid Build Coastguard Worker fixture.RunTestWithBp(t, fmt.Sprintf(bp, tc.apexContributionContents)) 1080*333d2b36SAndroid Build Coastguard Worker } 1081*333d2b36SAndroid Build Coastguard Worker} 1082