diff --git a/android/mutator.go b/android/mutator.go index a06e0ee46..e25e2e8f1 100644 --- a/android/mutator.go +++ b/android/mutator.go @@ -202,7 +202,7 @@ var postDeps = []RegisterMutatorFunc{ RegisterPrebuiltsPostDepsMutators, RegisterVisibilityRuleEnforcer, RegisterLicensesDependencyChecker, - RegisterNeverallowMutator, + registerNeverallowMutator, RegisterOverridePostDepsMutators, } diff --git a/android/neverallow.go b/android/neverallow.go index 7455e6a78..a385bbc0c 100644 --- a/android/neverallow.go +++ b/android/neverallow.go @@ -42,7 +42,7 @@ import ( // counts as a match // - it has none of the "Without" properties matched (same rules as above) -func RegisterNeverallowMutator(ctx RegisterMutatorsContext) { +func registerNeverallowMutator(ctx RegisterMutatorsContext) { ctx.BottomUp("neverallow", neverallowMutator).Parallel() } @@ -661,6 +661,22 @@ func neverallowRules(config Config) []Rule { // Overrides the default neverallow rules for the supplied config. // // For testing only. -func SetTestNeverallowRules(config Config, testRules []Rule) { +func setTestNeverallowRules(config Config, testRules []Rule) { config.Once(neverallowRulesKey, func() interface{} { return testRules }) } + +// Prepares for a test by setting neverallow rules and enabling the mutator. +// +// If the supplied rules are nil then the default rules are used. +func PrepareForTestWithNeverallowRules(testRules []Rule) FixturePreparer { + return GroupFixturePreparers( + FixtureModifyConfig(func(config Config) { + if testRules != nil { + setTestNeverallowRules(config, testRules) + } + }), + FixtureRegisterWithContext(func(ctx RegistrationContext) { + ctx.PostDepsMutators(registerNeverallowMutator) + }), + ) +} diff --git a/android/neverallow_test.go b/android/neverallow_test.go index de0197a80..268346a7b 100644 --- a/android/neverallow_test.go +++ b/android/neverallow_test.go @@ -292,7 +292,6 @@ var prepareForNeverAllowTest = GroupFixturePreparers( ctx.RegisterModuleType("java_library_host", newMockJavaLibraryModule) ctx.RegisterModuleType("java_device_for_host", newMockJavaLibraryModule) ctx.RegisterModuleType("makefile_goal", newMockMakefileGoalModule) - ctx.PostDepsMutators(RegisterNeverallowMutator) }), ) @@ -301,12 +300,7 @@ func TestNeverallow(t *testing.T) { t.Run(test.name, func(t *testing.T) { GroupFixturePreparers( prepareForNeverAllowTest, - FixtureModifyConfig(func(config Config) { - // If the test has its own rules then use them instead of the default ones. - if test.rules != nil { - SetTestNeverallowRules(config, test.rules) - } - }), + PrepareForTestWithNeverallowRules(test.rules), test.fs.AddToFixture(), ). ExtendWithErrorHandler(FixtureExpectsAllErrorsToMatchAPattern(test.expectedErrors)). diff --git a/apex/apex_test.go b/apex/apex_test.go index 407faa1a8..d2baf1bb6 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -6658,45 +6658,33 @@ func testApexPermittedPackagesRules(t *testing.T, errmsg, bp string, apexBootJar public_key: "testkey.avbpubkey", private_key: "testkey.pem", }` - fs := map[string][]byte{ + fs := android.MockFS{ "lib1/src/A.java": nil, "lib2/src/B.java": nil, "system/sepolicy/apex/myapex-file_contexts": nil, } - config := android.TestArchConfig(t.TempDir(), nil, bp, fs) - android.SetTestNeverallowRules(config, rules) - updatableBootJars := make([]string, 0, len(apexBootJars)) - for _, apexBootJar := range apexBootJars { - updatableBootJars = append(updatableBootJars, "myapex:"+apexBootJar) + errorHandler := android.FixtureExpectsNoErrors + if errmsg != "" { + errorHandler = android.FixtureExpectsAtLeastOneErrorMatchingPattern(errmsg) } - config.TestProductVariables.UpdatableBootJars = android.CreateTestConfiguredJarList(updatableBootJars) - ctx := android.NewTestArchContext(config) - ctx.RegisterModuleType("apex", BundleFactory) - ctx.RegisterModuleType("apex_key", ApexKeyFactory) - ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators) - cc.RegisterRequiredBuildComponentsForTest(ctx) - java.RegisterRequiredBuildComponentsForTest(ctx) - ctx.PostDepsMutators(android.RegisterOverridePostDepsMutators) - ctx.PreDepsMutators(RegisterPreDepsMutators) - ctx.PostDepsMutators(RegisterPostDepsMutators) - ctx.PostDepsMutators(android.RegisterNeverallowMutator) - - ctx.Register() - - _, errs := ctx.ParseBlueprintsFiles("Android.bp") - android.FailIfErrored(t, errs) - - _, errs = ctx.PrepareBuildActions(config) - if errmsg == "" { - android.FailIfErrored(t, errs) - } else if len(errs) > 0 { - android.FailIfNoMatchingErrors(t, errmsg, errs) - return - } else { - t.Fatalf("missing expected error %q (0 errors are returned)", errmsg) - } + android.GroupFixturePreparers( + android.PrepareForTestWithAndroidBuildComponents, + java.PrepareForTestWithJavaBuildComponents, + PrepareForTestWithApexBuildComponents, + android.PrepareForTestWithNeverallowRules(rules), + android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) { + updatableBootJars := make([]string, 0, len(apexBootJars)) + for _, apexBootJar := range apexBootJars { + updatableBootJars = append(updatableBootJars, "myapex:"+apexBootJar) + } + variables.UpdatableBootJars = android.CreateTestConfiguredJarList(updatableBootJars) + }), + fs.AddToFixture(), + ). + ExtendWithErrorHandler(errorHandler). + RunTestWithBp(t, bp) } func TestApexPermittedPackagesRules(t *testing.T) {