Fix install location for vendor tests
These should be install in /data/nativetest* with the rest of the tests,
but had been moved to /vendor/nativetest* accidentally. Add some tests
so that this doesn't happen again.
Bug: 63393698
Test: m -j blueprint_tools
Test: compare out/soong/Android-aosp_arm64.mk
Test: compare out/soong/build.ninja
Change-Id: Id3b08a7e3908955df18a043a02ea576dc88086c3
diff --git a/android/paths_test.go b/android/paths_test.go
index 9d69473..3986b71 100644
--- a/android/paths_test.go
+++ b/android/paths_test.go
@@ -20,6 +20,8 @@
"reflect"
"strings"
"testing"
+
+ "github.com/google/blueprint/pathtools"
)
type strsTestCase struct {
@@ -180,3 +182,161 @@
return fmt.Sprintf("%#v", in)
}
}
+
+type moduleInstallPathContextImpl struct {
+ androidBaseContextImpl
+
+ inData bool
+ inSanitizerDir bool
+}
+
+func (moduleInstallPathContextImpl) Fs() pathtools.FileSystem {
+ return pathtools.MockFs(nil)
+}
+
+func (m moduleInstallPathContextImpl) Config() interface{} {
+ return m.androidBaseContextImpl.config
+}
+
+func (moduleInstallPathContextImpl) AddNinjaFileDeps(deps ...string) {}
+
+func (m moduleInstallPathContextImpl) InstallInData() bool {
+ return m.inData
+}
+
+func (m moduleInstallPathContextImpl) InstallInSanitizerDir() bool {
+ return m.inSanitizerDir
+}
+
+func TestPathForModuleInstall(t *testing.T) {
+ testConfig := TestConfig("")
+
+ hostTarget := Target{Os: Linux}
+ deviceTarget := Target{Os: Android}
+
+ testCases := []struct {
+ name string
+ ctx *moduleInstallPathContextImpl
+ in []string
+ out string
+ }{
+ {
+ name: "host binary",
+ ctx: &moduleInstallPathContextImpl{
+ androidBaseContextImpl: androidBaseContextImpl{
+ target: hostTarget,
+ },
+ },
+ in: []string{"bin", "my_test"},
+ out: "host/linux-x86/bin/my_test",
+ },
+
+ {
+ name: "system binary",
+ ctx: &moduleInstallPathContextImpl{
+ androidBaseContextImpl: androidBaseContextImpl{
+ target: deviceTarget,
+ },
+ },
+ in: []string{"bin", "my_test"},
+ out: "target/product/test_device/system/bin/my_test",
+ },
+ {
+ name: "vendor binary",
+ ctx: &moduleInstallPathContextImpl{
+ androidBaseContextImpl: androidBaseContextImpl{
+ target: deviceTarget,
+ vendor: true,
+ },
+ },
+ in: []string{"bin", "my_test"},
+ out: "target/product/test_device/vendor/bin/my_test",
+ },
+
+ {
+ name: "system native test binary",
+ ctx: &moduleInstallPathContextImpl{
+ androidBaseContextImpl: androidBaseContextImpl{
+ target: deviceTarget,
+ },
+ inData: true,
+ },
+ in: []string{"nativetest", "my_test"},
+ out: "target/product/test_device/data/nativetest/my_test",
+ },
+ {
+ name: "vendor native test binary",
+ ctx: &moduleInstallPathContextImpl{
+ androidBaseContextImpl: androidBaseContextImpl{
+ target: deviceTarget,
+ vendor: true,
+ },
+ inData: true,
+ },
+ in: []string{"nativetest", "my_test"},
+ out: "target/product/test_device/data/nativetest/my_test",
+ },
+
+ {
+ name: "sanitized system binary",
+ ctx: &moduleInstallPathContextImpl{
+ androidBaseContextImpl: androidBaseContextImpl{
+ target: deviceTarget,
+ },
+ inSanitizerDir: true,
+ },
+ in: []string{"bin", "my_test"},
+ out: "target/product/test_device/data/asan/system/bin/my_test",
+ },
+ {
+ name: "sanitized vendor binary",
+ ctx: &moduleInstallPathContextImpl{
+ androidBaseContextImpl: androidBaseContextImpl{
+ target: deviceTarget,
+ vendor: true,
+ },
+ inSanitizerDir: true,
+ },
+ in: []string{"bin", "my_test"},
+ out: "target/product/test_device/data/asan/vendor/bin/my_test",
+ },
+
+ {
+ name: "sanitized system native test binary",
+ ctx: &moduleInstallPathContextImpl{
+ androidBaseContextImpl: androidBaseContextImpl{
+ target: deviceTarget,
+ },
+ inData: true,
+ inSanitizerDir: true,
+ },
+ in: []string{"nativetest", "my_test"},
+ out: "target/product/test_device/data/asan/data/nativetest/my_test",
+ },
+ {
+ name: "sanitized vendor native test binary",
+ ctx: &moduleInstallPathContextImpl{
+ androidBaseContextImpl: androidBaseContextImpl{
+ target: deviceTarget,
+ vendor: true,
+ },
+ inData: true,
+ inSanitizerDir: true,
+ },
+ in: []string{"nativetest", "my_test"},
+ out: "target/product/test_device/data/asan/data/nativetest/my_test",
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ tc.ctx.androidBaseContextImpl.config = testConfig
+ output := PathForModuleInstall(tc.ctx, tc.in...)
+ if output.basePath.path != tc.out {
+ t.Errorf("unexpected path:\n got: %q\nwant: %q\n",
+ output.basePath.path,
+ tc.out)
+ }
+ })
+ }
+}