From 25c69eec4530a1f1423173a6724a84bd470dbf77 Mon Sep 17 00:00:00 2001 From: Jason Wu Date: Thu, 24 Aug 2023 15:40:10 -0400 Subject: [PATCH] Update sh_test conversion to handle data_bins and test_configs properly sh_test.data_bins are used to mark special executable dependencies which should be installed alongside the test entry point's cwd as siblings. This change makes it such that the Tradefed rule places them at the expected location. In addition, this change also incorporates the `tradefed.TestConfigAttributes` to handle the test_configs conversions. Test: bp2build.sh Bug: 283486885 Change-Id: Ifeb049c13ae208c785dbdc858f589be8f21109d1 --- android/allowlists/allowlists.go | 4 +- bp2build/sh_test_conversion_test.go | 240 +++++++++++++++++++++++----- sh/sh_binary.go | 46 ++++-- 3 files changed, 230 insertions(+), 60 deletions(-) diff --git a/android/allowlists/allowlists.go b/android/allowlists/allowlists.go index 16e23285a..53546114a 100644 --- a/android/allowlists/allowlists.go +++ b/android/allowlists/allowlists.go @@ -350,6 +350,8 @@ var ( "packages/modules/NetworkStack/common/captiveportal": Bp2BuildDefaultTrue, "packages/modules/NeuralNetworks/apex": Bp2BuildDefaultTrue, "packages/modules/NeuralNetworks/apex/testing": Bp2BuildDefaultTrue, + "packages/modules/SdkExtensions/gen_sdk": Bp2BuildDefaultTrue, + "packages/modules/common/proto": Bp2BuildDefaultTrue, "packages/providers/MediaProvider/tools/dialogs": Bp2BuildDefaultFalse, // TODO(b/242834374) "packages/screensavers/Basic": Bp2BuildDefaultTrue, "packages/services/Car/tests/SampleRearViewCamera": Bp2BuildDefaultFalse, // TODO(b/242834321) @@ -1088,7 +1090,7 @@ var ( "versioner", // TODO(b/228313961): depends on prebuilt shared library libclang-cpp_host as a shared library, which does not supply expected providers for a shared library // requires host tools for apexer - "apexer_test", "apexer_test_host_tools", "host_apex_verifier", + "apexer_test", "apexer_test_host_tools", "host_apex_verifier", "host-apex-verifier", // java bugs "libbase_ndk", // TODO(b/186826477): fails to link libctscamera2_jni for device (required for CtsCameraTestCases) diff --git a/bp2build/sh_test_conversion_test.go b/bp2build/sh_test_conversion_test.go index e99d56689..48fd077b9 100644 --- a/bp2build/sh_test_conversion_test.go +++ b/bp2build/sh_test_conversion_test.go @@ -22,11 +22,18 @@ import ( ) func TestShTestSimple(t *testing.T) { - RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{ - Description: "sh_test test", - ModuleTypeUnderTest: "sh_test", + RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) { + ctx.RegisterModuleType("filegroup", android.FileGroupFactory) + }, Bp2buildTestCase{ + Description: "sh_test test", + ModuleTypeUnderTest: "sh_test", + StubbedBuildDefinitions: []string{"android.hardware.bluetooth@1.1-service.sim", + "android.hardware.bluetooth@1.1-impl-sim", "libc++", "libcrypto"}, ModuleTypeUnderTestFactory: sh.ShTestFactory, - Blueprint: `sh_test{ + Blueprint: simpleModule("filegroup", "android.hardware.bluetooth@1.1-service.sim") + + simpleModule("filegroup", "android.hardware.bluetooth@1.1-impl-sim") + + simpleModule("filegroup", "libc++") + + simpleModule("filegroup", "libcrypto") + `sh_test{ name: "sts-rootcanal-sidebins", src: "empty.sh", test_suites: [ @@ -47,28 +54,37 @@ func TestShTestSimple(t *testing.T) { }`, ExpectedBazelTargets: []string{ MakeBazelTarget("sh_test", "sts-rootcanal-sidebins", AttrNameToString{ - "srcs": `["empty.sh"]`, + "srcs": `["empty.sh"]`, + "runs_on": `["device"]`, "data": `[ "android.hardware.bluetooth@1.1-service.sim.rc", - "android.hardware.bluetooth@1.1-service.sim", - "android.hardware.bluetooth@1.1-impl-sim", - "libc++", - "libcrypto", + ":android.hardware.bluetooth@1.1-service.sim", + ":android.hardware.bluetooth@1.1-impl-sim", + ":libc++", + ":libcrypto", ]`, - "test_config": `"art-gtests-target-install-apex.xml"`, - "test_config_template": `":art-run-test-target-template"`, - "auto_gen_config": "False", - "tags": `["no-remote"]`, + "data_bins": `[ + ":android.hardware.bluetooth@1.1-service.sim", + ":android.hardware.bluetooth@1.1-impl-sim", + ]`, + "tags": `["no-remote"]`, })}, }) } func TestShTestHostSimple(t *testing.T) { - RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{ - Description: "sh_test_host test", - ModuleTypeUnderTest: "sh_test_host", + RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) { + ctx.RegisterModuleType("filegroup", android.FileGroupFactory) + }, Bp2buildTestCase{ + Description: "sh_test_host test", + ModuleTypeUnderTest: "sh_test_host", + StubbedBuildDefinitions: []string{"android.hardware.bluetooth@1.1-service.sim", + "android.hardware.bluetooth@1.1-impl-sim", "libc++", "libcrypto"}, ModuleTypeUnderTestFactory: sh.ShTestHostFactory, - Blueprint: `sh_test_host{ + Blueprint: simpleModule("filegroup", "android.hardware.bluetooth@1.1-service.sim") + + simpleModule("filegroup", "android.hardware.bluetooth@1.1-impl-sim") + + simpleModule("filegroup", "libc++") + + simpleModule("filegroup", "libcrypto") + `sh_test_host{ name: "sts-rootcanal-sidebins", src: "empty.sh", test_suites: [ @@ -89,18 +105,20 @@ func TestShTestHostSimple(t *testing.T) { }`, ExpectedBazelTargets: []string{ MakeBazelTarget("sh_test", "sts-rootcanal-sidebins", AttrNameToString{ - "srcs": `["empty.sh"]`, + "srcs": `["empty.sh"]`, + "runs_on": `["host_without_device"]`, "data": `[ "android.hardware.bluetooth@1.1-service.sim.rc", - "android.hardware.bluetooth@1.1-service.sim", - "android.hardware.bluetooth@1.1-impl-sim", - "libc++", - "libcrypto", + ":android.hardware.bluetooth@1.1-service.sim", + ":android.hardware.bluetooth@1.1-impl-sim", + ":libc++", + ":libcrypto", ]`, - "tags": `["no-remote"]`, - "test_config": `"art-gtests-target-install-apex.xml"`, - "test_config_template": `":art-run-test-target-template"`, - "auto_gen_config": "False", + "data_bins": `[ + ":android.hardware.bluetooth@1.1-service.sim", + ":android.hardware.bluetooth@1.1-impl-sim", + ]`, + "tags": `["no-remote"]`, "target_compatible_with": `select({ "//build/bazel/platforms/os:android": ["@platforms//:incompatible"], "//conditions:default": [], @@ -109,12 +127,131 @@ func TestShTestHostSimple(t *testing.T) { }) } -func TestShTestSimpleUnset(t *testing.T) { - RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{ - Description: "sh_test test", - ModuleTypeUnderTest: "sh_test", +func TestShTestAutogen(t *testing.T) { + RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) { + ctx.RegisterModuleType("filegroup", android.FileGroupFactory) + }, Bp2buildTestCase{ + Description: "sh_test test", + ModuleTypeUnderTest: "sh_test", + StubbedBuildDefinitions: []string{"android.hardware.bluetooth@1.1-service.sim", + "android.hardware.bluetooth@1.1-impl-sim", "libc++", "libcrypto", "art-run-test-target-template"}, ModuleTypeUnderTestFactory: sh.ShTestFactory, - Blueprint: `sh_test{ + Blueprint: simpleModule("filegroup", "android.hardware.bluetooth@1.1-service.sim") + + simpleModule("filegroup", "android.hardware.bluetooth@1.1-impl-sim") + + simpleModule("filegroup", "libc++") + + simpleModule("filegroup", "libcrypto") + + simpleModule("filegroup", "art-run-test-target-template") + `sh_test{ + name: "sts-rootcanal-sidebins", + src: "empty.sh", + test_suites: [ + "sts", + "sts-lite", + ], + data_bins: [ + "android.hardware.bluetooth@1.1-service.sim", + "android.hardware.bluetooth@1.1-impl-sim" + ], + data: ["android.hardware.bluetooth@1.1-service.sim.rc"], + data_libs: ["libc++","libcrypto"], + test_config: "art-gtests-target-install-apex.xml", + test_config_template: ":art-run-test-target-template", + auto_gen_config: true, + test_options:{tags: ["no-remote"], + }, +}`, + ExpectedBazelTargets: []string{ + MakeBazelTarget("sh_test", "sts-rootcanal-sidebins", AttrNameToString{ + "srcs": `["empty.sh"]`, + "runs_on": `["device"]`, + "auto_generate_test_config": "True", + "target_compatible_with": `["//build/bazel/platforms/os:android"]`, + "template_test_config": `":art-run-test-target-template"`, + "data": `[ + "android.hardware.bluetooth@1.1-service.sim.rc", + ":android.hardware.bluetooth@1.1-service.sim", + ":android.hardware.bluetooth@1.1-impl-sim", + ":libc++", + ":libcrypto", + ]`, + "data_bins": `[ + ":android.hardware.bluetooth@1.1-service.sim", + ":android.hardware.bluetooth@1.1-impl-sim", + ]`, + "tags": `["no-remote"]`, + })}, + }) +} + +func TestShTestHostAutogen(t *testing.T) { + RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) { + ctx.RegisterModuleType("filegroup", android.FileGroupFactory) + }, Bp2buildTestCase{ + Description: "sh_test_host test", + ModuleTypeUnderTest: "sh_test_host", + StubbedBuildDefinitions: []string{"android.hardware.bluetooth@1.1-service.sim", + "android.hardware.bluetooth@1.1-impl-sim", "libc++", "libcrypto", "art-run-test-target-template"}, + ModuleTypeUnderTestFactory: sh.ShTestHostFactory, + Blueprint: simpleModule("filegroup", "android.hardware.bluetooth@1.1-service.sim") + + simpleModule("filegroup", "android.hardware.bluetooth@1.1-impl-sim") + + simpleModule("filegroup", "libc++") + + simpleModule("filegroup", "libcrypto") + + simpleModule("filegroup", "art-run-test-target-template") + `sh_test_host{ + name: "sts-rootcanal-sidebins", + src: "empty.sh", + test_suites: [ + "sts", + "sts-lite", + ], + data_bins: [ + "android.hardware.bluetooth@1.1-service.sim", + "android.hardware.bluetooth@1.1-impl-sim" + ], + data: ["android.hardware.bluetooth@1.1-service.sim.rc"], + data_libs: ["libc++","libcrypto"], + test_config: "art-gtests-target-install-apex.xml", + test_config_template: ":art-run-test-target-template", + auto_gen_config: true, + test_options:{tags: ["no-remote"], + }, +}`, + ExpectedBazelTargets: []string{ + MakeBazelTarget("sh_test", "sts-rootcanal-sidebins", AttrNameToString{ + "srcs": `["empty.sh"]`, + "runs_on": `["host_without_device"]`, + "auto_generate_test_config": "True", + "target_compatible_with": `select({ + "//build/bazel/platforms/os:android": ["@platforms//:incompatible"], + "//conditions:default": [], + })`, + "template_test_config": `":art-run-test-target-template"`, + "data": `[ + "android.hardware.bluetooth@1.1-service.sim.rc", + ":android.hardware.bluetooth@1.1-service.sim", + ":android.hardware.bluetooth@1.1-impl-sim", + ":libc++", + ":libcrypto", + ]`, + "data_bins": `[ + ":android.hardware.bluetooth@1.1-service.sim", + ":android.hardware.bluetooth@1.1-impl-sim", + ]`, + "tags": `["no-remote"]`, + })}, + }) +} +func TestShTestSimpleUnset(t *testing.T) { + RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) { + ctx.RegisterModuleType("filegroup", android.FileGroupFactory) + }, Bp2buildTestCase{ + Description: "sh_test test", + ModuleTypeUnderTest: "sh_test", + StubbedBuildDefinitions: []string{"android.hardware.bluetooth@1.1-service.sim", + "android.hardware.bluetooth@1.1-impl-sim", "libc++", "libcrypto"}, + ModuleTypeUnderTestFactory: sh.ShTestFactory, + Blueprint: simpleModule("filegroup", "android.hardware.bluetooth@1.1-service.sim") + + simpleModule("filegroup", "android.hardware.bluetooth@1.1-impl-sim") + + simpleModule("filegroup", "libc++") + + simpleModule("filegroup", "libcrypto") + `sh_test{ name: "sts-rootcanal-sidebins", src: "empty.sh", test_suites: [ @@ -132,13 +269,18 @@ func TestShTestSimpleUnset(t *testing.T) { }`, ExpectedBazelTargets: []string{ MakeBazelTarget("sh_test", "sts-rootcanal-sidebins", AttrNameToString{ - "srcs": `["empty.sh"]`, + "srcs": `["empty.sh"]`, + "runs_on": `["device"]`, "data": `[ "android.hardware.bluetooth@1.1-service.sim.rc", - "android.hardware.bluetooth@1.1-service.sim", - "android.hardware.bluetooth@1.1-impl-sim", - "libc++", - "libcrypto", + ":android.hardware.bluetooth@1.1-service.sim", + ":android.hardware.bluetooth@1.1-impl-sim", + ":libc++", + ":libcrypto", + ]`, + "data_bins": `[ + ":android.hardware.bluetooth@1.1-service.sim", + ":android.hardware.bluetooth@1.1-impl-sim", ]`, "tags": `["no-remote"]`, })}, @@ -146,11 +288,18 @@ func TestShTestSimpleUnset(t *testing.T) { } func TestShTestHostSimpleUnset(t *testing.T) { - RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{ + RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) { + ctx.RegisterModuleType("filegroup", android.FileGroupFactory) + }, Bp2buildTestCase{ Description: "sh_test_host test", ModuleTypeUnderTest: "sh_test_host", ModuleTypeUnderTestFactory: sh.ShTestHostFactory, - Blueprint: `sh_test_host{ + StubbedBuildDefinitions: []string{"android.hardware.bluetooth@1.1-service.sim", + "android.hardware.bluetooth@1.1-impl-sim", "libc++", "libcrypto"}, + Blueprint: simpleModule("filegroup", "android.hardware.bluetooth@1.1-service.sim") + + simpleModule("filegroup", "android.hardware.bluetooth@1.1-impl-sim") + + simpleModule("filegroup", "libc++") + + simpleModule("filegroup", "libcrypto") + `sh_test_host{ name: "sts-rootcanal-sidebins", src: "empty.sh", test_suites: [ @@ -168,13 +317,18 @@ func TestShTestHostSimpleUnset(t *testing.T) { }`, ExpectedBazelTargets: []string{ MakeBazelTarget("sh_test", "sts-rootcanal-sidebins", AttrNameToString{ - "srcs": `["empty.sh"]`, + "srcs": `["empty.sh"]`, + "runs_on": `["host_without_device"]`, "data": `[ "android.hardware.bluetooth@1.1-service.sim.rc", - "android.hardware.bluetooth@1.1-service.sim", - "android.hardware.bluetooth@1.1-impl-sim", - "libc++", - "libcrypto", + ":android.hardware.bluetooth@1.1-service.sim", + ":android.hardware.bluetooth@1.1-impl-sim", + ":libc++", + ":libcrypto", + ]`, + "data_bins": `[ + ":android.hardware.bluetooth@1.1-service.sim", + ":android.hardware.bluetooth@1.1-impl-sim", ]`, "tags": `["no-remote"]`, "target_compatible_with": `select({ diff --git a/sh/sh_binary.go b/sh/sh_binary.go index 79a885fa9..2e869f447 100644 --- a/sh/sh_binary.go +++ b/sh/sh_binary.go @@ -575,12 +575,12 @@ type bazelShBinaryAttributes struct { } type bazelShTestAttributes struct { - Srcs bazel.LabelListAttribute - Data bazel.LabelListAttribute - Tags bazel.StringListAttribute - Test_config *string - Test_config_template *string - Auto_gen_config *bool + Srcs bazel.LabelListAttribute + Data bazel.LabelListAttribute + Data_bins bazel.LabelListAttribute + Tags bazel.StringListAttribute + Runs_on bazel.StringListAttribute + tradefed.TestConfigAttributes } func (m *ShBinary) ConvertWithBp2build(ctx android.Bp2buildMutatorContext) { @@ -615,28 +615,42 @@ func (m *ShTest) ConvertWithBp2build(ctx android.Bp2buildMutatorContext) { srcs := bazel.MakeLabelListAttribute( android.BazelLabelForModuleSrc(ctx, []string{*m.properties.Src})) - combinedData := append(m.testProperties.Data, m.testProperties.Data_bins...) - combinedData = append(combinedData, m.testProperties.Data_libs...) + dataBins := bazel.MakeLabelListAttribute(android.BazelLabelForModuleDeps(ctx, m.testProperties.Data_bins)) - data := bazel.MakeLabelListAttribute( - android.BazelLabelForModuleSrc(ctx, combinedData)) + var combinedData bazel.LabelList + combinedData.Append(android.BazelLabelForModuleSrc(ctx, m.testProperties.Data)) + combinedData.Append(android.BazelLabelForModuleDeps(ctx, m.testProperties.Data_bins)) + combinedData.Append(android.BazelLabelForModuleDeps(ctx, m.testProperties.Data_libs)) + data := bazel.MakeLabelListAttribute(combinedData) tags := bazel.MakeStringListAttribute( m.testProperties.Test_options.Tags) - test_config := m.testProperties.Test_config + testConfigAttributes := tradefed.GetTestConfigAttributes( + ctx, + m.testProperties.Test_config, + []string{}, + m.testProperties.Auto_gen_config, + m.testProperties.Test_suites, + m.testProperties.Test_config_template, + nil, + nil, + ) - test_config_template := m.testProperties.Test_config_template + unitTest := m.testProperties.Test_options.Unit_test - auto_gen_config := m.testProperties.Auto_gen_config + runs_on := bazel.MakeStringListAttribute(android.RunsOn( + m.ModuleBase.HostSupported(), + m.ModuleBase.DeviceSupported(), + (unitTest != nil && *unitTest))) attrs := &bazelShTestAttributes{ Srcs: srcs, Data: data, + Data_bins: dataBins, Tags: tags, - Test_config: test_config, - Test_config_template: test_config_template, - Auto_gen_config: auto_gen_config, + Runs_on: runs_on, + TestConfigAttributes: testConfigAttributes, } props := bazel.BazelTargetModuleProperties{