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 "strings" 19*333d2b36SAndroid Build Coastguard Worker "testing" 20*333d2b36SAndroid Build Coastguard Worker 21*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 22*333d2b36SAndroid Build Coastguard Worker "android/soong/dexpreopt" 23*333d2b36SAndroid Build Coastguard Worker "android/soong/java" 24*333d2b36SAndroid Build Coastguard Worker) 25*333d2b36SAndroid Build Coastguard Worker 26*333d2b36SAndroid Build Coastguard Workervar prepareForTestWithSystemserverclasspathFragment = android.GroupFixturePreparers( 27*333d2b36SAndroid Build Coastguard Worker java.PrepareForTestWithDexpreopt, 28*333d2b36SAndroid Build Coastguard Worker PrepareForTestWithApexBuildComponents, 29*333d2b36SAndroid Build Coastguard Worker) 30*333d2b36SAndroid Build Coastguard Worker 31*333d2b36SAndroid Build Coastguard Workerfunc TestSystemserverclasspathFragmentContents(t *testing.T) { 32*333d2b36SAndroid Build Coastguard Worker t.Parallel() 33*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 34*333d2b36SAndroid Build Coastguard Worker prepareForTestWithSystemserverclasspathFragment, 35*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 36*333d2b36SAndroid Build Coastguard Worker dexpreopt.FixtureSetApexSystemServerJars("myapex:foo", "myapex:bar", "myapex:baz"), 37*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 38*333d2b36SAndroid Build Coastguard Worker apex { 39*333d2b36SAndroid Build Coastguard Worker name: "myapex", 40*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 41*333d2b36SAndroid Build Coastguard Worker systemserverclasspath_fragments: [ 42*333d2b36SAndroid Build Coastguard Worker "mysystemserverclasspathfragment", 43*333d2b36SAndroid Build Coastguard Worker ], 44*333d2b36SAndroid Build Coastguard Worker updatable: false, 45*333d2b36SAndroid Build Coastguard Worker } 46*333d2b36SAndroid Build Coastguard Worker 47*333d2b36SAndroid Build Coastguard Worker apex_key { 48*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 49*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 50*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 51*333d2b36SAndroid Build Coastguard Worker } 52*333d2b36SAndroid Build Coastguard Worker 53*333d2b36SAndroid Build Coastguard Worker java_library { 54*333d2b36SAndroid Build Coastguard Worker name: "foo", 55*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 56*333d2b36SAndroid Build Coastguard Worker installable: true, 57*333d2b36SAndroid Build Coastguard Worker apex_available: [ 58*333d2b36SAndroid Build Coastguard Worker "myapex", 59*333d2b36SAndroid Build Coastguard Worker ], 60*333d2b36SAndroid Build Coastguard Worker } 61*333d2b36SAndroid Build Coastguard Worker 62*333d2b36SAndroid Build Coastguard Worker java_library { 63*333d2b36SAndroid Build Coastguard Worker name: "bar", 64*333d2b36SAndroid Build Coastguard Worker srcs: ["c.java"], 65*333d2b36SAndroid Build Coastguard Worker installable: true, 66*333d2b36SAndroid Build Coastguard Worker dex_preopt: { 67*333d2b36SAndroid Build Coastguard Worker profile: "bar-art-profile", 68*333d2b36SAndroid Build Coastguard Worker }, 69*333d2b36SAndroid Build Coastguard Worker apex_available: [ 70*333d2b36SAndroid Build Coastguard Worker "myapex", 71*333d2b36SAndroid Build Coastguard Worker ], 72*333d2b36SAndroid Build Coastguard Worker } 73*333d2b36SAndroid Build Coastguard Worker 74*333d2b36SAndroid Build Coastguard Worker java_library { 75*333d2b36SAndroid Build Coastguard Worker name: "baz", 76*333d2b36SAndroid Build Coastguard Worker srcs: ["d.java"], 77*333d2b36SAndroid Build Coastguard Worker installable: true, 78*333d2b36SAndroid Build Coastguard Worker dex_preopt: { 79*333d2b36SAndroid Build Coastguard Worker profile_guided: true, // ignored 80*333d2b36SAndroid Build Coastguard Worker }, 81*333d2b36SAndroid Build Coastguard Worker apex_available: [ 82*333d2b36SAndroid Build Coastguard Worker "myapex", 83*333d2b36SAndroid Build Coastguard Worker ], 84*333d2b36SAndroid Build Coastguard Worker sdk_version: "core_current", 85*333d2b36SAndroid Build Coastguard Worker } 86*333d2b36SAndroid Build Coastguard Worker 87*333d2b36SAndroid Build Coastguard Worker systemserverclasspath_fragment { 88*333d2b36SAndroid Build Coastguard Worker name: "mysystemserverclasspathfragment", 89*333d2b36SAndroid Build Coastguard Worker contents: [ 90*333d2b36SAndroid Build Coastguard Worker "foo", 91*333d2b36SAndroid Build Coastguard Worker "bar", 92*333d2b36SAndroid Build Coastguard Worker "baz", 93*333d2b36SAndroid Build Coastguard Worker ], 94*333d2b36SAndroid Build Coastguard Worker apex_available: [ 95*333d2b36SAndroid Build Coastguard Worker "myapex", 96*333d2b36SAndroid Build Coastguard Worker ], 97*333d2b36SAndroid Build Coastguard Worker } 98*333d2b36SAndroid Build Coastguard Worker `) 99*333d2b36SAndroid Build Coastguard Worker 100*333d2b36SAndroid Build Coastguard Worker ctx := result.TestContext 101*333d2b36SAndroid Build Coastguard Worker 102*333d2b36SAndroid Build Coastguard Worker ensureExactContents(t, ctx, "myapex", "android_common_myapex", []string{ 103*333d2b36SAndroid Build Coastguard Worker "etc/classpaths/systemserverclasspath.pb", 104*333d2b36SAndroid Build Coastguard Worker "javalib/foo.jar", 105*333d2b36SAndroid Build Coastguard Worker "javalib/bar.jar", 106*333d2b36SAndroid Build Coastguard Worker "javalib/bar.jar.prof", 107*333d2b36SAndroid Build Coastguard Worker "javalib/baz.jar", 108*333d2b36SAndroid Build Coastguard Worker }) 109*333d2b36SAndroid Build Coastguard Worker 110*333d2b36SAndroid Build Coastguard Worker java.CheckModuleDependencies(t, ctx, "myapex", "android_common_myapex", []string{ 111*333d2b36SAndroid Build Coastguard Worker `dex2oatd`, 112*333d2b36SAndroid Build Coastguard Worker `myapex.key`, 113*333d2b36SAndroid Build Coastguard Worker `mysystemserverclasspathfragment`, 114*333d2b36SAndroid Build Coastguard Worker }) 115*333d2b36SAndroid Build Coastguard Worker 116*333d2b36SAndroid Build Coastguard Worker assertProfileGuided(t, ctx, "foo", "android_common_apex10000", false) 117*333d2b36SAndroid Build Coastguard Worker assertProfileGuided(t, ctx, "bar", "android_common_apex10000", true) 118*333d2b36SAndroid Build Coastguard Worker assertProfileGuided(t, ctx, "baz", "android_common_apex10000", false) 119*333d2b36SAndroid Build Coastguard Worker} 120*333d2b36SAndroid Build Coastguard Worker 121*333d2b36SAndroid Build Coastguard Workerfunc TestSystemserverclasspathFragmentNoGeneratedProto(t *testing.T) { 122*333d2b36SAndroid Build Coastguard Worker t.Parallel() 123*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 124*333d2b36SAndroid Build Coastguard Worker prepareForTestWithSystemserverclasspathFragment, 125*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 126*333d2b36SAndroid Build Coastguard Worker dexpreopt.FixtureSetApexSystemServerJars("myapex:foo"), 127*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 128*333d2b36SAndroid Build Coastguard Worker apex { 129*333d2b36SAndroid Build Coastguard Worker name: "myapex", 130*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 131*333d2b36SAndroid Build Coastguard Worker systemserverclasspath_fragments: [ 132*333d2b36SAndroid Build Coastguard Worker "mysystemserverclasspathfragment", 133*333d2b36SAndroid Build Coastguard Worker ], 134*333d2b36SAndroid Build Coastguard Worker updatable: false, 135*333d2b36SAndroid Build Coastguard Worker } 136*333d2b36SAndroid Build Coastguard Worker 137*333d2b36SAndroid Build Coastguard Worker apex_key { 138*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 139*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 140*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 141*333d2b36SAndroid Build Coastguard Worker } 142*333d2b36SAndroid Build Coastguard Worker 143*333d2b36SAndroid Build Coastguard Worker java_library { 144*333d2b36SAndroid Build Coastguard Worker name: "foo", 145*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 146*333d2b36SAndroid Build Coastguard Worker installable: true, 147*333d2b36SAndroid Build Coastguard Worker apex_available: [ 148*333d2b36SAndroid Build Coastguard Worker "myapex", 149*333d2b36SAndroid Build Coastguard Worker ], 150*333d2b36SAndroid Build Coastguard Worker } 151*333d2b36SAndroid Build Coastguard Worker 152*333d2b36SAndroid Build Coastguard Worker systemserverclasspath_fragment { 153*333d2b36SAndroid Build Coastguard Worker name: "mysystemserverclasspathfragment", 154*333d2b36SAndroid Build Coastguard Worker generate_classpaths_proto: false, 155*333d2b36SAndroid Build Coastguard Worker contents: [ 156*333d2b36SAndroid Build Coastguard Worker "foo", 157*333d2b36SAndroid Build Coastguard Worker ], 158*333d2b36SAndroid Build Coastguard Worker apex_available: [ 159*333d2b36SAndroid Build Coastguard Worker "myapex", 160*333d2b36SAndroid Build Coastguard Worker ], 161*333d2b36SAndroid Build Coastguard Worker } 162*333d2b36SAndroid Build Coastguard Worker `) 163*333d2b36SAndroid Build Coastguard Worker 164*333d2b36SAndroid Build Coastguard Worker ensureExactContents(t, result.TestContext, "myapex", "android_common_myapex", []string{ 165*333d2b36SAndroid Build Coastguard Worker "javalib/foo.jar", 166*333d2b36SAndroid Build Coastguard Worker }) 167*333d2b36SAndroid Build Coastguard Worker 168*333d2b36SAndroid Build Coastguard Worker java.CheckModuleDependencies(t, result.TestContext, "myapex", "android_common_myapex", []string{ 169*333d2b36SAndroid Build Coastguard Worker `dex2oatd`, 170*333d2b36SAndroid Build Coastguard Worker `myapex.key`, 171*333d2b36SAndroid Build Coastguard Worker `mysystemserverclasspathfragment`, 172*333d2b36SAndroid Build Coastguard Worker }) 173*333d2b36SAndroid Build Coastguard Worker} 174*333d2b36SAndroid Build Coastguard Worker 175*333d2b36SAndroid Build Coastguard Workerfunc TestSystemServerClasspathFragmentWithContentNotInMake(t *testing.T) { 176*333d2b36SAndroid Build Coastguard Worker t.Parallel() 177*333d2b36SAndroid Build Coastguard Worker android.GroupFixturePreparers( 178*333d2b36SAndroid Build Coastguard Worker prepareForTestWithSystemserverclasspathFragment, 179*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 180*333d2b36SAndroid Build Coastguard Worker dexpreopt.FixtureSetApexSystemServerJars("myapex:foo"), 181*333d2b36SAndroid Build Coastguard Worker ). 182*333d2b36SAndroid Build Coastguard Worker ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern( 183*333d2b36SAndroid Build Coastguard Worker `in contents must also be declared in PRODUCT_APEX_SYSTEM_SERVER_JARS`)). 184*333d2b36SAndroid Build Coastguard Worker RunTestWithBp(t, ` 185*333d2b36SAndroid Build Coastguard Worker apex { 186*333d2b36SAndroid Build Coastguard Worker name: "myapex", 187*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 188*333d2b36SAndroid Build Coastguard Worker systemserverclasspath_fragments: [ 189*333d2b36SAndroid Build Coastguard Worker "mysystemserverclasspathfragment", 190*333d2b36SAndroid Build Coastguard Worker ], 191*333d2b36SAndroid Build Coastguard Worker updatable: false, 192*333d2b36SAndroid Build Coastguard Worker } 193*333d2b36SAndroid Build Coastguard Worker 194*333d2b36SAndroid Build Coastguard Worker apex_key { 195*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 196*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 197*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 198*333d2b36SAndroid Build Coastguard Worker } 199*333d2b36SAndroid Build Coastguard Worker 200*333d2b36SAndroid Build Coastguard Worker java_library { 201*333d2b36SAndroid Build Coastguard Worker name: "foo", 202*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 203*333d2b36SAndroid Build Coastguard Worker installable: true, 204*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 205*333d2b36SAndroid Build Coastguard Worker } 206*333d2b36SAndroid Build Coastguard Worker 207*333d2b36SAndroid Build Coastguard Worker java_library { 208*333d2b36SAndroid Build Coastguard Worker name: "bar", 209*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 210*333d2b36SAndroid Build Coastguard Worker installable: true, 211*333d2b36SAndroid Build Coastguard Worker apex_available: ["myapex"], 212*333d2b36SAndroid Build Coastguard Worker } 213*333d2b36SAndroid Build Coastguard Worker 214*333d2b36SAndroid Build Coastguard Worker systemserverclasspath_fragment { 215*333d2b36SAndroid Build Coastguard Worker name: "mysystemserverclasspathfragment", 216*333d2b36SAndroid Build Coastguard Worker contents: [ 217*333d2b36SAndroid Build Coastguard Worker "foo", 218*333d2b36SAndroid Build Coastguard Worker "bar", 219*333d2b36SAndroid Build Coastguard Worker ], 220*333d2b36SAndroid Build Coastguard Worker apex_available: [ 221*333d2b36SAndroid Build Coastguard Worker "myapex", 222*333d2b36SAndroid Build Coastguard Worker ], 223*333d2b36SAndroid Build Coastguard Worker } 224*333d2b36SAndroid Build Coastguard Worker `) 225*333d2b36SAndroid Build Coastguard Worker} 226*333d2b36SAndroid Build Coastguard Worker 227*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltSystemserverclasspathFragmentContents(t *testing.T) { 228*333d2b36SAndroid Build Coastguard Worker t.Parallel() 229*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 230*333d2b36SAndroid Build Coastguard Worker prepareForTestWithSystemserverclasspathFragment, 231*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 232*333d2b36SAndroid Build Coastguard Worker dexpreopt.FixtureSetApexSystemServerJars("myapex:foo", "myapex:bar"), 233*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 234*333d2b36SAndroid Build Coastguard Worker prebuilt_apex { 235*333d2b36SAndroid Build Coastguard Worker name: "myapex", 236*333d2b36SAndroid Build Coastguard Worker arch: { 237*333d2b36SAndroid Build Coastguard Worker arm64: { 238*333d2b36SAndroid Build Coastguard Worker src: "myapex-arm64.apex", 239*333d2b36SAndroid Build Coastguard Worker }, 240*333d2b36SAndroid Build Coastguard Worker arm: { 241*333d2b36SAndroid Build Coastguard Worker src: "myapex-arm.apex", 242*333d2b36SAndroid Build Coastguard Worker }, 243*333d2b36SAndroid Build Coastguard Worker }, 244*333d2b36SAndroid Build Coastguard Worker exported_systemserverclasspath_fragments: ["mysystemserverclasspathfragment"], 245*333d2b36SAndroid Build Coastguard Worker } 246*333d2b36SAndroid Build Coastguard Worker 247*333d2b36SAndroid Build Coastguard Worker java_import { 248*333d2b36SAndroid Build Coastguard Worker name: "foo", 249*333d2b36SAndroid Build Coastguard Worker jars: ["foo.jar"], 250*333d2b36SAndroid Build Coastguard Worker apex_available: [ 251*333d2b36SAndroid Build Coastguard Worker "myapex", 252*333d2b36SAndroid Build Coastguard Worker ], 253*333d2b36SAndroid Build Coastguard Worker } 254*333d2b36SAndroid Build Coastguard Worker 255*333d2b36SAndroid Build Coastguard Worker java_import { 256*333d2b36SAndroid Build Coastguard Worker name: "bar", 257*333d2b36SAndroid Build Coastguard Worker jars: ["bar.jar"], 258*333d2b36SAndroid Build Coastguard Worker dex_preopt: { 259*333d2b36SAndroid Build Coastguard Worker profile_guided: true, 260*333d2b36SAndroid Build Coastguard Worker }, 261*333d2b36SAndroid Build Coastguard Worker apex_available: [ 262*333d2b36SAndroid Build Coastguard Worker "myapex", 263*333d2b36SAndroid Build Coastguard Worker ], 264*333d2b36SAndroid Build Coastguard Worker } 265*333d2b36SAndroid Build Coastguard Worker 266*333d2b36SAndroid Build Coastguard Worker prebuilt_systemserverclasspath_fragment { 267*333d2b36SAndroid Build Coastguard Worker name: "mysystemserverclasspathfragment", 268*333d2b36SAndroid Build Coastguard Worker prefer: true, 269*333d2b36SAndroid Build Coastguard Worker contents: [ 270*333d2b36SAndroid Build Coastguard Worker "foo", 271*333d2b36SAndroid Build Coastguard Worker "bar", 272*333d2b36SAndroid Build Coastguard Worker ], 273*333d2b36SAndroid Build Coastguard Worker apex_available: [ 274*333d2b36SAndroid Build Coastguard Worker "myapex", 275*333d2b36SAndroid Build Coastguard Worker ], 276*333d2b36SAndroid Build Coastguard Worker } 277*333d2b36SAndroid Build Coastguard Worker `) 278*333d2b36SAndroid Build Coastguard Worker 279*333d2b36SAndroid Build Coastguard Worker ctx := result.TestContext 280*333d2b36SAndroid Build Coastguard Worker 281*333d2b36SAndroid Build Coastguard Worker java.CheckModuleDependencies(t, ctx, "myapex", "android_common_myapex", []string{ 282*333d2b36SAndroid Build Coastguard Worker `all_apex_contributions`, 283*333d2b36SAndroid Build Coastguard Worker `dex2oatd`, 284*333d2b36SAndroid Build Coastguard Worker `prebuilt_mysystemserverclasspathfragment`, 285*333d2b36SAndroid Build Coastguard Worker }) 286*333d2b36SAndroid Build Coastguard Worker 287*333d2b36SAndroid Build Coastguard Worker java.CheckModuleDependencies(t, ctx, "mysystemserverclasspathfragment", "android_common_myapex", []string{ 288*333d2b36SAndroid Build Coastguard Worker `all_apex_contributions`, 289*333d2b36SAndroid Build Coastguard Worker `prebuilt_bar`, 290*333d2b36SAndroid Build Coastguard Worker `prebuilt_foo`, 291*333d2b36SAndroid Build Coastguard Worker }) 292*333d2b36SAndroid Build Coastguard Worker 293*333d2b36SAndroid Build Coastguard Worker ensureExactDeapexedContents(t, ctx, "myapex", "android_common_myapex", []string{ 294*333d2b36SAndroid Build Coastguard Worker "javalib/foo.jar", 295*333d2b36SAndroid Build Coastguard Worker "javalib/bar.jar", 296*333d2b36SAndroid Build Coastguard Worker "javalib/bar.jar.prof", 297*333d2b36SAndroid Build Coastguard Worker }) 298*333d2b36SAndroid Build Coastguard Worker 299*333d2b36SAndroid Build Coastguard Worker assertProfileGuidedPrebuilt(t, ctx, "myapex", "foo", false) 300*333d2b36SAndroid Build Coastguard Worker assertProfileGuidedPrebuilt(t, ctx, "myapex", "bar", true) 301*333d2b36SAndroid Build Coastguard Worker} 302*333d2b36SAndroid Build Coastguard Worker 303*333d2b36SAndroid Build Coastguard Workerfunc TestSystemserverclasspathFragmentStandaloneContents(t *testing.T) { 304*333d2b36SAndroid Build Coastguard Worker t.Parallel() 305*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 306*333d2b36SAndroid Build Coastguard Worker prepareForTestWithSystemserverclasspathFragment, 307*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 308*333d2b36SAndroid Build Coastguard Worker dexpreopt.FixtureSetApexStandaloneSystemServerJars("myapex:foo", "myapex:bar", "myapex:baz"), 309*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 310*333d2b36SAndroid Build Coastguard Worker apex { 311*333d2b36SAndroid Build Coastguard Worker name: "myapex", 312*333d2b36SAndroid Build Coastguard Worker key: "myapex.key", 313*333d2b36SAndroid Build Coastguard Worker systemserverclasspath_fragments: [ 314*333d2b36SAndroid Build Coastguard Worker "mysystemserverclasspathfragment", 315*333d2b36SAndroid Build Coastguard Worker ], 316*333d2b36SAndroid Build Coastguard Worker updatable: false, 317*333d2b36SAndroid Build Coastguard Worker } 318*333d2b36SAndroid Build Coastguard Worker 319*333d2b36SAndroid Build Coastguard Worker apex_key { 320*333d2b36SAndroid Build Coastguard Worker name: "myapex.key", 321*333d2b36SAndroid Build Coastguard Worker public_key: "testkey.avbpubkey", 322*333d2b36SAndroid Build Coastguard Worker private_key: "testkey.pem", 323*333d2b36SAndroid Build Coastguard Worker } 324*333d2b36SAndroid Build Coastguard Worker 325*333d2b36SAndroid Build Coastguard Worker java_library { 326*333d2b36SAndroid Build Coastguard Worker name: "foo", 327*333d2b36SAndroid Build Coastguard Worker srcs: ["b.java"], 328*333d2b36SAndroid Build Coastguard Worker installable: true, 329*333d2b36SAndroid Build Coastguard Worker apex_available: [ 330*333d2b36SAndroid Build Coastguard Worker "myapex", 331*333d2b36SAndroid Build Coastguard Worker ], 332*333d2b36SAndroid Build Coastguard Worker } 333*333d2b36SAndroid Build Coastguard Worker 334*333d2b36SAndroid Build Coastguard Worker java_library { 335*333d2b36SAndroid Build Coastguard Worker name: "bar", 336*333d2b36SAndroid Build Coastguard Worker srcs: ["c.java"], 337*333d2b36SAndroid Build Coastguard Worker dex_preopt: { 338*333d2b36SAndroid Build Coastguard Worker profile: "bar-art-profile", 339*333d2b36SAndroid Build Coastguard Worker }, 340*333d2b36SAndroid Build Coastguard Worker installable: true, 341*333d2b36SAndroid Build Coastguard Worker apex_available: [ 342*333d2b36SAndroid Build Coastguard Worker "myapex", 343*333d2b36SAndroid Build Coastguard Worker ], 344*333d2b36SAndroid Build Coastguard Worker } 345*333d2b36SAndroid Build Coastguard Worker 346*333d2b36SAndroid Build Coastguard Worker java_library { 347*333d2b36SAndroid Build Coastguard Worker name: "baz", 348*333d2b36SAndroid Build Coastguard Worker srcs: ["d.java"], 349*333d2b36SAndroid Build Coastguard Worker dex_preopt: { 350*333d2b36SAndroid Build Coastguard Worker profile_guided: true, // ignored 351*333d2b36SAndroid Build Coastguard Worker }, 352*333d2b36SAndroid Build Coastguard Worker installable: true, 353*333d2b36SAndroid Build Coastguard Worker apex_available: [ 354*333d2b36SAndroid Build Coastguard Worker "myapex", 355*333d2b36SAndroid Build Coastguard Worker ], 356*333d2b36SAndroid Build Coastguard Worker sdk_version: "core_current", 357*333d2b36SAndroid Build Coastguard Worker } 358*333d2b36SAndroid Build Coastguard Worker 359*333d2b36SAndroid Build Coastguard Worker systemserverclasspath_fragment { 360*333d2b36SAndroid Build Coastguard Worker name: "mysystemserverclasspathfragment", 361*333d2b36SAndroid Build Coastguard Worker standalone_contents: [ 362*333d2b36SAndroid Build Coastguard Worker "foo", 363*333d2b36SAndroid Build Coastguard Worker "bar", 364*333d2b36SAndroid Build Coastguard Worker "baz", 365*333d2b36SAndroid Build Coastguard Worker ], 366*333d2b36SAndroid Build Coastguard Worker apex_available: [ 367*333d2b36SAndroid Build Coastguard Worker "myapex", 368*333d2b36SAndroid Build Coastguard Worker ], 369*333d2b36SAndroid Build Coastguard Worker } 370*333d2b36SAndroid Build Coastguard Worker `) 371*333d2b36SAndroid Build Coastguard Worker 372*333d2b36SAndroid Build Coastguard Worker ctx := result.TestContext 373*333d2b36SAndroid Build Coastguard Worker 374*333d2b36SAndroid Build Coastguard Worker ensureExactContents(t, ctx, "myapex", "android_common_myapex", []string{ 375*333d2b36SAndroid Build Coastguard Worker "etc/classpaths/systemserverclasspath.pb", 376*333d2b36SAndroid Build Coastguard Worker "javalib/foo.jar", 377*333d2b36SAndroid Build Coastguard Worker "javalib/bar.jar", 378*333d2b36SAndroid Build Coastguard Worker "javalib/bar.jar.prof", 379*333d2b36SAndroid Build Coastguard Worker "javalib/baz.jar", 380*333d2b36SAndroid Build Coastguard Worker }) 381*333d2b36SAndroid Build Coastguard Worker 382*333d2b36SAndroid Build Coastguard Worker assertProfileGuided(t, ctx, "foo", "android_common_apex10000", false) 383*333d2b36SAndroid Build Coastguard Worker assertProfileGuided(t, ctx, "bar", "android_common_apex10000", true) 384*333d2b36SAndroid Build Coastguard Worker assertProfileGuided(t, ctx, "baz", "android_common_apex10000", false) 385*333d2b36SAndroid Build Coastguard Worker} 386*333d2b36SAndroid Build Coastguard Worker 387*333d2b36SAndroid Build Coastguard Workerfunc TestPrebuiltStandaloneSystemserverclasspathFragmentContents(t *testing.T) { 388*333d2b36SAndroid Build Coastguard Worker t.Parallel() 389*333d2b36SAndroid Build Coastguard Worker result := android.GroupFixturePreparers( 390*333d2b36SAndroid Build Coastguard Worker prepareForTestWithSystemserverclasspathFragment, 391*333d2b36SAndroid Build Coastguard Worker prepareForTestWithMyapex, 392*333d2b36SAndroid Build Coastguard Worker dexpreopt.FixtureSetApexStandaloneSystemServerJars("myapex:foo", "myapex:bar"), 393*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 394*333d2b36SAndroid Build Coastguard Worker prebuilt_apex { 395*333d2b36SAndroid Build Coastguard Worker name: "myapex", 396*333d2b36SAndroid Build Coastguard Worker arch: { 397*333d2b36SAndroid Build Coastguard Worker arm64: { 398*333d2b36SAndroid Build Coastguard Worker src: "myapex-arm64.apex", 399*333d2b36SAndroid Build Coastguard Worker }, 400*333d2b36SAndroid Build Coastguard Worker arm: { 401*333d2b36SAndroid Build Coastguard Worker src: "myapex-arm.apex", 402*333d2b36SAndroid Build Coastguard Worker }, 403*333d2b36SAndroid Build Coastguard Worker }, 404*333d2b36SAndroid Build Coastguard Worker exported_systemserverclasspath_fragments: ["mysystemserverclasspathfragment"], 405*333d2b36SAndroid Build Coastguard Worker } 406*333d2b36SAndroid Build Coastguard Worker 407*333d2b36SAndroid Build Coastguard Worker java_import { 408*333d2b36SAndroid Build Coastguard Worker name: "foo", 409*333d2b36SAndroid Build Coastguard Worker jars: ["foo.jar"], 410*333d2b36SAndroid Build Coastguard Worker apex_available: [ 411*333d2b36SAndroid Build Coastguard Worker "myapex", 412*333d2b36SAndroid Build Coastguard Worker ], 413*333d2b36SAndroid Build Coastguard Worker } 414*333d2b36SAndroid Build Coastguard Worker 415*333d2b36SAndroid Build Coastguard Worker java_import { 416*333d2b36SAndroid Build Coastguard Worker name: "bar", 417*333d2b36SAndroid Build Coastguard Worker jars: ["bar.jar"], 418*333d2b36SAndroid Build Coastguard Worker dex_preopt: { 419*333d2b36SAndroid Build Coastguard Worker profile_guided: true, 420*333d2b36SAndroid Build Coastguard Worker }, 421*333d2b36SAndroid Build Coastguard Worker apex_available: [ 422*333d2b36SAndroid Build Coastguard Worker "myapex", 423*333d2b36SAndroid Build Coastguard Worker ], 424*333d2b36SAndroid Build Coastguard Worker } 425*333d2b36SAndroid Build Coastguard Worker 426*333d2b36SAndroid Build Coastguard Worker prebuilt_systemserverclasspath_fragment { 427*333d2b36SAndroid Build Coastguard Worker name: "mysystemserverclasspathfragment", 428*333d2b36SAndroid Build Coastguard Worker prefer: true, 429*333d2b36SAndroid Build Coastguard Worker standalone_contents: [ 430*333d2b36SAndroid Build Coastguard Worker "foo", 431*333d2b36SAndroid Build Coastguard Worker "bar", 432*333d2b36SAndroid Build Coastguard Worker ], 433*333d2b36SAndroid Build Coastguard Worker apex_available: [ 434*333d2b36SAndroid Build Coastguard Worker "myapex", 435*333d2b36SAndroid Build Coastguard Worker ], 436*333d2b36SAndroid Build Coastguard Worker } 437*333d2b36SAndroid Build Coastguard Worker `) 438*333d2b36SAndroid Build Coastguard Worker 439*333d2b36SAndroid Build Coastguard Worker ctx := result.TestContext 440*333d2b36SAndroid Build Coastguard Worker 441*333d2b36SAndroid Build Coastguard Worker java.CheckModuleDependencies(t, ctx, "mysystemserverclasspathfragment", "android_common_myapex", []string{ 442*333d2b36SAndroid Build Coastguard Worker `all_apex_contributions`, 443*333d2b36SAndroid Build Coastguard Worker `prebuilt_bar`, 444*333d2b36SAndroid Build Coastguard Worker `prebuilt_foo`, 445*333d2b36SAndroid Build Coastguard Worker }) 446*333d2b36SAndroid Build Coastguard Worker 447*333d2b36SAndroid Build Coastguard Worker ensureExactDeapexedContents(t, ctx, "myapex", "android_common_myapex", []string{ 448*333d2b36SAndroid Build Coastguard Worker "javalib/foo.jar", 449*333d2b36SAndroid Build Coastguard Worker "javalib/bar.jar", 450*333d2b36SAndroid Build Coastguard Worker "javalib/bar.jar.prof", 451*333d2b36SAndroid Build Coastguard Worker }) 452*333d2b36SAndroid Build Coastguard Worker 453*333d2b36SAndroid Build Coastguard Worker assertProfileGuidedPrebuilt(t, ctx, "myapex", "foo", false) 454*333d2b36SAndroid Build Coastguard Worker assertProfileGuidedPrebuilt(t, ctx, "myapex", "bar", true) 455*333d2b36SAndroid Build Coastguard Worker} 456*333d2b36SAndroid Build Coastguard Worker 457*333d2b36SAndroid Build Coastguard Workerfunc assertProfileGuided(t *testing.T, ctx *android.TestContext, moduleName string, variant string, expected bool) { 458*333d2b36SAndroid Build Coastguard Worker dexpreopt := ctx.ModuleForTests(moduleName, variant).Rule("dexpreopt") 459*333d2b36SAndroid Build Coastguard Worker actual := strings.Contains(dexpreopt.RuleParams.Command, "--profile-file=") 460*333d2b36SAndroid Build Coastguard Worker if expected != actual { 461*333d2b36SAndroid Build Coastguard Worker t.Fatalf("Expected profile-guided to be %v, got %v", expected, actual) 462*333d2b36SAndroid Build Coastguard Worker } 463*333d2b36SAndroid Build Coastguard Worker} 464*333d2b36SAndroid Build Coastguard Worker 465*333d2b36SAndroid Build Coastguard Workerfunc assertProfileGuidedPrebuilt(t *testing.T, ctx *android.TestContext, apexName string, moduleName string, expected bool) { 466*333d2b36SAndroid Build Coastguard Worker dexpreopt := ctx.ModuleForTests(apexName, "android_common_"+apexName).Rule("dexpreopt." + moduleName) 467*333d2b36SAndroid Build Coastguard Worker actual := strings.Contains(dexpreopt.RuleParams.Command, "--profile-file=") 468*333d2b36SAndroid Build Coastguard Worker if expected != actual { 469*333d2b36SAndroid Build Coastguard Worker t.Fatalf("Expected profile-guided to be %v, got %v", expected, actual) 470*333d2b36SAndroid Build Coastguard Worker } 471*333d2b36SAndroid Build Coastguard Worker} 472