Support test_suite and test_config with sh_test

Start basic suite support for sh_test so we can
include them in suites.

Test: make adb-remount-sh
Bug: 127959519
Change-Id: If73541d614a2d809e4f94e4fee4c660840631cc1
diff --git a/android/sh_binary.go b/android/sh_binary.go
index 52c5a9a..8bb3517 100644
--- a/android/sh_binary.go
+++ b/android/sh_binary.go
@@ -17,6 +17,7 @@
 import (
 	"fmt"
 	"io"
+	"strings"
 )
 
 // sh_binary is for shell scripts (and batch files) that are installed as
@@ -28,6 +29,7 @@
 func init() {
 	RegisterModuleType("sh_binary", ShBinaryFactory)
 	RegisterModuleType("sh_binary_host", ShBinaryHostFactory)
+	RegisterModuleType("sh_test", ShTestFactory)
 }
 
 type shBinaryProperties struct {
@@ -48,6 +50,16 @@
 	Installable *bool
 }
 
+type TestProperties struct {
+	// list of compatibility suites (for example "cts", "vts") that the module should be
+	// installed into.
+	Test_suites []string `android:"arch_variant"`
+
+	// the name of the test configuration (for example "AndroidTest.xml") that should be
+	// installed with the module.
+	Test_config *string `android:"arch_variant"`
+}
+
 type ShBinary struct {
 	ModuleBase
 
@@ -57,6 +69,12 @@
 	outputFilePath OutputPath
 }
 
+type ShTest struct {
+	ShBinary
+
+	testProperties TestProperties
+}
+
 func (s *ShBinary) DepsMutator(ctx BottomUpMutatorContext) {
 	if s.properties.Src == nil {
 		ctx.PropertyErrorf("src", "missing prebuilt source file")
@@ -119,6 +137,16 @@
 	}
 }
 
+func (s *ShTest) AndroidMk() AndroidMkData {
+	data := s.ShBinary.AndroidMk()
+	data.Extra = append(data.Extra, func(w io.Writer, outputFile Path) {
+		fmt.Fprintln(w, "LOCAL_COMPATIBILITY_SUITE :=",
+			strings.Join(s.testProperties.Test_suites, " "))
+		fmt.Fprintln(w, "LOCAL_TEST_CONFIG :=", String(s.testProperties.Test_config))
+	})
+	return data
+}
+
 func InitShBinaryModule(s *ShBinary) {
 	s.AddProperties(&s.properties)
 }
@@ -140,3 +168,12 @@
 	InitAndroidArchModule(module, HostSupported, MultilibFirst)
 	return module
 }
+
+func ShTestFactory() Module {
+	module := &ShTest{}
+	InitShBinaryModule(&module.ShBinary)
+	module.AddProperties(&module.testProperties)
+
+	InitAndroidArchModule(module, HostAndDeviceSupported, MultilibFirst)
+	return module
+}