Loading sh/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ bootstrap_go_package { "blueprint", "soong", "soong-android", "soong-tradefed", ], srcs: [ "sh_binary.go", Loading sh/sh_binary.go +35 −2 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import ( "github.com/google/blueprint/proptools" "android/soong/android" "android/soong/tradefed" ) // sh_binary is for shell scripts (and batch files) that are installed as Loading Loading @@ -74,6 +75,19 @@ type TestProperties struct { // list of files or filegroup modules that provide data that should be installed alongside // the test. Data []string `android:"path,arch_variant"` // Add RootTargetPreparer to auto generated test config. This guarantees the test to run // with root permission. Require_root *bool // 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"` // Flag to indicate whether or not to create test config automatically. If AndroidTest.xml // doesn't exist next to the Android.bp, this attribute doesn't need to be set to true // explicitly. Auto_gen_config *bool } type ShBinary struct { Loading @@ -94,6 +108,7 @@ type ShTest struct { testProperties TestProperties data android.Paths testConfig android.Path } func (s *ShBinary) HostToolPath() android.OptionalPath { Loading Loading @@ -190,6 +205,16 @@ func (s *ShTest) GenerateAndroidBuildActions(ctx android.ModuleContext) { s.installedFile = ctx.InstallExecutable(installDir, s.outputFilePath.Base(), s.outputFilePath) s.data = android.PathsForModuleSrc(ctx, s.testProperties.Data) var configs []tradefed.Config if Bool(s.testProperties.Require_root) { configs = append(configs, tradefed.Object{"target_preparer", "com.android.tradefed.targetprep.RootTargetPreparer", nil}) } else { options := []tradefed.Option{{Name: "force-root", Value: "false"}} configs = append(configs, tradefed.Object{"target_preparer", "com.android.tradefed.targetprep.RootTargetPreparer", 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()) } func (s *ShTest) InstallInData() bool { Loading @@ -206,7 +231,13 @@ func (s *ShTest) AndroidMkEntries() []android.AndroidMkEntries { s.customAndroidMkEntries(entries) entries.AddStrings("LOCAL_COMPATIBILITY_SUITE", s.testProperties.Test_suites...) if s.testProperties.Test_config != nil { entries.SetString("LOCAL_TEST_CONFIG", proptools.String(s.testProperties.Test_config)) } else { if s.testConfig != nil { entries.SetString("LOCAL_FULL_TEST_CONFIG", s.testConfig.String()) } } for _, d := range s.data { rel := d.Rel() path := d.String() Loading Loading @@ -265,3 +296,5 @@ func ShTestHostFactory() android.Module { android.InitAndroidArchModule(module, android.HostSupported, android.MultilibFirst) return module } var Bool = proptools.Bool tradefed/autogen.go +26 −6 Original line number Diff line number Diff line Loading @@ -40,9 +40,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_CONFIGS}&'${extraConfigs}'&g' $template > $out", Command: "sed 's&{MODULE}&${name}&g;s&{EXTRA_CONFIGS}&'${extraConfigs}'&g;s&{OUTPUT_FILENAME}&'${outputFileName}'&g' $template > $out", CommandDeps: []string{"$template"}, }, "name", "template", "extraConfigs") }, "name", "template", "extraConfigs", "outputFileName") func testConfigPath(ctx android.ModuleContext, prop *string, testSuites []string, autoGenConfig *bool, testConfigTemplateProp *string) (path android.Path, autogenPath android.WritablePath) { p := getTestConfig(ctx, prop) Loading Loading @@ -108,10 +108,14 @@ func (ob Object) Config() string { } func autogenTemplate(ctx android.ModuleContext, output android.WritablePath, template string, configs []Config) { autogenTemplateWithName(ctx, ctx.ModuleName(), output, template, configs) autogenTemplateWithNameAndOutputFile(ctx, ctx.ModuleName(), output, template, configs, "") } func autogenTemplateWithName(ctx android.ModuleContext, name string, output android.WritablePath, template string, configs []Config) { autogenTemplateWithNameAndOutputFile(ctx, ctx.ModuleName(), output, template, configs, "") } func autogenTemplateWithNameAndOutputFile(ctx android.ModuleContext, name string, output android.WritablePath, template string, configs []Config, outputFileName string) { var configStrings []string for _, config := range configs { configStrings = append(configStrings, config.Config()) Loading @@ -127,6 +131,7 @@ func autogenTemplateWithName(ctx android.ModuleContext, name string, output andr "name": name, "template": template, "extraConfigs": extraConfigs, "outputFileName": outputFileName, }, }) } Loading @@ -150,6 +155,21 @@ func AutoGenNativeTestConfig(ctx android.ModuleContext, testConfigProp *string, 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) Loading tradefed/config.go +1 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ func init() { pctx.SourcePathVariable("PythonBinaryHostTestConfigTemplate", "build/make/core/python_binary_host_test_config_template.xml") pctx.SourcePathVariable("RustDeviceTestConfigTemplate", "build/make/core/rust_device_test_config_template.xml") pctx.SourcePathVariable("RustHostTestConfigTemplate", "build/make/core/rust_host_test_config_template.xml") pctx.SourcePathVariable("ShellTestConfigTemplate", "build/make/core/shell_test_config_template.xml") pctx.SourcePathVariable("EmptyTestConfig", "build/make/core/empty_test_config.xml") } tradefed/makevars.go +1 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ func makeVarsProvider(ctx android.MakeVarsContext) { ctx.Strict("PYTHON_BINARY_HOST_TEST_CONFIG_TEMPLATE", "${PythonBinaryHostTestConfigTemplate}") ctx.Strict("RUST_DEVICE_TEST_CONFIG_TEMPLATE", "${RustDeviceTestConfigTemplate}") ctx.Strict("RUST_HOST_TEST_CONFIG_TEMPLATE", "${RustHostTestConfigTemplate}") ctx.Strict("SHELL_TEST_CONFIG_TEMPLATE", "${ShellTestConfigTemplate}") ctx.Strict("EMPTY_TEST_CONFIG", "${EmptyTestConfig}") } Loading
sh/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ bootstrap_go_package { "blueprint", "soong", "soong-android", "soong-tradefed", ], srcs: [ "sh_binary.go", Loading
sh/sh_binary.go +35 −2 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import ( "github.com/google/blueprint/proptools" "android/soong/android" "android/soong/tradefed" ) // sh_binary is for shell scripts (and batch files) that are installed as Loading Loading @@ -74,6 +75,19 @@ type TestProperties struct { // list of files or filegroup modules that provide data that should be installed alongside // the test. Data []string `android:"path,arch_variant"` // Add RootTargetPreparer to auto generated test config. This guarantees the test to run // with root permission. Require_root *bool // 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"` // Flag to indicate whether or not to create test config automatically. If AndroidTest.xml // doesn't exist next to the Android.bp, this attribute doesn't need to be set to true // explicitly. Auto_gen_config *bool } type ShBinary struct { Loading @@ -94,6 +108,7 @@ type ShTest struct { testProperties TestProperties data android.Paths testConfig android.Path } func (s *ShBinary) HostToolPath() android.OptionalPath { Loading Loading @@ -190,6 +205,16 @@ func (s *ShTest) GenerateAndroidBuildActions(ctx android.ModuleContext) { s.installedFile = ctx.InstallExecutable(installDir, s.outputFilePath.Base(), s.outputFilePath) s.data = android.PathsForModuleSrc(ctx, s.testProperties.Data) var configs []tradefed.Config if Bool(s.testProperties.Require_root) { configs = append(configs, tradefed.Object{"target_preparer", "com.android.tradefed.targetprep.RootTargetPreparer", nil}) } else { options := []tradefed.Option{{Name: "force-root", Value: "false"}} configs = append(configs, tradefed.Object{"target_preparer", "com.android.tradefed.targetprep.RootTargetPreparer", 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()) } func (s *ShTest) InstallInData() bool { Loading @@ -206,7 +231,13 @@ func (s *ShTest) AndroidMkEntries() []android.AndroidMkEntries { s.customAndroidMkEntries(entries) entries.AddStrings("LOCAL_COMPATIBILITY_SUITE", s.testProperties.Test_suites...) if s.testProperties.Test_config != nil { entries.SetString("LOCAL_TEST_CONFIG", proptools.String(s.testProperties.Test_config)) } else { if s.testConfig != nil { entries.SetString("LOCAL_FULL_TEST_CONFIG", s.testConfig.String()) } } for _, d := range s.data { rel := d.Rel() path := d.String() Loading Loading @@ -265,3 +296,5 @@ func ShTestHostFactory() android.Module { android.InitAndroidArchModule(module, android.HostSupported, android.MultilibFirst) return module } var Bool = proptools.Bool
tradefed/autogen.go +26 −6 Original line number Diff line number Diff line Loading @@ -40,9 +40,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_CONFIGS}&'${extraConfigs}'&g' $template > $out", Command: "sed 's&{MODULE}&${name}&g;s&{EXTRA_CONFIGS}&'${extraConfigs}'&g;s&{OUTPUT_FILENAME}&'${outputFileName}'&g' $template > $out", CommandDeps: []string{"$template"}, }, "name", "template", "extraConfigs") }, "name", "template", "extraConfigs", "outputFileName") func testConfigPath(ctx android.ModuleContext, prop *string, testSuites []string, autoGenConfig *bool, testConfigTemplateProp *string) (path android.Path, autogenPath android.WritablePath) { p := getTestConfig(ctx, prop) Loading Loading @@ -108,10 +108,14 @@ func (ob Object) Config() string { } func autogenTemplate(ctx android.ModuleContext, output android.WritablePath, template string, configs []Config) { autogenTemplateWithName(ctx, ctx.ModuleName(), output, template, configs) autogenTemplateWithNameAndOutputFile(ctx, ctx.ModuleName(), output, template, configs, "") } func autogenTemplateWithName(ctx android.ModuleContext, name string, output android.WritablePath, template string, configs []Config) { autogenTemplateWithNameAndOutputFile(ctx, ctx.ModuleName(), output, template, configs, "") } func autogenTemplateWithNameAndOutputFile(ctx android.ModuleContext, name string, output android.WritablePath, template string, configs []Config, outputFileName string) { var configStrings []string for _, config := range configs { configStrings = append(configStrings, config.Config()) Loading @@ -127,6 +131,7 @@ func autogenTemplateWithName(ctx android.ModuleContext, name string, output andr "name": name, "template": template, "extraConfigs": extraConfigs, "outputFileName": outputFileName, }, }) } Loading @@ -150,6 +155,21 @@ func AutoGenNativeTestConfig(ctx android.ModuleContext, testConfigProp *string, 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) Loading
tradefed/config.go +1 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ func init() { pctx.SourcePathVariable("PythonBinaryHostTestConfigTemplate", "build/make/core/python_binary_host_test_config_template.xml") pctx.SourcePathVariable("RustDeviceTestConfigTemplate", "build/make/core/rust_device_test_config_template.xml") pctx.SourcePathVariable("RustHostTestConfigTemplate", "build/make/core/rust_host_test_config_template.xml") pctx.SourcePathVariable("ShellTestConfigTemplate", "build/make/core/shell_test_config_template.xml") pctx.SourcePathVariable("EmptyTestConfig", "build/make/core/empty_test_config.xml") }
tradefed/makevars.go +1 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ func makeVarsProvider(ctx android.MakeVarsContext) { ctx.Strict("PYTHON_BINARY_HOST_TEST_CONFIG_TEMPLATE", "${PythonBinaryHostTestConfigTemplate}") ctx.Strict("RUST_DEVICE_TEST_CONFIG_TEMPLATE", "${RustDeviceTestConfigTemplate}") ctx.Strict("RUST_HOST_TEST_CONFIG_TEMPLATE", "${RustHostTestConfigTemplate}") ctx.Strict("SHELL_TEST_CONFIG_TEMPLATE", "${ShellTestConfigTemplate}") ctx.Strict("EMPTY_TEST_CONFIG", "${EmptyTestConfig}") }