Loading cc/test.go +20 −7 Original line number Diff line number Diff line Loading @@ -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() { Loading Loading @@ -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" Loading Loading @@ -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 { Loading Loading @@ -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()) Loading tradefed/autogen.go +41 −24 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package tradefed import ( "fmt" "sort" "strings" "github.com/google/blueprint" Loading @@ -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 { Loading @@ -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) } sort.Strings(options) extraOptions := strings.Join(options, "\n ") extraOptions = proptools.NinjaAndShellEscape(extraOptions) 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()) } extraConfigs := strings.Join(configStrings, "\n ") extraConfigs = proptools.NinjaAndShellEscape(extraConfigs) ctx.Build(pctx, android.BuildParams{ Rule: autogenTestConfig, Loading @@ -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 Loading @@ -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 } Loading Loading
cc/test.go +20 −7 Original line number Diff line number Diff line Loading @@ -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() { Loading Loading @@ -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" Loading Loading @@ -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 { Loading Loading @@ -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()) Loading
tradefed/autogen.go +41 −24 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package tradefed import ( "fmt" "sort" "strings" "github.com/google/blueprint" Loading @@ -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 { Loading @@ -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) } sort.Strings(options) extraOptions := strings.Join(options, "\n ") extraOptions = proptools.NinjaAndShellEscape(extraOptions) 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()) } extraConfigs := strings.Join(configStrings, "\n ") extraConfigs = proptools.NinjaAndShellEscape(extraConfigs) ctx.Build(pctx, android.BuildParams{ Rule: autogenTestConfig, Loading @@ -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 Loading @@ -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 } Loading