Merge "Implement test config auto-gen for sh_test." am: d90c6c42e4
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1323393 Change-Id: I666da5a4a5e09fb9deb14a8d4dad6be76583ed34
This commit is contained in:
commit
58894c86dc
5 changed files with 64 additions and 8 deletions
|
@ -5,6 +5,7 @@ bootstrap_go_package {
|
|||
"blueprint",
|
||||
"soong",
|
||||
"soong-android",
|
||||
"soong-tradefed",
|
||||
],
|
||||
srcs: [
|
||||
"sh_binary.go",
|
||||
|
|
|
@ -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
|
||||
|
@ -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 {
|
||||
|
@ -93,7 +107,8 @@ type ShTest struct {
|
|||
|
||||
testProperties TestProperties
|
||||
|
||||
data android.Paths
|
||||
data android.Paths
|
||||
testConfig android.Path
|
||||
}
|
||||
|
||||
func (s *ShBinary) HostToolPath() android.OptionalPath {
|
||||
|
@ -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 {
|
||||
|
@ -206,7 +231,13 @@ func (s *ShTest) AndroidMkEntries() []android.AndroidMkEntries {
|
|||
s.customAndroidMkEntries(entries)
|
||||
|
||||
entries.AddStrings("LOCAL_COMPATIBILITY_SUITE", s.testProperties.Test_suites...)
|
||||
entries.SetString("LOCAL_TEST_CONFIG", proptools.String(s.testProperties.Test_config))
|
||||
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()
|
||||
|
@ -265,3 +296,5 @@ func ShTestHostFactory() android.Module {
|
|||
android.InitAndroidArchModule(module, android.HostSupported, android.MultilibFirst)
|
||||
return module
|
||||
}
|
||||
|
||||
var Bool = proptools.Bool
|
||||
|
|
|
@ -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)
|
||||
|
@ -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())
|
||||
|
@ -124,9 +128,10 @@ func autogenTemplateWithName(ctx android.ModuleContext, name string, output andr
|
|||
Description: "test config",
|
||||
Output: output,
|
||||
Args: map[string]string{
|
||||
"name": name,
|
||||
"template": template,
|
||||
"extraConfigs": extraConfigs,
|
||||
"name": name,
|
||||
"template": template,
|
||||
"extraConfigs": extraConfigs,
|
||||
"outputFileName": outputFileName,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
@ -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)
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
|
|
|
@ -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…
Reference in a new issue