diff options
-rw-r--r-- | genrule/Android.bp | 1 | ||||
-rw-r--r-- | genrule/allowlists.go | 22 | ||||
-rw-r--r-- | genrule/genrule.go | 21 | ||||
-rw-r--r-- | tradefed_modules/Android.bp | 2 | ||||
-rw-r--r-- | tradefed_modules/test_suite.go | 173 | ||||
-rw-r--r-- | tradefed_modules/test_suite_test.go | 151 |
6 files changed, 0 insertions, 370 deletions
diff --git a/genrule/Android.bp b/genrule/Android.bp index 49df48075..b82f2a9c3 100644 --- a/genrule/Android.bp +++ b/genrule/Android.bp @@ -14,7 +14,6 @@ bootstrap_go_package { "soong-shared", ], srcs: [ - "allowlists.go", "genrule.go", "locations.go", ], diff --git a/genrule/allowlists.go b/genrule/allowlists.go deleted file mode 100644 index 45a7f727c..000000000 --- a/genrule/allowlists.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2023 Google Inc. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package genrule - -var ( - SandboxingDenyModuleList = []string{ - // go/keep-sorted start - // go/keep-sorted end - } -) diff --git a/genrule/genrule.go b/genrule/genrule.go index 710ec9555..a7c09e76c 100644 --- a/genrule/genrule.go +++ b/genrule/genrule.go @@ -969,30 +969,9 @@ func DefaultsFactory(props ...interface{}) android.Module { return module } -var sandboxingAllowlistKey = android.NewOnceKey("genruleSandboxingAllowlistKey") - -type sandboxingAllowlistSets struct { - sandboxingDenyModuleSet map[string]bool -} - -func getSandboxingAllowlistSets(ctx android.PathContext) *sandboxingAllowlistSets { - return ctx.Config().Once(sandboxingAllowlistKey, func() interface{} { - sandboxingDenyModuleSet := map[string]bool{} - - android.AddToStringSet(sandboxingDenyModuleSet, SandboxingDenyModuleList) - return &sandboxingAllowlistSets{ - sandboxingDenyModuleSet: sandboxingDenyModuleSet, - } - }).(*sandboxingAllowlistSets) -} - func getSandboxedRuleBuilder(ctx android.ModuleContext, r *android.RuleBuilder) *android.RuleBuilder { if !ctx.DeviceConfig().GenruleSandboxing() { return r.SandboxTools() } - sandboxingAllowlistSets := getSandboxingAllowlistSets(ctx) - if sandboxingAllowlistSets.sandboxingDenyModuleSet[ctx.ModuleName()] { - return r.SandboxTools() - } return r.SandboxInputs() } diff --git a/tradefed_modules/Android.bp b/tradefed_modules/Android.bp index a765a0532..37bae3928 100644 --- a/tradefed_modules/Android.bp +++ b/tradefed_modules/Android.bp @@ -14,11 +14,9 @@ bootstrap_go_package { ], srcs: [ "test_module_config.go", - "test_suite.go", ], testSrcs: [ "test_module_config_test.go", - "test_suite_test.go", ], pluginFor: ["soong_build"], } diff --git a/tradefed_modules/test_suite.go b/tradefed_modules/test_suite.go deleted file mode 100644 index 8b7babf52..000000000 --- a/tradefed_modules/test_suite.go +++ /dev/null @@ -1,173 +0,0 @@ -// Copyright 2024 Google Inc. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package tradefed_modules - -import ( - "encoding/json" - "path" - "path/filepath" - - "android/soong/android" - "android/soong/tradefed" - "github.com/google/blueprint" -) - -const testSuiteModuleType = "test_suite" - -type testSuiteTag struct { - blueprint.BaseDependencyTag -} - -type testSuiteManifest struct { - Name string `json:"name"` - Files []string `json:"files"` -} - -func init() { - RegisterTestSuiteBuildComponents(android.InitRegistrationContext) -} - -func RegisterTestSuiteBuildComponents(ctx android.RegistrationContext) { - ctx.RegisterModuleType(testSuiteModuleType, TestSuiteFactory) -} - -var PrepareForTestWithTestSuiteBuildComponents = android.GroupFixturePreparers( - android.FixtureRegisterWithContext(RegisterTestSuiteBuildComponents), -) - -type testSuiteProperties struct { - Description string - Tests []string `android:"path,arch_variant"` -} - -type testSuiteModule struct { - android.ModuleBase - android.DefaultableModuleBase - testSuiteProperties -} - -func (t *testSuiteModule) DepsMutator(ctx android.BottomUpMutatorContext) { - for _, test := range t.Tests { - if ctx.OtherModuleDependencyVariantExists(ctx.Config().BuildOSCommonTarget.Variations(), test) { - // Host tests. - ctx.AddVariationDependencies(ctx.Config().BuildOSCommonTarget.Variations(), testSuiteTag{}, test) - } else { - // Target tests. - ctx.AddDependency(ctx.Module(), testSuiteTag{}, test) - } - } -} - -func (t *testSuiteModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { - suiteName := ctx.ModuleName() - modulesByName := make(map[string]android.Module) - ctx.WalkDeps(func(child, parent android.Module) bool { - // Recurse into test_suite dependencies. - if ctx.OtherModuleType(child) == testSuiteModuleType { - ctx.Phony(suiteName, android.PathForPhony(ctx, child.Name())) - return true - } - - // Only write out top level test suite dependencies here. - if _, ok := ctx.OtherModuleDependencyTag(child).(testSuiteTag); !ok { - return false - } - - if !child.InstallInTestcases() { - ctx.ModuleErrorf("test_suite only supports modules installed in testcases. %q is not installed in testcases.", child.Name()) - return false - } - - modulesByName[child.Name()] = child - return false - }) - - var files []string - for name, module := range modulesByName { - // Get the test provider data from the child. - tp, ok := android.OtherModuleProvider(ctx, module, tradefed.BaseTestProviderKey) - if !ok { - // TODO: Consider printing out a list of all module types. - ctx.ModuleErrorf("%q is not a test module.", name) - continue - } - - files = append(files, packageModuleFiles(ctx, suiteName, module, tp)...) - ctx.Phony(suiteName, android.PathForPhony(ctx, name)) - } - - manifestPath := android.PathForSuiteInstall(ctx, suiteName, suiteName+".json") - b, err := json.Marshal(testSuiteManifest{Name: suiteName, Files: android.SortedUniqueStrings(files)}) - if err != nil { - ctx.ModuleErrorf("Failed to marshal manifest: %v", err) - return - } - android.WriteFileRule(ctx, manifestPath, string(b)) - - ctx.Phony(suiteName, manifestPath) -} - -func TestSuiteFactory() android.Module { - module := &testSuiteModule{} - module.AddProperties(&module.testSuiteProperties) - - android.InitAndroidArchModule(module, android.HostAndDeviceSupported, android.MultilibCommon) - android.InitDefaultableModule(module) - - return module -} - -func packageModuleFiles(ctx android.ModuleContext, suiteName string, module android.Module, tp tradefed.BaseTestProviderData) []string { - - hostOrTarget := "target" - if tp.IsHost { - hostOrTarget = "host" - } - - // suiteRoot at out/soong/packaging/<suiteName>. - suiteRoot := android.PathForSuiteInstall(ctx, suiteName) - - var installed android.InstallPaths - // Install links to installed files from the module. - if installFilesInfo, ok := android.OtherModuleProvider(ctx, module, android.InstallFilesProvider); ok { - for _, f := range installFilesInfo.InstallFiles { - // rel is anything under .../<partition>, normally under .../testcases. - rel := android.Rel(ctx, f.PartitionDir(), f.String()) - - // Install the file under <suiteRoot>/<host|target>/<partition>. - installDir := suiteRoot.Join(ctx, hostOrTarget, f.Partition(), path.Dir(rel)) - linkTo, err := filepath.Rel(installDir.String(), f.String()) - if err != nil { - ctx.ModuleErrorf("Failed to get relative path from %s to %s: %v", installDir.String(), f.String(), err) - continue - } - installed = append(installed, ctx.InstallAbsoluteSymlink(installDir, path.Base(rel), linkTo)) - } - } - - // Install config file. - if tp.TestConfig != nil { - moduleRoot := suiteRoot.Join(ctx, hostOrTarget, "testcases", module.Name()) - installed = append(installed, ctx.InstallFile(moduleRoot, module.Name()+".config", tp.TestConfig)) - } - - // Add to phony and manifest, manifestpaths are relative to suiteRoot. - var manifestEntries []string - for _, f := range installed { - manifestEntries = append(manifestEntries, android.Rel(ctx, suiteRoot.String(), f.String())) - ctx.Phony(suiteName, f) - } - return manifestEntries -} diff --git a/tradefed_modules/test_suite_test.go b/tradefed_modules/test_suite_test.go deleted file mode 100644 index 3e1472cee..000000000 --- a/tradefed_modules/test_suite_test.go +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2024 Google Inc. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -package tradefed_modules - -import ( - "android/soong/android" - "android/soong/java" - "encoding/json" - "slices" - "testing" -) - -func TestTestSuites(t *testing.T) { - t.Parallel() - ctx := android.GroupFixturePreparers( - java.PrepareForTestWithJavaDefaultModules, - android.FixtureRegisterWithContext(RegisterTestSuiteBuildComponents), - ).RunTestWithBp(t, ` - android_test { - name: "TestModule1", - sdk_version: "current", - } - - android_test { - name: "TestModule2", - sdk_version: "current", - } - - test_suite { - name: "my-suite", - description: "a test suite", - tests: [ - "TestModule1", - "TestModule2", - ] - } - `) - manifestPath := ctx.ModuleForTests(t, "my-suite", "android_common").Output("out/soong/test_suites/my-suite/my-suite.json") - var actual testSuiteManifest - if err := json.Unmarshal([]byte(android.ContentFromFileRuleForTests(t, ctx.TestContext, manifestPath)), &actual); err != nil { - t.Errorf("failed to unmarshal manifest: %v", err) - } - slices.Sort(actual.Files) - - expected := testSuiteManifest{ - Name: "my-suite", - Files: []string{ - "target/testcases/TestModule1/TestModule1.config", - "target/testcases/TestModule1/arm64/TestModule1.apk", - "target/testcases/TestModule2/TestModule2.config", - "target/testcases/TestModule2/arm64/TestModule2.apk", - }, - } - - android.AssertDeepEquals(t, "manifests differ", expected, actual) -} - -func TestTestSuitesWithNested(t *testing.T) { - t.Parallel() - ctx := android.GroupFixturePreparers( - java.PrepareForTestWithJavaDefaultModules, - android.FixtureRegisterWithContext(RegisterTestSuiteBuildComponents), - ).RunTestWithBp(t, ` - android_test { - name: "TestModule1", - sdk_version: "current", - } - - android_test { - name: "TestModule2", - sdk_version: "current", - } - - android_test { - name: "TestModule3", - sdk_version: "current", - } - - test_suite { - name: "my-child-suite", - description: "a child test suite", - tests: [ - "TestModule1", - "TestModule2", - ] - } - - test_suite { - name: "my-all-tests-suite", - description: "a parent test suite", - tests: [ - "TestModule1", - "TestModule3", - "my-child-suite", - ] - } - `) - manifestPath := ctx.ModuleForTests(t, "my-all-tests-suite", "android_common").Output("out/soong/test_suites/my-all-tests-suite/my-all-tests-suite.json") - var actual testSuiteManifest - if err := json.Unmarshal([]byte(android.ContentFromFileRuleForTests(t, ctx.TestContext, manifestPath)), &actual); err != nil { - t.Errorf("failed to unmarshal manifest: %v", err) - } - slices.Sort(actual.Files) - - expected := testSuiteManifest{ - Name: "my-all-tests-suite", - Files: []string{ - "target/testcases/TestModule1/TestModule1.config", - "target/testcases/TestModule1/arm64/TestModule1.apk", - "target/testcases/TestModule2/TestModule2.config", - "target/testcases/TestModule2/arm64/TestModule2.apk", - "target/testcases/TestModule3/TestModule3.config", - "target/testcases/TestModule3/arm64/TestModule3.apk", - }, - } - - android.AssertDeepEquals(t, "manifests differ", expected, actual) -} - -func TestTestSuitesNotInstalledInTestcases(t *testing.T) { - t.Parallel() - android.GroupFixturePreparers( - java.PrepareForTestWithJavaDefaultModules, - android.FixtureRegisterWithContext(RegisterTestSuiteBuildComponents), - ).ExtendWithErrorHandler(android.FixtureExpectsAllErrorsToMatchAPattern([]string{ - `"SomeHostTest" is not installed in testcases`, - })).RunTestWithBp(t, ` - java_test_host { - name: "SomeHostTest", - srcs: ["a.java"], - } - test_suite { - name: "my-suite", - description: "a test suite", - tests: [ - "SomeHostTest", - ] - } - `) -} |