summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Spandan Das <spandandas@google.com> 2024-06-25 03:30:03 +0000
committer Spandan Das <spandandas@google.com> 2024-06-25 22:47:49 +0000
commitb041087f58589a3136e68ce85fd117379e6ddb8c (patch)
tree2450a8f67d8be5e835fd37cfe891dad15ffcdae3
parentd6352efd1a0349a7e58ea48787009e59406ac8a8 (diff)
Enforce that tests in MTS specify a min_sdk_version
Specifying min_sdk_version ensures backwards compatibility. There are some existing violations, and those have been baseline'd using an allowlist. Bug: 156476221 Test: m nothing Change-Id: I55098206da8ec5cfa0a9f5e7b41c9b8dedbdcbd2
-rw-r--r--java/android_manifest.go7
-rw-r--r--java/app.go29
-rw-r--r--java/app_test.go1
-rw-r--r--java/java.go1
4 files changed, 36 insertions, 2 deletions
diff --git a/java/android_manifest.go b/java/android_manifest.go
index 859900376..0c77968e6 100644
--- a/java/android_manifest.go
+++ b/java/android_manifest.go
@@ -71,12 +71,15 @@ func shouldReturnFinalOrFutureInt(ctx android.ModuleContext, targetSdkVersionLev
return targetSdkVersionLevel.IsPreview() && (ctx.Config().UnbundledBuildApps() || includedInMts(ctx.Module()))
}
-// Helper function that casts android.Module to java.androidTestApp
-// If this type conversion is possible, it queries whether the test app is included in an MTS suite
+// Helper function that returns true if android_test, android_test_helper_app, java_test are in an MTS suite.
func includedInMts(module android.Module) bool {
if test, ok := module.(androidTestApp); ok {
return test.includedInTestSuite("mts")
}
+ // java_test
+ if test, ok := module.(*Test); ok {
+ return android.PrefixInList(test.testProperties.Test_suites, "mts")
+ }
return false
}
diff --git a/java/app.go b/java/app.go
index 739ef1a50..f35e4c3d4 100644
--- a/java/app.go
+++ b/java/app.go
@@ -345,7 +345,35 @@ func (a *AndroidApp) OverridablePropertiesDepsMutator(ctx android.BottomUpMutato
}
}
+// TODO(b/156476221): Remove this allowlist
+var (
+ missingMinSdkVersionMtsAllowlist = []string{
+ "CellBroadcastReceiverGoogleUnitTests",
+ "CellBroadcastReceiverUnitTests",
+ "CtsBatterySavingTestCases",
+ "CtsDeviceAndProfileOwnerApp23",
+ "CtsDeviceAndProfileOwnerApp30",
+ "CtsIntentSenderApp",
+ "CtsJobSchedulerTestCases",
+ "CtsMimeMapTestCases",
+ "CtsTareTestCases",
+ "LibStatsPullTests",
+ "MediaProviderClientTests",
+ "TeleServiceTests",
+ "TestExternalImsServiceApp",
+ "TestSmsRetrieverApp",
+ "TetheringPrivilegedTests",
+ }
+)
+
+func checkMinSdkVersionMts(ctx android.ModuleContext, minSdkVersion android.ApiLevel) {
+ if includedInMts(ctx.Module()) && !minSdkVersion.Specified() && !android.InList(ctx.ModuleName(), missingMinSdkVersionMtsAllowlist) {
+ ctx.PropertyErrorf("min_sdk_version", "min_sdk_version is a required property for tests included in MTS")
+ }
+}
+
func (a *AndroidTestHelperApp) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+ checkMinSdkVersionMts(ctx, a.MinSdkVersion(ctx))
applicationId := a.appTestHelperAppProperties.Manifest_values.ApplicationId
if applicationId != nil {
if a.overridableAppProperties.Package_name != nil {
@@ -1366,6 +1394,7 @@ func (a *AndroidTestHelperApp) includedInTestSuite(searchPrefix string) bool {
}
func (a *AndroidTest) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+ checkMinSdkVersionMts(ctx, a.MinSdkVersion(ctx))
var configs []tradefed.Config
if a.appTestProperties.Instrumentation_target_package != nil {
a.additionalAaptFlags = append(a.additionalAaptFlags,
diff --git a/java/app_test.go b/java/app_test.go
index 1a862fa54..9e2d19ee8 100644
--- a/java/app_test.go
+++ b/java/app_test.go
@@ -4146,6 +4146,7 @@ func TestTargetSdkVersionMtsTests(t *testing.T) {
bpTemplate := `
%v {
name: "mytest",
+ min_sdk_version: "34",
target_sdk_version: "%v",
test_suites: ["othersuite", "%v"],
}
diff --git a/java/java.go b/java/java.go
index 08fb6782c..9bf0a9297 100644
--- a/java/java.go
+++ b/java/java.go
@@ -1510,6 +1510,7 @@ func (j *TestHost) GenerateAndroidBuildActions(ctx android.ModuleContext) {
}
func (j *Test) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+ checkMinSdkVersionMts(ctx, j.MinSdkVersion(ctx))
j.generateAndroidBuildActionsWithConfig(ctx, nil)
android.SetProvider(ctx, testing.TestModuleProviderKey, testing.TestModuleProviderData{})
}