rust: Add require_root and vendor install base

Adds the require_root property to rust_test modules so that tests can
run as root. Also adds an install base to allow vendor tests to install
to a different path, otherwise installs to 'unrestricted' like cc_test.

Bug: 200602232
Test: test with require_root: true runs as root
Test: test installed to new base directory
Change-Id: Ifa716871ff87471f0c0caff7af558d47db85ccd1
This commit is contained in:
Ivan Lozano
2021-09-21 10:49:13 -04:00
parent 1b15345ac9
commit ba2226164c
2 changed files with 25 additions and 6 deletions

View File

@@ -59,6 +59,10 @@ type TestProperties struct {
// Test options. // Test options.
Test_options TestOptions Test_options TestOptions
// Add RootTargetPreparer to auto generated test config. This guarantees the test to run
// with root permission.
Require_root *bool
} }
// A test module is a binary module with extra --test compiler flag // A test module is a binary module with extra --test compiler flag
@@ -109,12 +113,27 @@ func (test *testDecorator) compilerProps() []interface{} {
} }
func (test *testDecorator) install(ctx ModuleContext) { func (test *testDecorator) install(ctx ModuleContext) {
testInstallBase := "/data/local/tests/unrestricted"
if ctx.RustModule().InVendor() || ctx.RustModule().UseVndk() {
testInstallBase = "/data/local/tests/vendor"
}
var configs []tradefed.Config
if Bool(test.Properties.Require_root) {
configs = append(configs, tradefed.Object{"target_preparer", "com.android.tradefed.targetprep.RootTargetPreparer", nil})
} else {
var options []tradefed.Option
options = append(options, tradefed.Option{Name: "force-root", Value: "false"})
configs = append(configs, tradefed.Object{"target_preparer", "com.android.tradefed.targetprep.RootTargetPreparer", options})
}
test.testConfig = tradefed.AutoGenRustTestConfig(ctx, test.testConfig = tradefed.AutoGenRustTestConfig(ctx,
test.Properties.Test_config, test.Properties.Test_config,
test.Properties.Test_config_template, test.Properties.Test_config_template,
test.Properties.Test_suites, test.Properties.Test_suites,
nil, configs,
test.Properties.Auto_gen_config) test.Properties.Auto_gen_config,
testInstallBase)
dataSrcPaths := android.PathsForModuleSrc(ctx, test.Properties.Data) dataSrcPaths := android.PathsForModuleSrc(ctx, test.Properties.Data)

View File

@@ -227,17 +227,17 @@ func AutoGenPythonBinaryHostTestConfig(ctx android.ModuleContext, testConfigProp
} }
func AutoGenRustTestConfig(ctx android.ModuleContext, testConfigProp *string, func AutoGenRustTestConfig(ctx android.ModuleContext, testConfigProp *string,
testConfigTemplateProp *string, testSuites []string, config []Config, autoGenConfig *bool) android.Path { testConfigTemplateProp *string, testSuites []string, config []Config, autoGenConfig *bool, testInstallBase string) android.Path {
path, autogenPath := testConfigPath(ctx, testConfigProp, testSuites, autoGenConfig, testConfigTemplateProp) path, autogenPath := testConfigPath(ctx, testConfigProp, testSuites, autoGenConfig, testConfigTemplateProp)
if autogenPath != nil { if autogenPath != nil {
templatePath := getTestConfigTemplate(ctx, testConfigTemplateProp) templatePath := getTestConfigTemplate(ctx, testConfigTemplateProp)
if templatePath.Valid() { if templatePath.Valid() {
autogenTemplate(ctx, autogenPath, templatePath.String(), config, "") autogenTemplate(ctx, autogenPath, templatePath.String(), config, testInstallBase)
} else { } else {
if ctx.Device() { if ctx.Device() {
autogenTemplate(ctx, autogenPath, "${RustDeviceTestConfigTemplate}", config, "") autogenTemplate(ctx, autogenPath, "${RustDeviceTestConfigTemplate}", config, testInstallBase)
} else { } else {
autogenTemplate(ctx, autogenPath, "${RustHostTestConfigTemplate}", config, "") autogenTemplate(ctx, autogenPath, "${RustHostTestConfigTemplate}", config, testInstallBase)
} }
} }
return autogenPath return autogenPath