Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 28e5eda2 authored by satayev's avatar satayev Committed by Gerrit Code Review
Browse files

Merge "Make sure that classpath fragment contents appear in make vars."

parents f32f2d6b d34eb0c4
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -1665,8 +1665,9 @@ func (l *ConfiguredJarList) RemoveList(list ConfiguredJarList) ConfiguredJarList
	return ConfiguredJarList{apexes, jars}
}

// Filter keeps the entries if a jar appears in the given list of jars to keep; returns a new list.
func (l *ConfiguredJarList) Filter(jarsToKeep []string) ConfiguredJarList {
// Filter keeps the entries if a jar appears in the given list of jars to keep. Returns a new list
// and any remaining jars that are not on this list.
func (l *ConfiguredJarList) Filter(jarsToKeep []string) (ConfiguredJarList, []string) {
	var apexes []string
	var jars []string

@@ -1677,7 +1678,7 @@ func (l *ConfiguredJarList) Filter(jarsToKeep []string) ConfiguredJarList {
		}
	}

	return ConfiguredJarList{apexes, jars}
	return ConfiguredJarList{apexes, jars}, RemoveListFromList(jarsToKeep, jars)
}

// CopyOfJars returns a copy of the list of strings containing jar module name
+0 −15
Original line number Diff line number Diff line
@@ -159,11 +159,6 @@ func TestCreateClasspathElements(t *testing.T) {
			],
		}

		bootclasspath_fragment {
			name: "non-apex-fragment",
			contents: ["othersdklibrary"],
		}

		apex {
			name: "otherapex",
			key: "otherapex.key",
@@ -213,7 +208,6 @@ func TestCreateClasspathElements(t *testing.T) {
	myFragment := result.Module("mybootclasspath-fragment", "android_common_apex10000")
	myBar := result.Module("bar", "android_common_apex10000")

	nonApexFragment := result.Module("non-apex-fragment", "android_common")
	other := result.Module("othersdklibrary", "android_common_apex10000")

	otherApexLibrary := result.Module("otherapexlibrary", "android_common_apex10000")
@@ -253,15 +247,6 @@ func TestCreateClasspathElements(t *testing.T) {
		assertElementsEquals(t, "elements", expectedElements, elements)
	})

	// Verify that CreateClasspathElements detects when a fragment does not have an associated apex.
	t.Run("non apex fragment", func(t *testing.T) {
		ctx := newCtx()
		elements := java.CreateClasspathElements(ctx, []android.Module{}, []android.Module{nonApexFragment})
		android.FailIfNoMatchingErrors(t, "fragment non-apex-fragment{.*} is not part of an apex", ctx.errs)
		expectedElements := java.ClasspathElements{}
		assertElementsEquals(t, "elements", expectedElements, elements)
	})

	// Verify that CreateClasspathElements detects when an apex has multiple fragments.
	t.Run("multiple fragments for same apex", func(t *testing.T) {
		ctx := newCtx()
+137 −0
Original line number Diff line number Diff line
@@ -543,3 +543,140 @@ func TestPlatformBootclasspath_IncludesRemainingApexJars(t *testing.T) {
		"out/soong/target/product/test_device/system/etc/classpaths",
	)
}

func TestBootJarNotInApex(t *testing.T) {
	android.GroupFixturePreparers(
		prepareForTestWithPlatformBootclasspath,
		PrepareForTestWithApexBuildComponents,
		prepareForTestWithMyapex,
		java.FixtureConfigureApexBootJars("myapex:foo"),
	).ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(
		`dependency "foo" of "myplatform-bootclasspath" missing variant`)).
		RunTestWithBp(t, `
			apex {
				name: "myapex",
				key: "myapex.key",
				updatable: false,
			}

			apex_key {
				name: "myapex.key",
				public_key: "testkey.avbpubkey",
				private_key: "testkey.pem",
			}

			java_library {
				name: "foo",
				srcs: ["b.java"],
				installable: true,
				apex_available: [
					"myapex",
				],
			}

			bootclasspath_fragment {
				name: "not-in-apex-fragment",
				contents: [
					"foo",
				],
			}

			platform_bootclasspath {
				name: "myplatform-bootclasspath",
			}
		`)
}

func TestBootFragmentNotInApex(t *testing.T) {
	android.GroupFixturePreparers(
		prepareForTestWithPlatformBootclasspath,
		PrepareForTestWithApexBuildComponents,
		prepareForTestWithMyapex,
		java.FixtureConfigureApexBootJars("myapex:foo"),
	).ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(
		`library foo.*have no corresponding fragment.*`)).RunTestWithBp(t, `
			apex {
				name: "myapex",
				key: "myapex.key",
				java_libs: ["foo"],
				updatable: false,
			}

			apex_key {
				name: "myapex.key",
				public_key: "testkey.avbpubkey",
				private_key: "testkey.pem",
			}

			java_library {
				name: "foo",
				srcs: ["b.java"],
				installable: true,
				apex_available: ["myapex"],
				permitted_packages: ["foo"],
			}

			bootclasspath_fragment {
				name: "not-in-apex-fragment",
				contents: ["foo"],
			}

			platform_bootclasspath {
				name: "myplatform-bootclasspath",
			}
		`)
}

func TestNonBootJarInFragment(t *testing.T) {
	android.GroupFixturePreparers(
		prepareForTestWithPlatformBootclasspath,
		PrepareForTestWithApexBuildComponents,
		prepareForTestWithMyapex,
		java.FixtureConfigureApexBootJars("myapex:foo"),
	).ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(
		`in contents must also be declared in PRODUCT_APEX_BOOT_JARS`)).
		RunTestWithBp(t, `
			apex {
				name: "myapex",
				key: "myapex.key",
				bootclasspath_fragments: ["apex-fragment"],
				updatable: false,
			}

			apex_key {
				name: "myapex.key",
				public_key: "testkey.avbpubkey",
				private_key: "testkey.pem",
			}

			java_library {
				name: "foo",
				srcs: ["b.java"],
				installable: true,
				apex_available: ["myapex"],
				permitted_packages: ["foo"],
			}

			java_library {
				name: "bar",
				srcs: ["b.java"],
				installable: true,
				apex_available: ["myapex"],
				permitted_packages: ["bar"],
			}

			bootclasspath_fragment {
				name: "apex-fragment",
				contents: ["foo", "bar"],
				apex_available:[ "myapex" ],
			}

			platform_bootclasspath {
				name: "myplatform-bootclasspath",
				fragments: [{
						apex: "myapex",
						module:"apex-fragment",
				}],
			}
		`)
}
+51 −0
Original line number Diff line number Diff line
@@ -130,3 +130,54 @@ func TestSystemserverclasspathFragmentNoGeneratedProto(t *testing.T) {
		`mysystemserverclasspathfragment`,
	})
}

func TestSystemServerClasspathFragmentWithContentNotInMake(t *testing.T) {
	android.GroupFixturePreparers(
		prepareForTestWithSystemserverclasspathFragment,
		prepareForTestWithMyapex,
		dexpreopt.FixtureSetApexSystemServerJars("myapex:foo"),
	).
		ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(
			`in contents must also be declared in PRODUCT_UPDATABLE_SYSTEM_SERVER_JARS`)).
		RunTestWithBp(t, `
			apex {
				name: "myapex",
				key: "myapex.key",
				systemserverclasspath_fragments: [
					"mysystemserverclasspathfragment",
				],
				updatable: false,
			}

			apex_key {
				name: "myapex.key",
				public_key: "testkey.avbpubkey",
				private_key: "testkey.pem",
			}

			java_library {
				name: "foo",
				srcs: ["b.java"],
				installable: true,
				apex_available: ["myapex"],
			}

			java_library {
				name: "bar",
				srcs: ["b.java"],
				installable: true,
				apex_available: ["myapex"],
			}

			systemserverclasspath_fragment {
				name: "mysystemserverclasspathfragment",
				contents: [
					"foo",
					"bar",
				],
				apex_available: [
					"myapex",
				],
			}
		`)
}
+7 −1
Original line number Diff line number Diff line
@@ -538,7 +538,7 @@ func (b *BootclasspathFragmentModule) configuredJars(ctx android.ModuleContext)
	global := dexpreopt.GetGlobalConfig(ctx)

	possibleUpdatableModules := gatherPossibleApexModuleNamesAndStems(ctx, b.properties.Contents, bootclasspathFragmentContentDepTag)
	jars := global.ApexBootJars.Filter(possibleUpdatableModules)
	jars, unknown := global.ApexBootJars.Filter(possibleUpdatableModules)

	// TODO(satayev): for apex_test we want to include all contents unconditionally to classpaths
	// config. However, any test specific jars would not be present in ApexBootJars. Instead,
@@ -546,6 +546,12 @@ func (b *BootclasspathFragmentModule) configuredJars(ctx android.ModuleContext)
	// This is an exception to support end-to-end test for SdkExtensions, until such support exists.
	if android.InList("test_framework-sdkextensions", possibleUpdatableModules) {
		jars = jars.Append("com.android.sdkext", "test_framework-sdkextensions")
	} else if global.ApexBootJars.Len() != 0 && !android.IsModuleInVersionedSdk(ctx.Module()) {
		unknown = android.RemoveListFromList(unknown, b.properties.Coverage.Contents)
		_, unknown = android.RemoveFromList("core-icu4j", unknown)
		if len(unknown) > 0 {
			ctx.ModuleErrorf("%s in contents must also be declared in PRODUCT_APEX_BOOT_JARS", unknown)
		}
	}
	return jars
}
Loading