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
This commit is contained in:
Jason Wu 2023-08-24 15:40:10 -04:00
parent e94f26e2e8
commit 25c69eec45
3 changed files with 230 additions and 60 deletions

View file

@ -350,6 +350,8 @@ var (
"packages/modules/NetworkStack/common/captiveportal": Bp2BuildDefaultTrue, "packages/modules/NetworkStack/common/captiveportal": Bp2BuildDefaultTrue,
"packages/modules/NeuralNetworks/apex": Bp2BuildDefaultTrue, "packages/modules/NeuralNetworks/apex": Bp2BuildDefaultTrue,
"packages/modules/NeuralNetworks/apex/testing": 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/providers/MediaProvider/tools/dialogs": Bp2BuildDefaultFalse, // TODO(b/242834374)
"packages/screensavers/Basic": Bp2BuildDefaultTrue, "packages/screensavers/Basic": Bp2BuildDefaultTrue,
"packages/services/Car/tests/SampleRearViewCamera": Bp2BuildDefaultFalse, // TODO(b/242834321) "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 "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 // 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 // java bugs
"libbase_ndk", // TODO(b/186826477): fails to link libctscamera2_jni for device (required for CtsCameraTestCases) "libbase_ndk", // TODO(b/186826477): fails to link libctscamera2_jni for device (required for CtsCameraTestCases)

View file

@ -22,11 +22,18 @@ import (
) )
func TestShTestSimple(t *testing.T) { func TestShTestSimple(t *testing.T) {
RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{ RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {
Description: "sh_test test", ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
ModuleTypeUnderTest: "sh_test", }, 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, 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", name: "sts-rootcanal-sidebins",
src: "empty.sh", src: "empty.sh",
test_suites: [ test_suites: [
@ -47,28 +54,37 @@ func TestShTestSimple(t *testing.T) {
}`, }`,
ExpectedBazelTargets: []string{ ExpectedBazelTargets: []string{
MakeBazelTarget("sh_test", "sts-rootcanal-sidebins", AttrNameToString{ MakeBazelTarget("sh_test", "sts-rootcanal-sidebins", AttrNameToString{
"srcs": `["empty.sh"]`, "srcs": `["empty.sh"]`,
"runs_on": `["device"]`,
"data": `[ "data": `[
"android.hardware.bluetooth@1.1-service.sim.rc", "android.hardware.bluetooth@1.1-service.sim.rc",
"android.hardware.bluetooth@1.1-service.sim", ":android.hardware.bluetooth@1.1-service.sim",
"android.hardware.bluetooth@1.1-impl-sim", ":android.hardware.bluetooth@1.1-impl-sim",
"libc++", ":libc++",
"libcrypto", ":libcrypto",
]`, ]`,
"test_config": `"art-gtests-target-install-apex.xml"`, "data_bins": `[
"test_config_template": `":art-run-test-target-template"`, ":android.hardware.bluetooth@1.1-service.sim",
"auto_gen_config": "False", ":android.hardware.bluetooth@1.1-impl-sim",
"tags": `["no-remote"]`, ]`,
"tags": `["no-remote"]`,
})}, })},
}) })
} }
func TestShTestHostSimple(t *testing.T) { func TestShTestHostSimple(t *testing.T) {
RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{ RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {
Description: "sh_test_host test", ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
ModuleTypeUnderTest: "sh_test_host", }, 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, 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", name: "sts-rootcanal-sidebins",
src: "empty.sh", src: "empty.sh",
test_suites: [ test_suites: [
@ -89,18 +105,20 @@ func TestShTestHostSimple(t *testing.T) {
}`, }`,
ExpectedBazelTargets: []string{ ExpectedBazelTargets: []string{
MakeBazelTarget("sh_test", "sts-rootcanal-sidebins", AttrNameToString{ MakeBazelTarget("sh_test", "sts-rootcanal-sidebins", AttrNameToString{
"srcs": `["empty.sh"]`, "srcs": `["empty.sh"]`,
"runs_on": `["host_without_device"]`,
"data": `[ "data": `[
"android.hardware.bluetooth@1.1-service.sim.rc", "android.hardware.bluetooth@1.1-service.sim.rc",
"android.hardware.bluetooth@1.1-service.sim", ":android.hardware.bluetooth@1.1-service.sim",
"android.hardware.bluetooth@1.1-impl-sim", ":android.hardware.bluetooth@1.1-impl-sim",
"libc++", ":libc++",
"libcrypto", ":libcrypto",
]`, ]`,
"tags": `["no-remote"]`, "data_bins": `[
"test_config": `"art-gtests-target-install-apex.xml"`, ":android.hardware.bluetooth@1.1-service.sim",
"test_config_template": `":art-run-test-target-template"`, ":android.hardware.bluetooth@1.1-impl-sim",
"auto_gen_config": "False", ]`,
"tags": `["no-remote"]`,
"target_compatible_with": `select({ "target_compatible_with": `select({
"//build/bazel/platforms/os:android": ["@platforms//:incompatible"], "//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
"//conditions:default": [], "//conditions:default": [],
@ -109,12 +127,131 @@ func TestShTestHostSimple(t *testing.T) {
}) })
} }
func TestShTestSimpleUnset(t *testing.T) { func TestShTestAutogen(t *testing.T) {
RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {}, Bp2buildTestCase{ RunBp2BuildTestCase(t, func(ctx android.RegistrationContext) {
Description: "sh_test test", ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
ModuleTypeUnderTest: "sh_test", }, 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, 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", name: "sts-rootcanal-sidebins",
src: "empty.sh", src: "empty.sh",
test_suites: [ test_suites: [
@ -132,13 +269,18 @@ func TestShTestSimpleUnset(t *testing.T) {
}`, }`,
ExpectedBazelTargets: []string{ ExpectedBazelTargets: []string{
MakeBazelTarget("sh_test", "sts-rootcanal-sidebins", AttrNameToString{ MakeBazelTarget("sh_test", "sts-rootcanal-sidebins", AttrNameToString{
"srcs": `["empty.sh"]`, "srcs": `["empty.sh"]`,
"runs_on": `["device"]`,
"data": `[ "data": `[
"android.hardware.bluetooth@1.1-service.sim.rc", "android.hardware.bluetooth@1.1-service.sim.rc",
"android.hardware.bluetooth@1.1-service.sim", ":android.hardware.bluetooth@1.1-service.sim",
"android.hardware.bluetooth@1.1-impl-sim", ":android.hardware.bluetooth@1.1-impl-sim",
"libc++", ":libc++",
"libcrypto", ":libcrypto",
]`,
"data_bins": `[
":android.hardware.bluetooth@1.1-service.sim",
":android.hardware.bluetooth@1.1-impl-sim",
]`, ]`,
"tags": `["no-remote"]`, "tags": `["no-remote"]`,
})}, })},
@ -146,11 +288,18 @@ func TestShTestSimpleUnset(t *testing.T) {
} }
func TestShTestHostSimpleUnset(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", Description: "sh_test_host test",
ModuleTypeUnderTest: "sh_test_host", ModuleTypeUnderTest: "sh_test_host",
ModuleTypeUnderTestFactory: sh.ShTestHostFactory, 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", name: "sts-rootcanal-sidebins",
src: "empty.sh", src: "empty.sh",
test_suites: [ test_suites: [
@ -168,13 +317,18 @@ func TestShTestHostSimpleUnset(t *testing.T) {
}`, }`,
ExpectedBazelTargets: []string{ ExpectedBazelTargets: []string{
MakeBazelTarget("sh_test", "sts-rootcanal-sidebins", AttrNameToString{ MakeBazelTarget("sh_test", "sts-rootcanal-sidebins", AttrNameToString{
"srcs": `["empty.sh"]`, "srcs": `["empty.sh"]`,
"runs_on": `["host_without_device"]`,
"data": `[ "data": `[
"android.hardware.bluetooth@1.1-service.sim.rc", "android.hardware.bluetooth@1.1-service.sim.rc",
"android.hardware.bluetooth@1.1-service.sim", ":android.hardware.bluetooth@1.1-service.sim",
"android.hardware.bluetooth@1.1-impl-sim", ":android.hardware.bluetooth@1.1-impl-sim",
"libc++", ":libc++",
"libcrypto", ":libcrypto",
]`,
"data_bins": `[
":android.hardware.bluetooth@1.1-service.sim",
":android.hardware.bluetooth@1.1-impl-sim",
]`, ]`,
"tags": `["no-remote"]`, "tags": `["no-remote"]`,
"target_compatible_with": `select({ "target_compatible_with": `select({

View file

@ -575,12 +575,12 @@ type bazelShBinaryAttributes struct {
} }
type bazelShTestAttributes struct { type bazelShTestAttributes struct {
Srcs bazel.LabelListAttribute Srcs bazel.LabelListAttribute
Data bazel.LabelListAttribute Data bazel.LabelListAttribute
Tags bazel.StringListAttribute Data_bins bazel.LabelListAttribute
Test_config *string Tags bazel.StringListAttribute
Test_config_template *string Runs_on bazel.StringListAttribute
Auto_gen_config *bool tradefed.TestConfigAttributes
} }
func (m *ShBinary) ConvertWithBp2build(ctx android.Bp2buildMutatorContext) { func (m *ShBinary) ConvertWithBp2build(ctx android.Bp2buildMutatorContext) {
@ -615,28 +615,42 @@ func (m *ShTest) ConvertWithBp2build(ctx android.Bp2buildMutatorContext) {
srcs := bazel.MakeLabelListAttribute( srcs := bazel.MakeLabelListAttribute(
android.BazelLabelForModuleSrc(ctx, []string{*m.properties.Src})) android.BazelLabelForModuleSrc(ctx, []string{*m.properties.Src}))
combinedData := append(m.testProperties.Data, m.testProperties.Data_bins...) dataBins := bazel.MakeLabelListAttribute(android.BazelLabelForModuleDeps(ctx, m.testProperties.Data_bins))
combinedData = append(combinedData, m.testProperties.Data_libs...)
data := bazel.MakeLabelListAttribute( var combinedData bazel.LabelList
android.BazelLabelForModuleSrc(ctx, combinedData)) 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( tags := bazel.MakeStringListAttribute(
m.testProperties.Test_options.Tags) 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{ attrs := &bazelShTestAttributes{
Srcs: srcs, Srcs: srcs,
Data: data, Data: data,
Data_bins: dataBins,
Tags: tags, Tags: tags,
Test_config: test_config, Runs_on: runs_on,
Test_config_template: test_config_template, TestConfigAttributes: testConfigAttributes,
Auto_gen_config: auto_gen_config,
} }
props := bazel.BazelTargetModuleProperties{ props := bazel.BazelTargetModuleProperties{