Add test to TestJavaStableSdkVersion for legacy core platform
Adds a test case to TestJavaStableSdkVersion for the case where a module uses sdk_version: "core_platform" but is in the list of modules that can use the legacy version. This required storing the lookup map in the Config to allow it to be customized for the test. Bug: 180399951 Test: m nothing Change-Id: I404705c3fd8a559649c6ab2624856cf78f49f85c
This commit is contained in:
parent
05732954c6
commit
1ea7c9fa52
4 changed files with 76 additions and 11 deletions
|
@ -2187,6 +2187,7 @@ func TestJavaStableSdkVersion(t *testing.T) {
|
|||
name string
|
||||
expectedError string
|
||||
bp string
|
||||
preparer android.FixturePreparer
|
||||
}{
|
||||
{
|
||||
name: "Non-updatable apex with non-stable dep",
|
||||
|
@ -2257,6 +2258,30 @@ func TestJavaStableSdkVersion(t *testing.T) {
|
|||
}
|
||||
`,
|
||||
},
|
||||
{
|
||||
name: "Updatable apex with non-stable legacy core platform dep",
|
||||
expectedError: `\Qcannot depend on "myjar-uses-legacy": non stable SDK core_platform_current - uses legacy core platform\E`,
|
||||
bp: `
|
||||
apex {
|
||||
name: "myapex",
|
||||
java_libs: ["myjar-uses-legacy"],
|
||||
key: "myapex.key",
|
||||
updatable: true,
|
||||
}
|
||||
apex_key {
|
||||
name: "myapex.key",
|
||||
public_key: "testkey.avbpubkey",
|
||||
private_key: "testkey.pem",
|
||||
}
|
||||
java_library {
|
||||
name: "myjar-uses-legacy",
|
||||
srcs: ["foo/bar/MyClass.java"],
|
||||
sdk_version: "core_platform",
|
||||
apex_available: ["myapex"],
|
||||
}
|
||||
`,
|
||||
preparer: java.FixtureUseLegacyCorePlatformApi("myjar-uses-legacy"),
|
||||
},
|
||||
{
|
||||
name: "Updatable apex with non-stable transitive dep",
|
||||
// This is not actually detecting that the transitive dependency is unstable, rather it is
|
||||
|
@ -2293,12 +2318,22 @@ func TestJavaStableSdkVersion(t *testing.T) {
|
|||
}
|
||||
|
||||
for _, test := range testCases {
|
||||
if test.name != "Updatable apex with non-stable legacy core platform dep" {
|
||||
continue
|
||||
}
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
if test.expectedError == "" {
|
||||
testApex(t, test.bp)
|
||||
} else {
|
||||
testApexError(t, test.expectedError, test.bp)
|
||||
errorHandler := android.FixtureExpectsNoErrors
|
||||
if test.expectedError != "" {
|
||||
errorHandler = android.FixtureExpectsAtLeastOneErrorMatchingPattern(test.expectedError)
|
||||
}
|
||||
android.GroupFixturePreparers(
|
||||
java.PrepareForTestWithJavaDefaultModules,
|
||||
PrepareForTestWithApexBuildComponents,
|
||||
prepareForTestWithMyapex,
|
||||
android.OptionalFixturePreparer(test.preparer),
|
||||
).
|
||||
ExtendWithErrorHandler(errorHandler).
|
||||
RunTestWithBp(t, test.bp)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -382,7 +382,7 @@ func (j *Module) CheckStableSdkVersion(ctx android.BaseModuleContext) error {
|
|||
return nil
|
||||
}
|
||||
if sdkVersion.Kind == android.SdkCorePlatform {
|
||||
if useLegacyCorePlatformApiByName(j.BaseModuleName()) {
|
||||
if useLegacyCorePlatformApi(ctx, j.BaseModuleName()) {
|
||||
return fmt.Errorf("non stable SDK %v - uses legacy core platform", sdkVersion)
|
||||
} else {
|
||||
// Treat stable core platform as stable.
|
||||
|
|
|
@ -163,17 +163,27 @@ func init() {
|
|||
}
|
||||
}
|
||||
|
||||
func useLegacyCorePlatformApi(ctx android.EarlyModuleContext) bool {
|
||||
return useLegacyCorePlatformApiByName(ctx.ModuleName())
|
||||
var legacyCorePlatformApiLookupKey = android.NewOnceKey("legacyCorePlatformApiLookup")
|
||||
|
||||
func getLegacyCorePlatformApiLookup(config android.Config) map[string]struct{} {
|
||||
return config.Once(legacyCorePlatformApiLookupKey, func() interface{} {
|
||||
return legacyCorePlatformApiLookup
|
||||
}).(map[string]struct{})
|
||||
}
|
||||
|
||||
func useLegacyCorePlatformApiByName(name string) bool {
|
||||
_, found := legacyCorePlatformApiLookup[name]
|
||||
// useLegacyCorePlatformApi checks to see whether the supplied module name is in the list of modules
|
||||
// that are able to use the legacy core platform API and returns true if it does, false otherwise.
|
||||
//
|
||||
// This method takes the module name separately from the context as this may be being called for a
|
||||
// module that is not the target of the supplied context.
|
||||
func useLegacyCorePlatformApi(ctx android.EarlyModuleContext, moduleName string) bool {
|
||||
lookup := getLegacyCorePlatformApiLookup(ctx.Config())
|
||||
_, found := lookup[moduleName]
|
||||
return found
|
||||
}
|
||||
|
||||
func corePlatformSystemModules(ctx android.EarlyModuleContext) string {
|
||||
if useLegacyCorePlatformApi(ctx) {
|
||||
if useLegacyCorePlatformApi(ctx, ctx.ModuleName()) {
|
||||
return config.LegacyCorePlatformSystemModules
|
||||
} else {
|
||||
return config.StableCorePlatformSystemModules
|
||||
|
@ -181,7 +191,7 @@ func corePlatformSystemModules(ctx android.EarlyModuleContext) string {
|
|||
}
|
||||
|
||||
func corePlatformBootclasspathLibraries(ctx android.EarlyModuleContext) []string {
|
||||
if useLegacyCorePlatformApi(ctx) {
|
||||
if useLegacyCorePlatformApi(ctx, ctx.ModuleName()) {
|
||||
return config.LegacyCorePlatformBootclasspathLibraries
|
||||
} else {
|
||||
return config.StableCorePlatformBootclasspathLibraries
|
||||
|
|
|
@ -229,6 +229,26 @@ func FixtureConfigureApexBootJars(bootJars ...string) android.FixturePreparer {
|
|||
)
|
||||
}
|
||||
|
||||
// FixtureUseLegacyCorePlatformApi prepares the fixture by setting the exception list of those
|
||||
// modules that are allowed to use the legacy core platform API to be the ones supplied.
|
||||
func FixtureUseLegacyCorePlatformApi(moduleNames ...string) android.FixturePreparer {
|
||||
lookup := make(map[string]struct{})
|
||||
for _, moduleName := range moduleNames {
|
||||
lookup[moduleName] = struct{}{}
|
||||
}
|
||||
return android.FixtureModifyConfig(func(config android.Config) {
|
||||
// Try and set the legacyCorePlatformApiLookup in the config, the returned value will be the
|
||||
// actual value that is set.
|
||||
cached := config.Once(legacyCorePlatformApiLookupKey, func() interface{} {
|
||||
return lookup
|
||||
})
|
||||
// Make sure that the cached value is the one we need.
|
||||
if !reflect.DeepEqual(cached, lookup) {
|
||||
panic(fmt.Errorf("attempting to set legacyCorePlatformApiLookupKey to %q but it has already been set to %q", lookup, cached))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// registerRequiredBuildComponentsForTest registers the build components used by
|
||||
// PrepareForTestWithJavaDefaultModules.
|
||||
//
|
||||
|
|
Loading…
Reference in a new issue