diff options
author | 2022-06-01 15:45:02 +0000 | |
---|---|---|
committer | 2022-06-06 20:11:46 +0000 | |
commit | cc271e20654dbc54c6cf5c72b3303723bf322164 (patch) | |
tree | ffede9320f31f0871d9b1f2671df6400d6079f40 /java/java_test.go | |
parent | 86db8821bb325a10f054eff738badb6e97f08695 (diff) |
add multilib data_device_bins properties
Some targets need to be able to specify the specific architecture for a
data_device_bin module. This commit adds new properties to allow
specification of first, both, 32, or 64 multilib properties.
Bug: 231448797
Bug: 232408185
Test: go test ./java -run TestDataDeviceBinsBuildsDeviceBinary
Change-Id: I457cf4b1a9ccb28b46042f874c96bd0a87009fab
Diffstat (limited to 'java/java_test.go')
-rw-r--r-- | java/java_test.go | 190 |
1 files changed, 150 insertions, 40 deletions
diff --git a/java/java_test.go b/java/java_test.go index 4c9382413..af889ccd4 100644 --- a/java/java_test.go +++ b/java/java_test.go @@ -1498,62 +1498,172 @@ func TestErrorproneEnabledOnlyByEnvironmentVariable(t *testing.T) { } func TestDataDeviceBinsBuildsDeviceBinary(t *testing.T) { - bp := ` + testCases := []struct { + dataDeviceBinType string + depCompileMultilib string + variants []string + expectedError string + }{ + { + dataDeviceBinType: "first", + depCompileMultilib: "first", + variants: []string{"android_arm64_armv8-a"}, + }, + { + dataDeviceBinType: "first", + depCompileMultilib: "both", + variants: []string{"android_arm64_armv8-a"}, + }, + { + // this is true because our testing framework is set up with + // Targets ~ [<64bit target>, <32bit target>], where 64bit is "first" + dataDeviceBinType: "first", + depCompileMultilib: "32", + expectedError: `Android.bp:2:3: dependency "bar" of "foo" missing variant`, + }, + { + dataDeviceBinType: "first", + depCompileMultilib: "64", + variants: []string{"android_arm64_armv8-a"}, + }, + { + dataDeviceBinType: "both", + depCompileMultilib: "both", + variants: []string{ + "android_arm_armv7-a-neon", + "android_arm64_armv8-a", + }, + }, + { + dataDeviceBinType: "both", + depCompileMultilib: "32", + expectedError: `Android.bp:2:3: dependency "bar" of "foo" missing variant`, + }, + { + dataDeviceBinType: "both", + depCompileMultilib: "64", + expectedError: `Android.bp:2:3: dependency "bar" of "foo" missing variant`, + }, + { + dataDeviceBinType: "both", + depCompileMultilib: "first", + expectedError: `Android.bp:2:3: dependency "bar" of "foo" missing variant`, + }, + { + dataDeviceBinType: "32", + depCompileMultilib: "32", + variants: []string{"android_arm_armv7-a-neon"}, + }, + { + dataDeviceBinType: "32", + depCompileMultilib: "first", + expectedError: `Android.bp:2:3: dependency "bar" of "foo" missing variant`, + }, + { + dataDeviceBinType: "32", + depCompileMultilib: "both", + variants: []string{"android_arm_armv7-a-neon"}, + }, + { + dataDeviceBinType: "32", + depCompileMultilib: "64", + expectedError: `Android.bp:2:3: dependency "bar" of "foo" missing variant`, + }, + { + dataDeviceBinType: "64", + depCompileMultilib: "64", + variants: []string{"android_arm64_armv8-a"}, + }, + { + dataDeviceBinType: "64", + depCompileMultilib: "both", + variants: []string{"android_arm64_armv8-a"}, + }, + { + dataDeviceBinType: "64", + depCompileMultilib: "first", + variants: []string{"android_arm64_armv8-a"}, + }, + { + dataDeviceBinType: "64", + depCompileMultilib: "32", + expectedError: `Android.bp:2:3: dependency "bar" of "foo" missing variant`, + }, + { + dataDeviceBinType: "prefer32", + depCompileMultilib: "32", + variants: []string{"android_arm_armv7-a-neon"}, + }, + { + dataDeviceBinType: "prefer32", + depCompileMultilib: "both", + variants: []string{"android_arm_armv7-a-neon"}, + }, + { + dataDeviceBinType: "prefer32", + depCompileMultilib: "first", + expectedError: `Android.bp:2:3: dependency "bar" of "foo" missing variant`, + }, + { + dataDeviceBinType: "prefer32", + depCompileMultilib: "64", + expectedError: `Android.bp:2:3: dependency "bar" of "foo" missing variant`, + }, + } + + bpTemplate := ` java_test_host { name: "foo", srcs: ["test.java"], - data_device_bins: ["bar"], + data_device_bins_%s: ["bar"], } cc_binary { name: "bar", + compile_multilib: "%s", } ` - ctx := android.GroupFixturePreparers( - PrepareForIntegrationTestWithJava, - ).RunTestWithBp(t, bp) - - buildOS := ctx.Config.BuildOS.String() - fooVariant := ctx.ModuleForTests("foo", buildOS+"_common") - barVariant := ctx.ModuleForTests("bar", "android_arm64_armv8-a") - fooMod := fooVariant.Module().(*TestHost) + for _, tc := range testCases { + bp := fmt.Sprintf(bpTemplate, tc.dataDeviceBinType, tc.depCompileMultilib) - relocated := barVariant.Output("bar") - expectedInput := "out/soong/.intermediates/bar/android_arm64_armv8-a/unstripped/bar" - android.AssertPathRelativeToTopEquals(t, "relocation input", expectedInput, relocated.Input) + errorHandler := android.FixtureExpectsNoErrors + if tc.expectedError != "" { + errorHandler = android.FixtureExpectsAtLeastOneErrorMatchingPattern(tc.expectedError) + } - entries := android.AndroidMkEntriesForTest(t, ctx.TestContext, fooMod)[0] - expectedData := []string{ - "out/soong/.intermediates/bar/android_arm64_armv8-a/bar:bar", - } - actualData := entries.EntryMap["LOCAL_COMPATIBILITY_SUPPORT_FILES"] - android.AssertStringPathsRelativeToTopEquals(t, "LOCAL_TEST_DATA", ctx.Config, expectedData, actualData) -} + testName := fmt.Sprintf(`data_device_bins_%s with compile_multilib:"%s"`, tc.dataDeviceBinType, tc.depCompileMultilib) + t.Run(testName, func(t *testing.T) { + ctx := android.GroupFixturePreparers(PrepareForIntegrationTestWithJava). + ExtendWithErrorHandler(errorHandler). + RunTestWithBp(t, bp) + if tc.expectedError != "" { + return + } -func TestDataDeviceBinsAutogenTradefedConfig(t *testing.T) { - bp := ` - java_test_host { - name: "foo", - srcs: ["test.java"], - data_device_bins: ["bar"], - } + buildOS := ctx.Config.BuildOS.String() + fooVariant := ctx.ModuleForTests("foo", buildOS+"_common") + fooMod := fooVariant.Module().(*TestHost) + entries := android.AndroidMkEntriesForTest(t, ctx.TestContext, fooMod)[0] - cc_binary { - name: "bar", - } - ` + expectedAutogenConfig := `<option name="push-file" key="bar" value="/data/local/tests/unrestricted/foo/bar" />` + autogen := fooVariant.Rule("autogen") + if !strings.Contains(autogen.Args["extraConfigs"], expectedAutogenConfig) { + t.Errorf("foo extraConfigs %v does not contain %q", autogen.Args["extraConfigs"], expectedAutogenConfig) + } - ctx := android.GroupFixturePreparers( - PrepareForIntegrationTestWithJava, - ).RunTestWithBp(t, bp) + expectedData := []string{} + for _, variant := range tc.variants { + barVariant := ctx.ModuleForTests("bar", variant) + relocated := barVariant.Output("bar") + expectedInput := fmt.Sprintf("out/soong/.intermediates/bar/%s/unstripped/bar", variant) + android.AssertPathRelativeToTopEquals(t, "relocation input", expectedInput, relocated.Input) - buildOS := ctx.Config.BuildOS.String() - fooModule := ctx.ModuleForTests("foo", buildOS+"_common") - expectedAutogenConfig := `<option name="push-file" key="bar" value="/data/local/tests/unrestricted/foo/bar" />` + expectedData = append(expectedData, fmt.Sprintf("out/soong/.intermediates/bar/%s/bar:bar", variant)) + } - autogen := fooModule.Rule("autogen") - if !strings.Contains(autogen.Args["extraConfigs"], expectedAutogenConfig) { - t.Errorf("foo extraConfigs %v does not contain %q", autogen.Args["extraConfigs"], expectedAutogenConfig) + actualData := entries.EntryMap["LOCAL_COMPATIBILITY_SUPPORT_FILES"] + android.AssertStringPathsRelativeToTopEquals(t, "LOCAL_TEST_DATA", ctx.Config, expectedData, actualData) + }) } } |