diff options
Diffstat (limited to 'python/test.go')
| -rw-r--r-- | python/test.go | 115 |
1 files changed, 81 insertions, 34 deletions
diff --git a/python/test.go b/python/test.go index 31da17e61..85decf931 100644 --- a/python/test.go +++ b/python/test.go @@ -17,6 +17,8 @@ package python import ( "fmt" + "android/soong/testing" + "github.com/google/blueprint/proptools" "android/soong/android" @@ -35,11 +37,13 @@ func registerPythonTestComponents(ctx android.RegistrationContext) { } func NewTest(hod android.HostOrDeviceSupported) *PythonTestModule { - return &PythonTestModule{PythonBinaryModule: *NewBinary(hod)} + p := &PythonTestModule{PythonBinaryModule: *NewBinary(hod)} + p.sourceProperties = android.SourceProperties{Test_only: proptools.BoolPtr(true), Top_level_test_target: true} + return p } func PythonTestHostFactory() android.Module { - return NewTest(android.HostSupportedNoCross).init() + return NewTest(android.HostSupported).init() } func PythonTestFactory() android.Module { @@ -66,6 +70,10 @@ type TestProperties struct { // Test options. Test_options TestOptions + + // list of device binary modules that should be installed alongside the test + // This property adds 64bit AND 32bit variants of the dependency + Data_device_bins_both []string `android:"arch_variant"` } type TestOptions struct { @@ -97,13 +105,48 @@ func (p *PythonTestModule) init() android.Module { p.AddProperties(&p.testProperties) android.InitAndroidArchModule(p, p.hod, p.multilib) android.InitDefaultableModule(p) - android.InitBazelModule(p) - if p.hod == android.HostSupportedNoCross && p.testProperties.Test_options.Unit_test == nil { + if p.isTestHost() && p.testProperties.Test_options.Unit_test == nil { p.testProperties.Test_options.Unit_test = proptools.BoolPtr(true) } return p } +func (p *PythonTestModule) isTestHost() bool { + return p.hod == android.HostSupported +} + +var dataDeviceBinsTag = dependencyTag{name: "dataDeviceBins"} + +// python_test_host DepsMutator uses this method to add multilib dependencies of +// data_device_bin_both +func (p *PythonTestModule) addDataDeviceBinsDeps(ctx android.BottomUpMutatorContext, filter string) { + if len(p.testProperties.Data_device_bins_both) < 1 { + return + } + + var maybeAndroidTarget *android.Target + androidTargetList := android.FirstTarget(ctx.Config().Targets[android.Android], filter) + if len(androidTargetList) > 0 { + maybeAndroidTarget = &androidTargetList[0] + } + + if maybeAndroidTarget != nil { + ctx.AddFarVariationDependencies( + maybeAndroidTarget.Variations(), + dataDeviceBinsTag, + p.testProperties.Data_device_bins_both..., + ) + } +} + +func (p *PythonTestModule) DepsMutator(ctx android.BottomUpMutatorContext) { + p.PythonBinaryModule.DepsMutator(ctx) + if p.isTestHost() { + p.addDataDeviceBinsDeps(ctx, "lib32") + p.addDataDeviceBinsDeps(ctx, "lib64") + } +} + func (p *PythonTestModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { // We inherit from only the library's GenerateAndroidBuildActions, and then // just use buildBinary() so that the binary is not installed into the location @@ -117,48 +160,48 @@ func (p *PythonTestModule) GenerateAndroidBuildActions(ctx android.ModuleContext } 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 - } + template := "${PythonBinaryHostTestConfigTemplate}" + if runner == "mobly" { + // Add tag to enable Atest mobly runner + if !android.InList("mobly", p.testProperties.Test_options.Tags) { + p.testProperties.Test_options.Tags = append(p.testProperties.Test_options.Tags, "mobly") } - p.testConfig = tradefed.AutoGenTestConfig(ctx, tradefed.AutoGenTestConfigOptions{ - OptionsForAutogenerated: configs, - DeviceTemplate: "${PythonBinaryHostMoblyTestConfigTemplate}", - HostTemplate: "${PythonBinaryHostMoblyTestConfigTemplate}", - }) - } else { + template = "${PythonBinaryHostMoblyTestConfigTemplate}" + } else if runner != "tradefed" { 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) + 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: template, + HostTemplate: template, + }) for _, dataSrcPath := range android.PathsForModuleSrc(ctx, p.testProperties.Data) { p.data = append(p.data, android.DataPath{SrcPath: dataSrcPath}) } + if p.isTestHost() && len(p.testProperties.Data_device_bins_both) > 0 { + ctx.VisitDirectDepsWithTag(dataDeviceBinsTag, func(dep android.Module) { + p.data = append(p.data, android.DataPath{SrcPath: android.OutputFileForModule(ctx, dep, "")}) + }) + } + // Emulate the data property for java_data dependencies. for _, javaData := range ctx.GetDirectDepsWithTag(javaDataTag) { for _, javaDataSrcPath := range android.OutputFilesForModule(ctx, javaData, "") { p.data = append(p.data, android.DataPath{SrcPath: javaDataSrcPath}) } } + + installDir := installDir(ctx, "nativetest", "nativetest64", ctx.ModuleName()) + installedData := ctx.InstallTestData(installDir, p.data) + p.installedDest = ctx.InstallFile(installDir, p.installSource.Base(), p.installSource, installedData...) + + android.SetProvider(ctx, testing.TestModuleProviderKey, testing.TestModuleProviderData{}) } func (p *PythonTestModule) AndroidMkEntries() []android.AndroidMkEntries { @@ -177,9 +220,13 @@ func (p *PythonTestModule) AndroidMkEntries() []android.AndroidMkEntries { entries.SetString("LOCAL_FULL_TEST_CONFIG", p.testConfig.String()) } - entries.SetBoolIfTrue("LOCAL_DISABLE_AUTO_GENERATE_TEST_CONFIG", !BoolDefault(p.binaryProperties.Auto_gen_config, true)) + // ATS 2.0 is the test harness for mobly tests and the test config is for ATS 2.0. + // Add "v2" suffix to test config name to distinguish it from the config for TF. + if proptools.String(p.testProperties.Test_options.Runner) == "mobly" { + entries.SetString("LOCAL_TEST_CONFIG_SUFFIX", "v2") + } - entries.AddStrings("LOCAL_TEST_DATA", android.AndroidMkDataPaths(p.data)...) + entries.SetBoolIfTrue("LOCAL_DISABLE_AUTO_GENERATE_TEST_CONFIG", !BoolDefault(p.binaryProperties.Auto_gen_config, true)) p.testProperties.Test_options.SetAndroidMkEntries(entries) }) |