aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCole Faust <colefaust@google.com>2023-01-04 17:30:38 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2023-01-04 17:30:38 +0000
commit94682b23c4e209491abd21b0353948e6614f45dd (patch)
treea052ec3ff230fa1508b83c384fb5fbd8c7c0dddf
parentf038e067ee0a591bd31c2f0b2fa3224cf7937094 (diff)
parent216805457cb4567fe73f8d31a79c473d8f3d9e33 (diff)
downloadsoong-94682b23c4e209491abd21b0353948e6614f45dd.tar.gz
Merge "Allow adding extra tradefed options in the Android.bp file"
-rw-r--r--cc/test.go23
-rw-r--r--java/java.go28
-rw-r--r--java/java_test.go24
-rw-r--r--java/robolectric.go11
-rw-r--r--python/test.go11
-rw-r--r--rust/benchmark.go14
-rw-r--r--rust/test.go17
-rw-r--r--sh/sh_binary.go12
-rw-r--r--tradefed/autogen.go172
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
}