diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2019-07-16 03:10:27 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2019-07-16 03:10:27 +0000 |
commit | e029b57a1e242369654c56037176a8d71d6c6d5d (patch) | |
tree | 583f7d792818e4286cfe6c6733573d72297bf2a6 | |
parent | fe091c5f1b7f36afcee15b19ce9235f18db64092 (diff) | |
parent | b942bd8030c83d4e1edd40e41d703e93c0bbae1e (diff) | |
download | build_soong-e029b57a1e242369654c56037176a8d71d6c6d5d.tar.gz build_soong-e029b57a1e242369654c56037176a8d71d6c6d5d.tar.bz2 build_soong-e029b57a1e242369654c56037176a8d71d6c6d5d.zip |
Snap for 5730547 from b942bd8030c83d4e1edd40e41d703e93c0bbae1e to qt-qpr1-release
Change-Id: Ie3d9ce9a16081754756f9aeab1d3bd97411fb98a
-rw-r--r-- | cc/test.go | 27 | ||||
-rw-r--r-- | tradefed/autogen.go | 65 |
2 files changed, 61 insertions, 31 deletions
@@ -64,6 +64,10 @@ type TestBinaryProperties struct { // Test options. Test_options TestOptions + + // Add RootTargetPreparer to auto generated test config. This guarantees the test to run + // with root permission. + Require_root *bool } func init() { @@ -273,18 +277,19 @@ func (test *testBinary) linkerFlags(ctx ModuleContext, flags Flags) Flags { func (test *testBinary) install(ctx ModuleContext, file android.Path) { test.data = android.PathsForModuleSrc(ctx, test.Properties.Data) - optionsMap := map[string]string{} + var configs []tradefed.Config + if Bool(test.Properties.Require_root) { + configs = append(configs, tradefed.Preparer{"com.android.tradefed.targetprep.RootTargetPreparer"}) + } if Bool(test.testDecorator.Properties.Isolated) { - optionsMap["not-shardable"] = "true" + configs = append(configs, tradefed.Option{"not-shardable", "true"}) } - if test.Properties.Test_options.Run_test_as != nil { - optionsMap["run-test-as"] = String(test.Properties.Test_options.Run_test_as) + configs = append(configs, tradefed.Option{"run-test-as", String(test.Properties.Test_options.Run_test_as)}) } test.testConfig = tradefed.AutoGenNativeTestConfig(ctx, test.Properties.Test_config, - test.Properties.Test_config_template, - test.Properties.Test_suites, optionsMap) + test.Properties.Test_config_template, test.Properties.Test_suites, configs) test.binaryDecorator.baseInstaller.dir = "nativetest" test.binaryDecorator.baseInstaller.dir64 = "nativetest64" @@ -371,6 +376,10 @@ type BenchmarkProperties struct { // the name of the test configuration template (for example "AndroidTestTemplate.xml") that // should be installed with the module. Test_config_template *string `android:"path,arch_variant"` + + // Add RootTargetPreparer to auto generated test config. This guarantees the test to run + // with root permission. + Require_root *bool } type benchmarkDecorator struct { @@ -403,8 +412,12 @@ func (benchmark *benchmarkDecorator) linkerDeps(ctx DepsContext, deps Deps) Deps func (benchmark *benchmarkDecorator) install(ctx ModuleContext, file android.Path) { benchmark.data = android.PathsForModuleSrc(ctx, benchmark.Properties.Data) + var configs []tradefed.Config + if Bool(benchmark.Properties.Require_root) { + configs = append(configs, tradefed.Preparer{"com.android.tradefed.targetprep.RootTargetPreparer"}) + } benchmark.testConfig = tradefed.AutoGenNativeBenchmarkTestConfig(ctx, benchmark.Properties.Test_config, - benchmark.Properties.Test_config_template, benchmark.Properties.Test_suites) + benchmark.Properties.Test_config_template, benchmark.Properties.Test_suites, configs) benchmark.binaryDecorator.baseInstaller.dir = filepath.Join("benchmarktest", ctx.ModuleName()) benchmark.binaryDecorator.baseInstaller.dir64 = filepath.Join("benchmarktest64", ctx.ModuleName()) diff --git a/tradefed/autogen.go b/tradefed/autogen.go index da5dabe6..952b0223 100644 --- a/tradefed/autogen.go +++ b/tradefed/autogen.go @@ -16,7 +16,6 @@ package tradefed import ( "fmt" - "sort" "strings" "github.com/google/blueprint" @@ -39,9 +38,9 @@ func getTestConfig(ctx android.ModuleContext, prop *string) android.Path { } var autogenTestConfig = pctx.StaticRule("autogenTestConfig", blueprint.RuleParams{ - Command: "sed 's&{MODULE}&${name}&g;s&{EXTRA_OPTIONS}&'${extraOptions}'&g' $template > $out", + Command: "sed 's&{MODULE}&${name}&g;s&{EXTRA_CONFIGS}&'${extraConfigs}'&g' $template > $out", CommandDeps: []string{"$template"}, -}, "name", "template", "extraOptions") +}, "name", "template", "extraConfigs") func testConfigPath(ctx android.ModuleContext, prop *string, testSuites []string) (path android.Path, autogenPath android.WritablePath) { if p := getTestConfig(ctx, prop); p != nil { @@ -57,17 +56,38 @@ func testConfigPath(ctx android.ModuleContext, prop *string, testSuites []string } } -func autogenTemplate(ctx android.ModuleContext, output android.WritablePath, template string, optionsMap map[string]string) { - // If no test option found, delete {EXTRA_OPTIONS} line. - var options []string - for optionName, value := range optionsMap { - if value != "" { - options = append(options, fmt.Sprintf(`<option name="%s" value="%s" />`, optionName, value)) - } +type Config interface { + Config() string +} + +type Option struct { + Name string + Value string +} + +var _ Config = Option{} + +func (o Option) Config() string { + return fmt.Sprintf(`<option name="%s" value="%s" />`, o.Name, o.Value) +} + +type Preparer struct { + Class string +} + +var _ Config = Preparer{} + +func (p Preparer) Config() string { + return fmt.Sprintf(`<target_preparer class="%s" />`, p.Class) +} + +func autogenTemplate(ctx android.ModuleContext, output android.WritablePath, template string, configs []Config) { + var configStrings []string + for _, config := range configs { + configStrings = append(configStrings, config.Config()) } - sort.Strings(options) - extraOptions := strings.Join(options, "\n ") - extraOptions = proptools.NinjaAndShellEscape(extraOptions) + extraConfigs := strings.Join(configStrings, "\n ") + extraConfigs = proptools.NinjaAndShellEscape(extraConfigs) ctx.Build(pctx, android.BuildParams{ Rule: autogenTestConfig, @@ -76,26 +96,23 @@ func autogenTemplate(ctx android.ModuleContext, output android.WritablePath, tem Args: map[string]string{ "name": ctx.ModuleName(), "template": template, - "extraOptions": extraOptions, + "extraConfigs": extraConfigs, }, }) } func AutoGenNativeTestConfig(ctx android.ModuleContext, testConfigProp *string, - testConfigTemplateProp *string, testSuites []string, - optionsMap map[string]string) android.Path { + testConfigTemplateProp *string, testSuites []string, config []Config) android.Path { path, autogenPath := testConfigPath(ctx, testConfigProp, testSuites) if autogenPath != nil { templatePath := getTestConfigTemplate(ctx, testConfigTemplateProp) if templatePath.Valid() { - autogenTemplate(ctx, autogenPath, templatePath.String(), optionsMap) + autogenTemplate(ctx, autogenPath, templatePath.String(), config) } else { if ctx.Device() { - autogenTemplate(ctx, autogenPath, "${NativeTestConfigTemplate}", - optionsMap) + autogenTemplate(ctx, autogenPath, "${NativeTestConfigTemplate}", config) } else { - autogenTemplate(ctx, autogenPath, "${NativeHostTestConfigTemplate}", - optionsMap) + autogenTemplate(ctx, autogenPath, "${NativeHostTestConfigTemplate}", config) } } return autogenPath @@ -104,14 +121,14 @@ func AutoGenNativeTestConfig(ctx android.ModuleContext, testConfigProp *string, } func AutoGenNativeBenchmarkTestConfig(ctx android.ModuleContext, testConfigProp *string, - testConfigTemplateProp *string, testSuites []string) android.Path { + testConfigTemplateProp *string, testSuites []string, configs []Config) android.Path { path, autogenPath := testConfigPath(ctx, testConfigProp, testSuites) if autogenPath != nil { templatePath := getTestConfigTemplate(ctx, testConfigTemplateProp) if templatePath.Valid() { - autogenTemplate(ctx, autogenPath, templatePath.String(), nil) + autogenTemplate(ctx, autogenPath, templatePath.String(), configs) } else { - autogenTemplate(ctx, autogenPath, "${NativeBenchmarkTestConfigTemplate}", nil) + autogenTemplate(ctx, autogenPath, "${NativeBenchmarkTestConfigTemplate}", configs) } return autogenPath } |