From c3bb83a57b2b677774c0b793c39534fe9bb41f94 Mon Sep 17 00:00:00 2001 From: Ziwei Zhang Date: Wed, 1 Mar 2023 14:42:47 +0800 Subject: [PATCH] Add python template for mobly tests. Mobly is a Python-based test framework that specializes in supporting test cases that require multiple devices. There are some Mobly based Android tests, but these tests cannot be added to xTS since they are not using TF. Currently TF provides a 2-device Mobly test runner. This change is a short-term solution to help teams (eg. bluetooth) to add their multi-device Mobly tests to xTS without writing TF configs. For long-term, device infra team and xTS infra team will provide a solution for more complex multi-device tests in xTS and deprecate this TF template. Test: manually check the generated mobly xml config Bug: 272239365 Change-Id: I252cc774094eebbd9264243d30023ace4839c2cd --- python/test.go | 62 +++++++++++++++++++++++++++++++++++++++------- tradefed/config.go | 1 + 2 files changed, 54 insertions(+), 9 deletions(-) diff --git a/python/test.go b/python/test.go index fb8e91806..31da17e61 100644 --- a/python/test.go +++ b/python/test.go @@ -15,6 +15,8 @@ package python import ( + "fmt" + "github.com/google/blueprint/proptools" "android/soong/android" @@ -63,7 +65,22 @@ type TestProperties struct { Java_data []string // Test options. - Test_options android.CommonTestOptions + Test_options TestOptions +} + +type TestOptions struct { + android.CommonTestOptions + + // Runner for the test. Supports "tradefed" and "mobly" (for multi-device tests). Default is "tradefed". + Runner *string + + // Metadata to describe the test configuration. + Metadata []Metadata +} + +type Metadata struct { + Name string + Value string } type PythonTestModule struct { @@ -94,14 +111,41 @@ func (p *PythonTestModule) GenerateAndroidBuildActions(ctx android.ModuleContext p.PythonLibraryModule.GenerateAndroidBuildActions(ctx) p.buildBinary(ctx) - p.testConfig = tradefed.AutoGenTestConfig(ctx, tradefed.AutoGenTestConfigOptions{ - TestConfigProp: p.testProperties.Test_config, - TestConfigTemplateProp: p.testProperties.Test_config_template, - TestSuites: p.binaryProperties.Test_suites, - AutoGenConfig: p.binaryProperties.Auto_gen_config, - DeviceTemplate: "${PythonBinaryHostTestConfigTemplate}", - HostTemplate: "${PythonBinaryHostTestConfigTemplate}", - }) + var configs []tradefed.Option + for _, metadata := range p.testProperties.Test_options.Metadata { + configs = append(configs, tradefed.Option{Name: "config-descriptor:metadata", Key: metadata.Name, Value: metadata.Value}) + } + + runner := proptools.StringDefault(p.testProperties.Test_options.Runner, "tradefed") + if runner == "tradefed" { + p.testConfig = tradefed.AutoGenTestConfig(ctx, tradefed.AutoGenTestConfigOptions{ + TestConfigProp: p.testProperties.Test_config, + TestConfigTemplateProp: p.testProperties.Test_config_template, + TestSuites: p.binaryProperties.Test_suites, + OptionsForAutogenerated: configs, + AutoGenConfig: p.binaryProperties.Auto_gen_config, + DeviceTemplate: "${PythonBinaryHostTestConfigTemplate}", + HostTemplate: "${PythonBinaryHostTestConfigTemplate}", + }) + } else if runner == "mobly" { + if p.testProperties.Test_config != nil || p.testProperties.Test_config_template != nil || p.binaryProperties.Auto_gen_config != nil { + panic(fmt.Errorf("cannot set test_config, test_config_template or auto_gen_config for mobly test")) + } + + for _, testSuite := range p.binaryProperties.Test_suites { + if testSuite == "cts" { + configs = append(configs, tradefed.Option{Name: "test-suite-tag", Value: "cts"}) + break + } + } + p.testConfig = tradefed.AutoGenTestConfig(ctx, tradefed.AutoGenTestConfigOptions{ + OptionsForAutogenerated: configs, + DeviceTemplate: "${PythonBinaryHostMoblyTestConfigTemplate}", + HostTemplate: "${PythonBinaryHostMoblyTestConfigTemplate}", + }) + } else { + panic(fmt.Errorf("unknown python test runner '%s', should be 'tradefed' or 'mobly'", runner)) + } p.installedDest = ctx.InstallFile(installDir(ctx, "nativetest", "nativetest64", ctx.ModuleName()), p.installSource.Base(), p.installSource) diff --git a/tradefed/config.go b/tradefed/config.go index 999424cfb..326a00666 100644 --- a/tradefed/config.go +++ b/tradefed/config.go @@ -31,6 +31,7 @@ func init() { pctx.SourcePathVariable("NativeBenchmarkTestConfigTemplate", "build/make/core/native_benchmark_test_config_template.xml") pctx.SourcePathVariable("NativeHostTestConfigTemplate", "build/make/core/native_host_test_config_template.xml") pctx.SourcePathVariable("NativeTestConfigTemplate", "build/make/core/native_test_config_template.xml") + pctx.SourcePathVariable("PythonBinaryHostMoblyTestConfigTemplate", "build/make/core/python_binary_host_mobly_test_config_template.xml") 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")