Verify S extension versions in end-to-end test am: 3d8cf38005 am: f393f09ff0 am: 0c34cf76a6

Original change: https://android-review.googlesource.com/c/platform/packages/modules/SdkExtensions/+/1608154

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I976df6070598d23ec9011faf37471ce56b34f981
diff --git a/tests/e2e/app-src/com/android/tests/apex/sdkextensions/Receiver.java b/tests/e2e/app-src/com/android/tests/apex/sdkextensions/Receiver.java
index 120d290..d9f74fa 100644
--- a/tests/e2e/app-src/com/android/tests/apex/sdkextensions/Receiver.java
+++ b/tests/e2e/app-src/com/android/tests/apex/sdkextensions/Receiver.java
@@ -33,12 +33,21 @@
     private static final String ACTION_MAKE_CALLS_45 =
             "com.android.tests.apex.sdkextensions.MAKE_CALLS_45";
 
+    private static int dessertLetterToInt(char letter) {
+        switch (letter) {
+            case 'r': return Build.VERSION_CODES.R;
+            case 's': return Build.VERSION_CODES.CUR_DEVELOPMENT;
+        }
+        throw new IllegalArgumentException(String.valueOf(letter));
+    }
+
     @Override
     public void onReceive(Context context, Intent intent) {
         try {
             switch (intent.getAction()) {
                 case ACTION_GET_SDK_VERSION:
-                    int sdkVersion = SdkExtensions.getExtensionVersion(Build.VERSION_CODES.R);
+                    int extension = dessertLetterToInt(intent.getStringExtra("extra").charAt(0));
+                    int sdkVersion = SdkExtensions.getExtensionVersion(extension);
                     setResultData(String.valueOf(sdkVersion));
                     break;
                 case ACTION_MAKE_CALLS_0:
diff --git a/tests/e2e/apps-with-reqs/AndroidManifest-r12.xml b/tests/e2e/apps-with-reqs/AndroidManifest-r12.xml
index 92aff31..a74f8be 100644
--- a/tests/e2e/apps-with-reqs/AndroidManifest-r12.xml
+++ b/tests/e2e/apps-with-reqs/AndroidManifest-r12.xml
@@ -18,6 +18,7 @@
 
     <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
         <extension-sdk android:sdkVersion="30" android:minExtensionVersion="12" />
+        <extension-sdk android:sdkVersion="10000" android:minExtensionVersion="12" />
     </uses-sdk>
 
     <application android:hasCode="false"></application>
diff --git a/tests/e2e/apps-with-reqs/AndroidManifest-r45.xml b/tests/e2e/apps-with-reqs/AndroidManifest-r45.xml
index ff5eb0e..f3cc3a3 100644
--- a/tests/e2e/apps-with-reqs/AndroidManifest-r45.xml
+++ b/tests/e2e/apps-with-reqs/AndroidManifest-r45.xml
@@ -18,6 +18,7 @@
 
     <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
         <extension-sdk android:sdkVersion="30" android:minExtensionVersion="45" />
+        <extension-sdk android:sdkVersion="10000" android:minExtensionVersion="45" />
     </uses-sdk>
 
     <application android:hasCode="false"></application>
diff --git a/tests/e2e/test-src/com/android/tests/apex/sdkextensions/SdkExtensionsHostTest.java b/tests/e2e/test-src/com/android/tests/apex/sdkextensions/SdkExtensionsHostTest.java
index 324a7a7..c251cac 100644
--- a/tests/e2e/test-src/com/android/tests/apex/sdkextensions/SdkExtensionsHostTest.java
+++ b/tests/e2e/test-src/com/android/tests/apex/sdkextensions/SdkExtensionsHostTest.java
@@ -88,11 +88,18 @@
 
     @Test
     public void upgradeOneApexWithBump()  throws Exception {
-        // Version 12 requires test_com.android.sdkext.
         assertVersion0();
         mInstallUtils.installApexes(SDKEXTENSIONS_FILENAME);
         reboot();
-        assertVersion12();
+
+        // R-Version 12 requires sdkext, which is fulfilled
+        // R-Version 45 requires sdkext + media, which isn't fulfilled
+        // S-Version 45 does not have any particular requirements.
+        assertEquals(12, getExtensionVersionR());
+        assertEquals(45, getExtensionVersionS());
+        assertEquals("true", broadcast("MAKE_CALLS_45")); // sdkext 45 APIs are available in 12 too.
+        assertTrue(canInstallApp(APP_R12_FILENAME, APP_R12_PACKAGE));
+        assertFalse(canInstallApp(APP_R45_FILENAME, APP_R45_PACKAGE));
     }
 
     @Test
@@ -123,21 +130,33 @@
     }
 
     private int getExtensionVersionR() throws Exception {
-        int appValue = Integer.parseInt(broadcast("GET_SDK_VERSION"));
-        int syspropValue = getExtensionVersionRFromSysprop();
+        int appValue = Integer.parseInt(broadcast("GET_SDK_VERSION", "r"));
+        int syspropValue = getExtensionVersionFromSysprop("r");
         assertEquals(appValue, syspropValue);
         return appValue;
     }
 
-    private int getExtensionVersionRFromSysprop() throws Exception {
-        CommandResult res = getDevice().executeShellV2Command("getprop build.version.extensions.r");
+    private int getExtensionVersionS() throws Exception {
+        int appValue = Integer.parseInt(broadcast("GET_SDK_VERSION", "s"));
+        int syspropValue = getExtensionVersionFromSysprop("s");
+        assertEquals(appValue, syspropValue);
+        return appValue;
+    }
+
+    private int getExtensionVersionFromSysprop(String v) throws Exception {
+        String command = "getprop build.version.extensions." + v;
+        CommandResult res = getDevice().executeShellV2Command(command);
         assertEquals(0, (int) res.getExitCode());
         String syspropString = res.getStdout().replace("\n", "");
         return Integer.parseInt(syspropString);
     }
 
     private String broadcast(String action) throws Exception {
-        String command = getBroadcastCommand(action);
+        return broadcast(action, null);
+    }
+
+    private String broadcast(String action, String extra) throws Exception {
+        String command = getBroadcastCommand(action, extra);
         CommandResult res = getDevice().executeShellV2Command(command);
         assertEquals(0, (int) res.getExitCode());
         Matcher matcher = Pattern.compile("data=\"([^\"]+)\"").matcher(res.getStdout());
@@ -147,30 +166,26 @@
 
     private void assertVersion0() throws Exception {
         assertEquals(0, getExtensionVersionR());
+        assertEquals(0, getExtensionVersionS());
         assertEquals("true", broadcast("MAKE_CALLS_0"));
-        File testAppFile = mInstallUtils.getTestFile(APP_FILENAME);
-        String installResult = getDevice().installPackage(testAppFile, true);
         assertFalse(canInstallApp(APP_R12_FILENAME, APP_R12_PACKAGE));
         assertFalse(canInstallApp(APP_R45_FILENAME, APP_R45_PACKAGE));
     }
 
-    private void assertVersion12() throws Exception {
-        assertEquals(12, getExtensionVersionR());
-        assertEquals("true", broadcast("MAKE_CALLS_45")); // sdkext 45 APIs are available in 12 too.
-        assertTrue(canInstallApp(APP_R12_FILENAME, APP_R12_PACKAGE));
-        assertFalse(canInstallApp(APP_R45_FILENAME, APP_R45_PACKAGE));
-    }
-
     private void assertVersion45() throws Exception {
         assertEquals(45, getExtensionVersionR());
+        assertEquals(45, getExtensionVersionS());
         assertEquals("true", broadcast("MAKE_CALLS_45"));
         assertTrue(canInstallApp(APP_R12_FILENAME, APP_R12_PACKAGE));
         assertTrue(canInstallApp(APP_R45_FILENAME, APP_R45_PACKAGE));
     }
 
-    private static String getBroadcastCommand(String action) {
+    private static String getBroadcastCommand(String action, String extra) {
         String cmd = "am broadcast";
         cmd += " -a com.android.tests.apex.sdkextensions." + action;
+        if (extra != null) {
+            cmd += " -e extra " + extra;
+        }
         cmd += " -n com.android.tests.apex.sdkextensions/.Receiver";
         return cmd;
     }