summaryrefslogtreecommitdiff
path: root/apex/bootclasspath_fragment_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'apex/bootclasspath_fragment_test.go')
-rw-r--r--apex/bootclasspath_fragment_test.go173
1 files changed, 133 insertions, 40 deletions
diff --git a/apex/bootclasspath_fragment_test.go b/apex/bootclasspath_fragment_test.go
index feda482a1..3d39d341c 100644
--- a/apex/bootclasspath_fragment_test.go
+++ b/apex/bootclasspath_fragment_test.go
@@ -15,6 +15,7 @@
package apex
import (
+ "fmt"
"strings"
"testing"
@@ -162,13 +163,11 @@ func checkBootclasspathFragment(t *testing.T, result *android.TestResult, module
}
func TestBootclasspathFragmentInArtApex(t *testing.T) {
- result := android.GroupFixturePreparers(
+ commonPreparer := android.GroupFixturePreparers(
prepareForTestWithBootclasspathFragment,
prepareForTestWithArtApex,
- // Configure some libraries in the art bootclasspath_fragment.
- java.FixtureConfigureBootJars("com.android.art:foo", "com.android.art:bar"),
- ).RunTestWithBp(t, `
+ android.FixtureWithRootAndroidBp(`
apex {
name: "com.android.art",
key: "com.android.art.key",
@@ -208,14 +207,6 @@ func TestBootclasspathFragmentInArtApex(t *testing.T) {
],
}
- bootclasspath_fragment {
- name: "mybootclasspathfragment",
- image_name: "art",
- apex_available: [
- "com.android.art",
- ],
- }
-
java_import {
name: "foo",
jars: ["foo.jar"],
@@ -231,39 +222,141 @@ func TestBootclasspathFragmentInArtApex(t *testing.T) {
"com.android.art",
],
}
+ `),
+ )
- // Make sure that a preferred prebuilt doesn't affect the apex.
- prebuilt_bootclasspath_fragment {
- name: "mybootclasspathfragment",
- image_name: "art",
- prefer: true,
- apex_available: [
- "com.android.art",
- ],
+ contentsInsert := func(contents []string) string {
+ insert := ""
+ if contents != nil {
+ insert = fmt.Sprintf(`contents: ["%s"],`, strings.Join(contents, `", "`))
}
- `)
+ return insert
+ }
- ensureExactContents(t, result.TestContext, "com.android.art", "android_common_com.android.art_image", []string{
- "javalib/arm/boot.art",
- "javalib/arm/boot.oat",
- "javalib/arm/boot.vdex",
- "javalib/arm/boot-bar.art",
- "javalib/arm/boot-bar.oat",
- "javalib/arm/boot-bar.vdex",
- "javalib/arm64/boot.art",
- "javalib/arm64/boot.oat",
- "javalib/arm64/boot.vdex",
- "javalib/arm64/boot-bar.art",
- "javalib/arm64/boot-bar.oat",
- "javalib/arm64/boot-bar.vdex",
- "javalib/bar.jar",
- "javalib/foo.jar",
+ addSource := func(contents ...string) android.FixturePreparer {
+ text := fmt.Sprintf(`
+ bootclasspath_fragment {
+ name: "mybootclasspathfragment",
+ image_name: "art",
+ %s
+ apex_available: [
+ "com.android.art",
+ ],
+ }
+ `, contentsInsert(contents))
+
+ return android.FixtureAddTextFile("art/build/boot/Android.bp", text)
+ }
+
+ addPrebuilt := func(prefer bool, contents ...string) android.FixturePreparer {
+ text := fmt.Sprintf(`
+ prebuilt_bootclasspath_fragment {
+ name: "mybootclasspathfragment",
+ image_name: "art",
+ %s
+ prefer: %t,
+ apex_available: [
+ "com.android.art",
+ ],
+ }
+ `, contentsInsert(contents), prefer)
+ return android.FixtureAddTextFile("prebuilts/module_sdk/art/Android.bp", text)
+ }
+
+ t.Run("boot image files", func(t *testing.T) {
+ result := android.GroupFixturePreparers(
+ commonPreparer,
+
+ // Configure some libraries in the art bootclasspath_fragment that match the source
+ // bootclasspath_fragment's contents property.
+ java.FixtureConfigureBootJars("com.android.art:foo", "com.android.art:bar"),
+ addSource("foo", "bar"),
+
+ // Make sure that a preferred prebuilt with consistent contents doesn't affect the apex.
+ addPrebuilt(true, "foo", "bar"),
+ ).RunTest(t)
+
+ ensureExactContents(t, result.TestContext, "com.android.art", "android_common_com.android.art_image", []string{
+ "javalib/arm/boot.art",
+ "javalib/arm/boot.oat",
+ "javalib/arm/boot.vdex",
+ "javalib/arm/boot-bar.art",
+ "javalib/arm/boot-bar.oat",
+ "javalib/arm/boot-bar.vdex",
+ "javalib/arm64/boot.art",
+ "javalib/arm64/boot.oat",
+ "javalib/arm64/boot.vdex",
+ "javalib/arm64/boot-bar.art",
+ "javalib/arm64/boot-bar.oat",
+ "javalib/arm64/boot-bar.vdex",
+ "javalib/bar.jar",
+ "javalib/foo.jar",
+ })
+
+ java.CheckModuleDependencies(t, result.TestContext, "com.android.art", "android_common_com.android.art_image", []string{
+ `bar`,
+ `com.android.art.key`,
+ `mybootclasspathfragment`,
+ })
})
- java.CheckModuleDependencies(t, result.TestContext, "com.android.art", "android_common_com.android.art_image", []string{
- `bar`,
- `com.android.art.key`,
- `mybootclasspathfragment`,
+ t.Run("source with inconsistency between config and contents", func(t *testing.T) {
+ android.GroupFixturePreparers(
+ commonPreparer,
+
+ // Create an inconsistency between the ArtApexJars configuration and the art source
+ // bootclasspath_fragment module's contents property.
+ java.FixtureConfigureBootJars("com.android.art:foo"),
+ addSource("foo", "bar"),
+ ).
+ ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`\QArtApexJars configuration specifies []string{"foo"}, contents property specifies []string{"foo", "bar"}\E`)).
+ RunTest(t)
+ })
+
+ t.Run("prebuilt with inconsistency between config and contents", func(t *testing.T) {
+ android.GroupFixturePreparers(
+ commonPreparer,
+
+ // Create an inconsistency between the ArtApexJars configuration and the art
+ // prebuilt_bootclasspath_fragment module's contents property.
+ java.FixtureConfigureBootJars("com.android.art:foo"),
+ addPrebuilt(false, "foo", "bar"),
+ ).
+ ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`\QArtApexJars configuration specifies []string{"foo"}, contents property specifies []string{"foo", "bar"}\E`)).
+ RunTest(t)
+ })
+
+ t.Run("preferred prebuilt with inconsistency between config and contents", func(t *testing.T) {
+ android.GroupFixturePreparers(
+ commonPreparer,
+
+ // Create an inconsistency between the ArtApexJars configuration and the art
+ // prebuilt_bootclasspath_fragment module's contents property.
+ java.FixtureConfigureBootJars("com.android.art:foo"),
+ addPrebuilt(true, "foo", "bar"),
+
+ // Source contents property is consistent with the config.
+ addSource("foo"),
+ ).
+ ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`\QArtApexJars configuration specifies []string{"foo"}, contents property specifies []string{"foo", "bar"}\E`)).
+ RunTest(t)
+ })
+
+ t.Run("source preferred and prebuilt with inconsistency between config and contents", func(t *testing.T) {
+ android.GroupFixturePreparers(
+ commonPreparer,
+
+ // Create an inconsistency between the ArtApexJars configuration and the art
+ // prebuilt_bootclasspath_fragment module's contents property.
+ java.FixtureConfigureBootJars("com.android.art:foo"),
+ addPrebuilt(false, "foo", "bar"),
+
+ // Source contents property is consistent with the config.
+ addSource("foo"),
+
+ // This should pass because while the prebuilt is inconsistent with the configuration it is
+ // not actually used.
+ ).RunTest(t)
})
}