diff options
author | Cole Faust <colefaust@google.com> | 2023-01-04 17:30:38 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2023-01-04 17:30:38 +0000 |
commit | 94682b23c4e209491abd21b0353948e6614f45dd (patch) | |
tree | a052ec3ff230fa1508b83c384fb5fbd8c7c0dddf | |
parent | f038e067ee0a591bd31c2f0b2fa3224cf7937094 (diff) | |
parent | 216805457cb4567fe73f8d31a79c473d8f3d9e33 (diff) | |
download | soong-94682b23c4e209491abd21b0353948e6614f45dd.tar.gz |
Merge "Allow adding extra tradefed options in the Android.bp file"
-rw-r--r-- | cc/test.go | 23 | ||||
-rw-r--r-- | java/java.go | 28 | ||||
-rw-r--r-- | java/java_test.go | 24 | ||||
-rw-r--r-- | java/robolectric.go | 11 | ||||
-rw-r--r-- | python/test.go | 11 | ||||
-rw-r--r-- | rust/benchmark.go | 14 | ||||
-rw-r--r-- | rust/test.go | 17 | ||||
-rw-r--r-- | sh/sh_binary.go | 12 | ||||
-rw-r--r-- | tradefed/autogen.go | 172 |
9 files changed, 146 insertions, 166 deletions
diff --git a/cc/test.go b/cc/test.go index 2a4861c77..16ef0eff5 100644 --- a/cc/test.go +++ b/cc/test.go @@ -415,8 +415,16 @@ func (test *testBinary) install(ctx ModuleContext, file android.Path) { testInstallBase := getTestInstallBase(useVendor) configs := getTradefedConfigOptions(ctx, &test.Properties, test.isolated(ctx)) - test.testConfig = tradefed.AutoGenNativeTestConfig(ctx, test.Properties.Test_config, - test.Properties.Test_config_template, test.testDecorator.InstallerProperties.Test_suites, configs, test.Properties.Auto_gen_config, testInstallBase) + test.testConfig = tradefed.AutoGenTestConfig(ctx, tradefed.AutoGenTestConfigOptions{ + TestConfigProp: test.Properties.Test_config, + TestConfigTemplateProp: test.Properties.Test_config_template, + TestSuites: test.testDecorator.InstallerProperties.Test_suites, + Config: configs, + AutoGenConfig: test.Properties.Auto_gen_config, + TestInstallBase: testInstallBase, + DeviceTemplate: "${NativeTestConfigTemplate}", + HostTemplate: "${NativeHostTestConfigTemplate}", + }) test.extraTestConfigs = android.PathsForModuleSrc(ctx, test.Properties.Test_options.Extra_test_configs) @@ -630,8 +638,15 @@ func (benchmark *benchmarkDecorator) install(ctx ModuleContext, file android.Pat if Bool(benchmark.Properties.Require_root) { configs = append(configs, tradefed.Object{"target_preparer", "com.android.tradefed.targetprep.RootTargetPreparer", nil}) } - benchmark.testConfig = tradefed.AutoGenNativeBenchmarkTestConfig(ctx, benchmark.Properties.Test_config, - benchmark.Properties.Test_config_template, benchmark.Properties.Test_suites, configs, benchmark.Properties.Auto_gen_config) + benchmark.testConfig = tradefed.AutoGenTestConfig(ctx, tradefed.AutoGenTestConfigOptions{ + TestConfigProp: benchmark.Properties.Test_config, + TestConfigTemplateProp: benchmark.Properties.Test_config_template, + TestSuites: benchmark.Properties.Test_suites, + Config: configs, + AutoGenConfig: benchmark.Properties.Auto_gen_config, + DeviceTemplate: "${NativeBenchmarkTestConfigTemplate}", + HostTemplate: "${NativeBenchmarkTestConfigTemplate}", + }) benchmark.binaryDecorator.baseInstaller.dir = filepath.Join("benchmarktest", ctx.ModuleName()) benchmark.binaryDecorator.baseInstaller.dir64 = filepath.Join("benchmarktest64", ctx.ModuleName()) diff --git a/java/java.go b/java/java.go index da8d888b1..e83678ed1 100644 --- a/java/java.go +++ b/java/java.go @@ -915,6 +915,10 @@ type TestOptions struct { // a list of extra test configuration files that should be installed with the module. Extra_test_configs []string `android:"path,arch_variant"` + + // Extra <option> tags to add to the auto generated test xml file. The "key" + // is optional in each of these. + Tradefed_options []tradefed.Option } type testProperties struct { @@ -1192,9 +1196,18 @@ func (j *Test) generateAndroidBuildActionsWithConfig(ctx android.ModuleContext, defaultUnitTest := !inList("tradefed", j.properties.Libs) && !inList("cts", j.testProperties.Test_suites) j.testProperties.Test_options.Unit_test = proptools.BoolPtr(defaultUnitTest) } - - j.testConfig = tradefed.AutoGenJavaTestConfig(ctx, j.testProperties.Test_config, j.testProperties.Test_config_template, - j.testProperties.Test_suites, configs, j.testProperties.Auto_gen_config, j.testProperties.Test_options.Unit_test) + j.testConfig = tradefed.AutoGenTestConfig(ctx, tradefed.AutoGenTestConfigOptions{ + TestConfigProp: j.testProperties.Test_config, + TestConfigTemplateProp: j.testProperties.Test_config_template, + TestSuites: j.testProperties.Test_suites, + Config: configs, + OptionsForAutogenerated: j.testProperties.Test_options.Tradefed_options, + AutoGenConfig: j.testProperties.Auto_gen_config, + UnitTest: j.testProperties.Test_options.Unit_test, + DeviceTemplate: "${JavaTestConfigTemplate}", + HostTemplate: "${JavaHostTestConfigTemplate}", + HostUnitTestTemplate: "${JavaHostUnitTestConfigTemplate}", + }) j.data = android.PathsForModuleSrc(ctx, j.testProperties.Data) @@ -1239,8 +1252,13 @@ func (j *TestHelperLibrary) GenerateAndroidBuildActions(ctx android.ModuleContex } func (j *JavaTestImport) GenerateAndroidBuildActions(ctx android.ModuleContext) { - j.testConfig = tradefed.AutoGenJavaTestConfig(ctx, j.prebuiltTestProperties.Test_config, nil, - j.prebuiltTestProperties.Test_suites, nil, nil, nil) + j.testConfig = tradefed.AutoGenTestConfig(ctx, tradefed.AutoGenTestConfigOptions{ + TestConfigProp: j.prebuiltTestProperties.Test_config, + TestSuites: j.prebuiltTestProperties.Test_suites, + DeviceTemplate: "${JavaTestConfigTemplate}", + HostTemplate: "${JavaHostTestConfigTemplate}", + HostUnitTestTemplate: "${JavaHostUnitTestConfigTemplate}", + }) j.Import.GenerateAndroidBuildActions(ctx) } diff --git a/java/java_test.go b/java/java_test.go index dff1fd07f..085f6272a 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -1945,3 +1945,27 @@ func TestJavaApiLibraryJarGeneration(t *testing.T) { } } } + +func TestTradefedOptions(t *testing.T) { + result := PrepareForTestWithJavaBuildComponents.RunTestWithBp(t, ` +java_test_host { + name: "foo", + test_options: { + tradefed_options: [ + { + name: "exclude-path", + value: "org/apache" + } + ] + } +} +`) + + buildOS := result.Config.BuildOS.String() + args := result.ModuleForTests("foo", buildOS+"_common"). + Output("out/soong/.intermediates/foo/" + buildOS + "_common/foo.config").Args + expected := proptools.NinjaAndShellEscape("<option name=\"exclude-path\" value=\"org/apache\" />") + if args["extraConfigs"] != expected { + t.Errorf("Expected args[\"extraConfigs\"] to equal %q, was %q", expected, args["extraConfigs"]) + } +} diff --git a/java/robolectric.go b/java/robolectric.go index 6e8d5913c..68f27b859 100644 --- a/java/robolectric.go +++ b/java/robolectric.go @@ -131,9 +131,14 @@ func (r *robolectricTest) GenerateAndroidBuildActions(ctx android.ModuleContext) r.forceOSType = ctx.Config().BuildOS r.forceArchType = ctx.Config().BuildArch - r.testConfig = tradefed.AutoGenRobolectricTestConfig(ctx, r.testProperties.Test_config, - r.testProperties.Test_config_template, r.testProperties.Test_suites, - r.testProperties.Auto_gen_config) + r.testConfig = tradefed.AutoGenTestConfig(ctx, tradefed.AutoGenTestConfigOptions{ + TestConfigProp: r.testProperties.Test_config, + TestConfigTemplateProp: r.testProperties.Test_config_template, + TestSuites: r.testProperties.Test_suites, + AutoGenConfig: r.testProperties.Auto_gen_config, + DeviceTemplate: "${RobolectricTestConfigTemplate}", + HostTemplate: "${RobolectricTestConfigTemplate}", + }) r.data = android.PathsForModuleSrc(ctx, r.testProperties.Data) roboTestConfig := android.PathForModuleGen(ctx, "robolectric"). diff --git a/python/test.go b/python/test.go index b9b346549..fc5c2112f 100644 --- a/python/test.go +++ b/python/test.go @@ -67,9 +67,14 @@ func (test *testDecorator) bootstrapperProps() []interface{} { } func (test *testDecorator) install(ctx android.ModuleContext, file android.Path) { - test.testConfig = tradefed.AutoGenPythonBinaryHostTestConfig(ctx, test.testProperties.Test_config, - test.testProperties.Test_config_template, test.binaryDecorator.binaryProperties.Test_suites, - test.binaryDecorator.binaryProperties.Auto_gen_config) + test.testConfig = tradefed.AutoGenTestConfig(ctx, tradefed.AutoGenTestConfigOptions{ + TestConfigProp: test.testProperties.Test_config, + TestConfigTemplateProp: test.testProperties.Test_config_template, + TestSuites: test.binaryDecorator.binaryProperties.Test_suites, + AutoGenConfig: test.binaryDecorator.binaryProperties.Auto_gen_config, + DeviceTemplate: "${PythonBinaryHostTestConfigTemplate}", + HostTemplate: "${PythonBinaryHostTestConfigTemplate}", + }) test.binaryDecorator.pythonInstaller.dir = "nativetest" test.binaryDecorator.pythonInstaller.dir64 = "nativetest64" diff --git a/rust/benchmark.go b/rust/benchmark.go index 0e842435d..c0f1e24d1 100644 --- a/rust/benchmark.go +++ b/rust/benchmark.go @@ -112,12 +112,14 @@ func (benchmark *benchmarkDecorator) compilerProps() []interface{} { } func (benchmark *benchmarkDecorator) install(ctx ModuleContext) { - benchmark.testConfig = tradefed.AutoGenRustBenchmarkConfig(ctx, - benchmark.Properties.Test_config, - benchmark.Properties.Test_config_template, - benchmark.Properties.Test_suites, - nil, - benchmark.Properties.Auto_gen_config) + benchmark.testConfig = tradefed.AutoGenTestConfig(ctx, tradefed.AutoGenTestConfigOptions{ + TestConfigProp: benchmark.Properties.Test_config, + TestConfigTemplateProp: benchmark.Properties.Test_config_template, + TestSuites: benchmark.Properties.Test_suites, + AutoGenConfig: benchmark.Properties.Auto_gen_config, + DeviceTemplate: "${RustDeviceBenchmarkConfigTemplate}", + HostTemplate: "${RustHostBenchmarkConfigTemplate}", + }) // default relative install path is module name if !Bool(benchmark.Properties.No_named_install_directory) { diff --git a/rust/test.go b/rust/test.go index 0cc3bca6e..4f922b494 100644 --- a/rust/test.go +++ b/rust/test.go @@ -130,13 +130,16 @@ func (test *testDecorator) install(ctx ModuleContext) { configs = append(configs, tradefed.Object{"target_preparer", "com.android.tradefed.targetprep.RootTargetPreparer", options}) } - test.testConfig = tradefed.AutoGenRustTestConfig(ctx, - test.Properties.Test_config, - test.Properties.Test_config_template, - test.Properties.Test_suites, - configs, - test.Properties.Auto_gen_config, - testInstallBase) + test.testConfig = tradefed.AutoGenTestConfig(ctx, tradefed.AutoGenTestConfigOptions{ + TestConfigProp: test.Properties.Test_config, + TestConfigTemplateProp: test.Properties.Test_config_template, + TestSuites: test.Properties.Test_suites, + Config: configs, + AutoGenConfig: test.Properties.Auto_gen_config, + TestInstallBase: testInstallBase, + DeviceTemplate: "${RustDeviceTestConfigTemplate}", + HostTemplate: "${RustHostTestConfigTemplate}", + }) dataSrcPaths := android.PathsForModuleSrc(ctx, test.Properties.Data) diff --git a/sh/sh_binary.go b/sh/sh_binary.go index 96273297a..c921ca68a 100644 --- a/sh/sh_binary.go +++ b/sh/sh_binary.go @@ -379,8 +379,16 @@ func (s *ShTest) GenerateAndroidBuildActions(ctx android.ModuleContext) { } configs = append(configs, tradefed.Object{"target_preparer", "com.android.tradefed.targetprep.PushFilePreparer", options}) } - s.testConfig = tradefed.AutoGenShellTestConfig(ctx, s.testProperties.Test_config, - s.testProperties.Test_config_template, s.testProperties.Test_suites, configs, s.testProperties.Auto_gen_config, s.outputFilePath.Base()) + s.testConfig = tradefed.AutoGenTestConfig(ctx, tradefed.AutoGenTestConfigOptions{ + TestConfigProp: s.testProperties.Test_config, + TestConfigTemplateProp: s.testProperties.Test_config_template, + TestSuites: s.testProperties.Test_suites, + Config: configs, + AutoGenConfig: s.testProperties.Auto_gen_config, + OutputFileName: s.outputFilePath.Base(), + DeviceTemplate: "${ShellTestConfigTemplate}", + HostTemplate: "${ShellTestConfigTemplate}", + }) s.dataModules = make(map[string]android.Path) ctx.VisitDirectDeps(func(dep android.Module) { diff --git a/tradefed/autogen.go b/tradefed/autogen.go index c2429ab7a..e93bac3ed 100644 --- a/tradefed/autogen.go +++ b/tradefed/autogen.go @@ -107,15 +107,10 @@ func (ob Object) Config() string { } -func autogenTemplate(ctx android.ModuleContext, output android.WritablePath, template string, configs []Config, testInstallBase string) { - autogenTemplateWithNameAndOutputFile(ctx, ctx.ModuleName(), output, template, configs, "", testInstallBase) -} - -func autogenTemplateWithName(ctx android.ModuleContext, name string, output android.WritablePath, template string, configs []Config, testInstallBase string) { - autogenTemplateWithNameAndOutputFile(ctx, name, output, template, configs, "", testInstallBase) -} - -func autogenTemplateWithNameAndOutputFile(ctx android.ModuleContext, name string, output android.WritablePath, template string, configs []Config, outputFileName string, testInstallBase string) { +func autogenTemplate(ctx android.ModuleContext, name string, output android.WritablePath, template string, configs []Config, outputFileName string, testInstallBase string) { + if template == "" { + ctx.ModuleErrorf("Empty template") + } var configStrings []string for _, config := range configs { configStrings = append(configStrings, config.Config()) @@ -137,144 +132,49 @@ func autogenTemplateWithNameAndOutputFile(ctx android.ModuleContext, name string }) } -func AutoGenNativeTestConfig(ctx android.ModuleContext, testConfigProp *string, - testConfigTemplateProp *string, testSuites []string, config []Config, autoGenConfig *bool, testInstallBase string) android.Path { - - path, autogenPath := testConfigPath(ctx, testConfigProp, testSuites, autoGenConfig, testConfigTemplateProp) +// AutoGenTestConfigOptions is used so that we can supply many optional +// arguments to the AutoGenTestConfig function. +type AutoGenTestConfigOptions struct { + Name string + OutputFileName string + TestConfigProp *string + TestConfigTemplateProp *string + TestSuites []string + Config []Config + OptionsForAutogenerated []Option + AutoGenConfig *bool + UnitTest *bool + TestInstallBase string + DeviceTemplate string + HostTemplate string + HostUnitTestTemplate string +} + +func AutoGenTestConfig(ctx android.ModuleContext, options AutoGenTestConfigOptions) android.Path { + configs := append([]Config{}, options.Config...) + for _, c := range options.OptionsForAutogenerated { + configs = append(configs, c) + } + path, autogenPath := testConfigPath(ctx, options.TestConfigProp, options.TestSuites, options.AutoGenConfig, options.TestConfigTemplateProp) if autogenPath != nil { - templatePath := getTestConfigTemplate(ctx, testConfigTemplateProp) + templatePath := getTestConfigTemplate(ctx, options.TestConfigTemplateProp) if templatePath.Valid() { - autogenTemplate(ctx, autogenPath, templatePath.String(), config, testInstallBase) + autogenTemplate(ctx, options.Name, autogenPath, templatePath.String(), configs, options.OutputFileName, options.TestInstallBase) } else { if ctx.Device() { - autogenTemplate(ctx, autogenPath, "${NativeTestConfigTemplate}", config, testInstallBase) + autogenTemplate(ctx, options.Name, autogenPath, options.DeviceTemplate, configs, options.OutputFileName, options.TestInstallBase) } else { - autogenTemplate(ctx, autogenPath, "${NativeHostTestConfigTemplate}", config, testInstallBase) - } - } - return autogenPath - } - return path -} - -func AutoGenShellTestConfig(ctx android.ModuleContext, testConfigProp *string, - testConfigTemplateProp *string, testSuites []string, config []Config, autoGenConfig *bool, outputFileName string) android.Path { - path, autogenPath := testConfigPath(ctx, testConfigProp, testSuites, autoGenConfig, testConfigTemplateProp) - if autogenPath != nil { - templatePath := getTestConfigTemplate(ctx, testConfigTemplateProp) - if templatePath.Valid() { - autogenTemplateWithNameAndOutputFile(ctx, ctx.ModuleName(), autogenPath, templatePath.String(), config, outputFileName, "") - } else { - autogenTemplateWithNameAndOutputFile(ctx, ctx.ModuleName(), autogenPath, "${ShellTestConfigTemplate}", config, outputFileName, "") - } - return autogenPath - } - return path -} - -func AutoGenNativeBenchmarkTestConfig(ctx android.ModuleContext, testConfigProp *string, - testConfigTemplateProp *string, testSuites []string, configs []Config, autoGenConfig *bool) android.Path { - path, autogenPath := testConfigPath(ctx, testConfigProp, testSuites, autoGenConfig, testConfigTemplateProp) - if autogenPath != nil { - templatePath := getTestConfigTemplate(ctx, testConfigTemplateProp) - if templatePath.Valid() { - autogenTemplate(ctx, autogenPath, templatePath.String(), configs, "") - } else { - autogenTemplate(ctx, autogenPath, "${NativeBenchmarkTestConfigTemplate}", configs, "") - } - return autogenPath - } - return path -} - -func AutoGenJavaTestConfig(ctx android.ModuleContext, testConfigProp *string, testConfigTemplateProp *string, - testSuites []string, config []Config, autoGenConfig *bool, unitTest *bool) android.Path { - path, autogenPath := testConfigPath(ctx, testConfigProp, testSuites, autoGenConfig, testConfigTemplateProp) - if autogenPath != nil { - templatePath := getTestConfigTemplate(ctx, testConfigTemplateProp) - if templatePath.Valid() { - autogenTemplate(ctx, autogenPath, templatePath.String(), config, "") - } else { - if ctx.Device() { - autogenTemplate(ctx, autogenPath, "${JavaTestConfigTemplate}", config, "") - } else { - if Bool(unitTest) { - autogenTemplate(ctx, autogenPath, "${JavaHostUnitTestConfigTemplate}", config, "") + if Bool(options.UnitTest) { + autogenTemplate(ctx, options.Name, autogenPath, options.HostUnitTestTemplate, configs, options.OutputFileName, options.TestInstallBase) } else { - autogenTemplate(ctx, autogenPath, "${JavaHostTestConfigTemplate}", config, "") + autogenTemplate(ctx, options.Name, autogenPath, options.HostTemplate, configs, options.OutputFileName, options.TestInstallBase) } } } return autogenPath } - return path -} - -func AutoGenPythonBinaryHostTestConfig(ctx android.ModuleContext, testConfigProp *string, - testConfigTemplateProp *string, testSuites []string, autoGenConfig *bool) android.Path { - - path, autogenPath := testConfigPath(ctx, testConfigProp, testSuites, autoGenConfig, testConfigTemplateProp) - if autogenPath != nil { - templatePath := getTestConfigTemplate(ctx, testConfigTemplateProp) - if templatePath.Valid() { - autogenTemplate(ctx, autogenPath, templatePath.String(), nil, "") - } else { - autogenTemplate(ctx, autogenPath, "${PythonBinaryHostTestConfigTemplate}", nil, "") - } - return autogenPath - } - return path -} - -func AutoGenRustTestConfig(ctx android.ModuleContext, testConfigProp *string, - testConfigTemplateProp *string, testSuites []string, config []Config, autoGenConfig *bool, testInstallBase string) android.Path { - path, autogenPath := testConfigPath(ctx, testConfigProp, testSuites, autoGenConfig, testConfigTemplateProp) - if autogenPath != nil { - templatePath := getTestConfigTemplate(ctx, testConfigTemplateProp) - if templatePath.Valid() { - autogenTemplate(ctx, autogenPath, templatePath.String(), config, testInstallBase) - } else { - if ctx.Device() { - autogenTemplate(ctx, autogenPath, "${RustDeviceTestConfigTemplate}", config, testInstallBase) - } else { - autogenTemplate(ctx, autogenPath, "${RustHostTestConfigTemplate}", config, testInstallBase) - } - } - return autogenPath - } - return path -} - -func AutoGenRustBenchmarkConfig(ctx android.ModuleContext, testConfigProp *string, - testConfigTemplateProp *string, testSuites []string, config []Config, autoGenConfig *bool) android.Path { - path, autogenPath := testConfigPath(ctx, testConfigProp, testSuites, autoGenConfig, testConfigTemplateProp) - if autogenPath != nil { - templatePath := getTestConfigTemplate(ctx, testConfigTemplateProp) - if templatePath.Valid() { - autogenTemplate(ctx, autogenPath, templatePath.String(), config, "") - } else { - if ctx.Device() { - autogenTemplate(ctx, autogenPath, "${RustDeviceBenchmarkConfigTemplate}", config, "") - } else { - autogenTemplate(ctx, autogenPath, "${RustHostBenchmarkConfigTemplate}", config, "") - } - } - return autogenPath - } - return path -} - -func AutoGenRobolectricTestConfig(ctx android.ModuleContext, testConfigProp *string, testConfigTemplateProp *string, - testSuites []string, autoGenConfig *bool) android.Path { - path, autogenPath := testConfigPath(ctx, testConfigProp, testSuites, autoGenConfig, testConfigTemplateProp) - if autogenPath != nil { - templatePath := getTestConfigTemplate(ctx, testConfigTemplateProp) - if templatePath.Valid() { - autogenTemplate(ctx, autogenPath, templatePath.String(), nil, "") - } else { - autogenTemplate(ctx, autogenPath, "${RobolectricTestConfigTemplate}", nil, "") - } - return autogenPath + if len(options.OptionsForAutogenerated) > 0 { + ctx.ModuleErrorf("Extra tradefed configurations were provided for an autogenerated xml file, but the autogenerated xml file was not used.") } return path } |