diff options
Diffstat (limited to 'apex/apex_test.go')
-rw-r--r-- | apex/apex_test.go | 165 |
1 files changed, 115 insertions, 50 deletions
diff --git a/apex/apex_test.go b/apex/apex_test.go index 1bc25141a..11fed3626 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -4423,6 +4423,11 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { java.CheckHiddenAPIRuleInputs(t, expectedInputs, indexRule) } + fragment := java.ApexVariantReference{ + Apex: proptools.StringPtr("myapex"), + Module: proptools.StringPtr("my-bootclasspath-fragment"), + } + t.Run("prebuilt only", func(t *testing.T) { bp := ` prebuilt_apex { @@ -4435,7 +4440,13 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { src: "myapex-arm.apex", }, }, - exported_java_libs: ["libfoo", "libbar"], + exported_bootclasspath_fragments: ["my-bootclasspath-fragment"], + } + + prebuilt_bootclasspath_fragment { + name: "my-bootclasspath-fragment", + contents: ["libfoo", "libbar"], + apex_available: ["myapex"], } java_import { @@ -4450,10 +4461,11 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { jars: ["libbar.jar"], }, apex_available: ["myapex"], + shared_library: false, } ` - ctx := testDexpreoptWithApexes(t, bp, "", preparer) + ctx := testDexpreoptWithApexes(t, bp, "", preparer, fragment) checkBootDexJarPath(t, ctx, "libfoo", "out/soong/.intermediates/myapex.deapexer/android_common/deapexer/javalib/libfoo.jar") checkBootDexJarPath(t, ctx, "libbar", "out/soong/.intermediates/myapex.deapexer/android_common/deapexer/javalib/libbar.jar") @@ -4469,7 +4481,13 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { apex_set { name: "myapex", set: "myapex.apks", - exported_java_libs: ["libfoo", "libbar"], + exported_bootclasspath_fragments: ["my-bootclasspath-fragment"], + } + + prebuilt_bootclasspath_fragment { + name: "my-bootclasspath-fragment", + contents: ["libfoo", "libbar"], + apex_available: ["myapex"], } java_import { @@ -4484,10 +4502,11 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { jars: ["libbar.jar"], }, apex_available: ["myapex"], + shared_library: false, } ` - ctx := testDexpreoptWithApexes(t, bp, "", preparer) + ctx := testDexpreoptWithApexes(t, bp, "", preparer, fragment) checkBootDexJarPath(t, ctx, "libfoo", "out/soong/.intermediates/myapex.deapexer/android_common/deapexer/javalib/libfoo.jar") checkBootDexJarPath(t, ctx, "libbar", "out/soong/.intermediates/myapex.deapexer/android_common/deapexer/javalib/libbar.jar") @@ -4510,7 +4529,13 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { src: "myapex-arm.apex", }, }, - exported_java_libs: ["libfoo", "libbar"], + exported_bootclasspath_fragments: ["my-bootclasspath-fragment"], + } + + prebuilt_bootclasspath_fragment { + name: "my-bootclasspath-fragment", + contents: ["libfoo", "libbar"], + apex_available: ["myapex"], } java_import { @@ -4531,6 +4556,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { jars: ["libbar.jar"], }, apex_available: ["myapex"], + shared_library: false, } java_sdk_library { @@ -4546,7 +4572,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { // prebuilt_apex module always depends on the prebuilt, and so it doesn't // find the dex boot jar in it. We either need to disable the source libfoo // or make the prebuilt libfoo preferred. - testDexpreoptWithApexes(t, bp, "module libfoo does not provide a dex boot jar", preparer) + testDexpreoptWithApexes(t, bp, "module libfoo does not provide a dex boot jar", preparer, fragment) }) t.Run("prebuilt library preferred with source", func(t *testing.T) { @@ -4561,7 +4587,13 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { src: "myapex-arm.apex", }, }, - exported_java_libs: ["libfoo", "libbar"], + exported_bootclasspath_fragments: ["my-bootclasspath-fragment"], + } + + prebuilt_bootclasspath_fragment { + name: "my-bootclasspath-fragment", + contents: ["libfoo", "libbar"], + apex_available: ["myapex"], } java_import { @@ -4584,6 +4616,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { jars: ["libbar.jar"], }, apex_available: ["myapex"], + shared_library: false, } java_sdk_library { @@ -4594,7 +4627,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { } ` - ctx := testDexpreoptWithApexes(t, bp, "", preparer) + ctx := testDexpreoptWithApexes(t, bp, "", preparer, fragment) checkBootDexJarPath(t, ctx, "libfoo", "out/soong/.intermediates/myapex.deapexer/android_common/deapexer/javalib/libfoo.jar") checkBootDexJarPath(t, ctx, "libbar", "out/soong/.intermediates/myapex.deapexer/android_common/deapexer/javalib/libbar.jar") @@ -4630,7 +4663,13 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { src: "myapex-arm.apex", }, }, - exported_java_libs: ["libfoo", "libbar"], + exported_bootclasspath_fragments: ["my-bootclasspath-fragment"], + } + + prebuilt_bootclasspath_fragment { + name: "my-bootclasspath-fragment", + contents: ["libfoo", "libbar"], + apex_available: ["myapex"], } java_import { @@ -4651,6 +4690,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { jars: ["libbar.jar"], }, apex_available: ["myapex"], + shared_library: false, } java_sdk_library { @@ -4661,7 +4701,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { } ` - ctx := testDexpreoptWithApexes(t, bp, "", preparer) + ctx := testDexpreoptWithApexes(t, bp, "", preparer, fragment) checkBootDexJarPath(t, ctx, "libfoo", "out/soong/.intermediates/libfoo/android_common_apex10000/hiddenapi/libfoo.jar") checkBootDexJarPath(t, ctx, "libbar", "out/soong/.intermediates/libbar/android_common_myapex/hiddenapi/libbar.jar") @@ -4697,7 +4737,13 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { src: "myapex-arm.apex", }, }, - exported_java_libs: ["libfoo", "libbar"], + exported_bootclasspath_fragments: ["my-bootclasspath-fragment"], + } + + prebuilt_bootclasspath_fragment { + name: "my-bootclasspath-fragment", + contents: ["libfoo", "libbar"], + apex_available: ["myapex"], } java_import { @@ -4720,6 +4766,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { jars: ["libbar.jar"], }, apex_available: ["myapex"], + shared_library: false, } java_sdk_library { @@ -4730,7 +4777,7 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) { } ` - ctx := testDexpreoptWithApexes(t, bp, "", preparer) + ctx := testDexpreoptWithApexes(t, bp, "", preparer, fragment) checkBootDexJarPath(t, ctx, "libfoo", "out/soong/.intermediates/myapex.deapexer/android_common/deapexer/javalib/libfoo.jar") checkBootDexJarPath(t, ctx, "libbar", "out/soong/.intermediates/myapex.deapexer/android_common/deapexer/javalib/libbar.jar") @@ -6305,7 +6352,7 @@ func TestAppSetBundlePrebuilt(t *testing.T) { android.AssertStringEquals(t, "myapex input", extractorOutput, copiedApex.Input.String()) } -func testNoUpdatableJarsInBootImage(t *testing.T, errmsg string, preparer android.FixturePreparer) { +func testNoUpdatableJarsInBootImage(t *testing.T, errmsg string, preparer android.FixturePreparer, fragments ...java.ApexVariantReference) { t.Helper() bp := ` @@ -6324,6 +6371,15 @@ func testNoUpdatableJarsInBootImage(t *testing.T, errmsg string, preparer androi apex_available: [ "some-non-updatable-apex", ], + compile_dex: true, + } + + bootclasspath_fragment { + name: "some-non-updatable-fragment", + contents: ["some-non-updatable-apex-lib"], + apex_available: [ + "some-non-updatable-apex", + ], } java_library { @@ -6355,7 +6411,7 @@ func testNoUpdatableJarsInBootImage(t *testing.T, errmsg string, preparer androi apex { name: "some-non-updatable-apex", key: "some-non-updatable-apex.key", - java_libs: ["some-non-updatable-apex-lib"], + bootclasspath_fragments: ["some-non-updatable-fragment"], updatable: false, } @@ -6370,7 +6426,7 @@ func testNoUpdatableJarsInBootImage(t *testing.T, errmsg string, preparer androi apex { name: "com.android.art.debug", key: "com.android.art.debug.key", - java_libs: ["some-art-lib"], + bootclasspath_fragments: ["art-bootclasspath-fragment"], updatable: true, min_sdk_version: "current", } @@ -6403,10 +6459,10 @@ func testNoUpdatableJarsInBootImage(t *testing.T, errmsg string, preparer androi } ` - testDexpreoptWithApexes(t, bp, errmsg, preparer) + testDexpreoptWithApexes(t, bp, errmsg, preparer, fragments...) } -func testDexpreoptWithApexes(t *testing.T, bp, errmsg string, preparer android.FixturePreparer) *android.TestContext { +func testDexpreoptWithApexes(t *testing.T, bp, errmsg string, preparer android.FixturePreparer, fragments ...java.ApexVariantReference) *android.TestContext { t.Helper() fs := android.MockFS{ @@ -6434,11 +6490,22 @@ func testDexpreoptWithApexes(t *testing.T, bp, errmsg string, preparer android.F PrepareForTestWithApexBuildComponents, preparer, fs.AddToFixture(), - android.FixtureAddTextFile("frameworks/base/boot/Android.bp", ` - platform_bootclasspath { - name: "platform-bootclasspath", + android.FixtureModifyMockFS(func(fs android.MockFS) { + if _, ok := fs["frameworks/base/boot/Android.bp"]; !ok { + insert := "" + for _, fragment := range fragments { + insert += fmt.Sprintf("{apex: %q, module: %q},\n", *fragment.Apex, *fragment.Module) + } + fs["frameworks/base/boot/Android.bp"] = []byte(fmt.Sprintf(` + platform_bootclasspath { + name: "platform-bootclasspath", + fragments: [ + %s + ], + } + `, insert)) } - `), + }), ). ExtendWithErrorHandler(errorHandler). RunTestWithBp(t, bp) @@ -6505,7 +6572,11 @@ func TestNoUpdatableJarsInBootImage(t *testing.T) { t.Run("updatable jar from ART apex in the ART boot image => ok", func(t *testing.T) { preparer := java.FixtureConfigureBootJars("com.android.art.debug:some-art-lib") - testNoUpdatableJarsInBootImage(t, "", preparer) + fragment := java.ApexVariantReference{ + Apex: proptools.StringPtr("com.android.art.debug"), + Module: proptools.StringPtr("art-bootclasspath-fragment"), + } + testNoUpdatableJarsInBootImage(t, "", preparer, fragment) }) t.Run("updatable jar from ART apex in the framework boot image => error", func(t *testing.T) { @@ -6537,7 +6608,11 @@ func TestNoUpdatableJarsInBootImage(t *testing.T) { t.Run("non-updatable jar from some other apex in the framework boot image => ok", func(t *testing.T) { preparer := java.FixtureConfigureBootJars("some-non-updatable-apex:some-non-updatable-apex-lib") - testNoUpdatableJarsInBootImage(t, "", preparer) + fragment := java.ApexVariantReference{ + Apex: proptools.StringPtr("some-non-updatable-apex"), + Module: proptools.StringPtr("some-non-updatable-fragment"), + } + testNoUpdatableJarsInBootImage(t, "", preparer, fragment) }) t.Run("nonexistent jar in the ART boot image => error", func(t *testing.T) { @@ -6568,28 +6643,11 @@ func TestNoUpdatableJarsInBootImage(t *testing.T) { func TestDexpreoptAccessDexFilesFromPrebuiltApex(t *testing.T) { preparer := java.FixtureConfigureBootJars("myapex:libfoo") t.Run("prebuilt no source", func(t *testing.T) { - testDexpreoptWithApexes(t, ` - prebuilt_apex { - name: "myapex" , - arch: { - arm64: { - src: "myapex-arm64.apex", - }, - arm: { - src: "myapex-arm.apex", - }, - }, - exported_java_libs: ["libfoo"], + fragment := java.ApexVariantReference{ + Apex: proptools.StringPtr("myapex"), + Module: proptools.StringPtr("my-bootclasspath-fragment"), } - java_import { - name: "libfoo", - jars: ["libfoo.jar"], - } -`, "", preparer) - }) - - t.Run("prebuilt no source", func(t *testing.T) { testDexpreoptWithApexes(t, ` prebuilt_apex { name: "myapex" , @@ -6601,14 +6659,21 @@ func TestDexpreoptAccessDexFilesFromPrebuiltApex(t *testing.T) { src: "myapex-arm.apex", }, }, - exported_java_libs: ["libfoo"], - } + exported_bootclasspath_fragments: ["my-bootclasspath-fragment"], + } - java_import { - name: "libfoo", - jars: ["libfoo.jar"], - } -`, "", preparer) + prebuilt_bootclasspath_fragment { + name: "my-bootclasspath-fragment", + contents: ["libfoo"], + apex_available: ["myapex"], + } + + java_import { + name: "libfoo", + jars: ["libfoo.jar"], + apex_available: ["myapex"], + } + `, "", preparer, fragment) }) } |