Tests for multi-file streaming installation.

Test: atest PackageManagerShellCommandTest
Bug: b/136132412
Change-Id: Iac6e3e01c2c47131a28d74952ced120d97510568
diff --git a/tests/tests/content/src/android/content/pm/cts/PackageManagerShellCommandTest.java b/tests/tests/content/src/android/content/pm/cts/PackageManagerShellCommandTest.java
index 0a28c4f..00e6b32 100644
--- a/tests/tests/content/src/android/content/pm/cts/PackageManagerShellCommandTest.java
+++ b/tests/tests/content/src/android/content/pm/cts/PackageManagerShellCommandTest.java
@@ -42,6 +42,7 @@
 import java.io.OutputStream;
 import java.util.Arrays;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 @RunWith(Parameterized.class)
 @AppModeFull // TODO(Instant) Figure out which APIs should work.
@@ -356,8 +357,8 @@
         for (String splitName : splitNames) {
             File file = new File(splitName);
             assertEquals("Success: streamed " + file.length() + " bytes\n", executeShellCommand(
-                    "pm install-write -S " + file.length() + " " + sessionId + " "
-                            + file.getName() + " " + args, file));
+                    "pm install-write -S " + file.length() + " " + sessionId + " " + file.getName()
+                            + " " + args, file));
         }
     }
 
@@ -377,10 +378,6 @@
         assertEquals("Success\n", executeShellCommand("pm install-commit " + sessionId));
     }
 
-    private void commitSessionStdIn(String sessionId, String[] splitNames) throws IOException {
-        assertEquals("Success\n", executeShellCommand("pm install-commit " + sessionId));
-    }
-
     private boolean isAppInstalled(String packageName) throws IOException {
         final String commandResult = executeShellCommand("pm list packages");
         final int prefixLength = "package:".length();
@@ -418,6 +415,10 @@
     }
 
     private void installSplits(String[] baseNames) throws IOException {
+        if (mStreaming) {
+            installSplitsBatch(baseNames);
+            return;
+        }
         String[] splits = Arrays.stream(baseNames).map(
                 baseName -> createApkPath(baseName)).toArray(String[]::new);
         String sessionId = createSession(TEST_APP_PACKAGE);
@@ -425,12 +426,23 @@
         commitSession(sessionId);
     }
 
+    private void installSplitsStdInStreaming(String[] splits) throws IOException {
+        File[] files = Arrays.stream(splits).map(split -> new File(split)).toArray(File[]::new);
+        String param = Arrays.stream(files).map(
+                file -> file.getName() + ":" + file.length()).collect(Collectors.joining(" "));
+        assertEquals("Success\n", executeShellCommand("pm install-streaming " + param, files));
+    }
+
     private void installSplitsStdIn(String[] baseNames, String args) throws IOException {
         String[] splits = Arrays.stream(baseNames).map(
                 baseName -> createApkPath(baseName)).toArray(String[]::new);
+        if (mStreaming) {
+            installSplitsStdInStreaming(splits);
+            return;
+        }
         String sessionId = createSession(TEST_APP_PACKAGE);
         addSplitsStdIn(sessionId, splits, args);
-        commitSessionStdIn(sessionId, splits);
+        commitSession(sessionId);
     }
 
     private void installSplitsBatch(String[] baseNames) throws IOException {
@@ -444,10 +456,6 @@
         return executeShellCommand("pm uninstall " + packageName);
     }
 
-    private void uninstallPackage(String packageName) throws IOException {
-        assertEquals("Success\n", uninstallPackageSilently(packageName));
-    }
-
     private void uninstallSplits(String packageName, String[] splitNames) throws IOException {
         for (String splitName : splitNames) {
             assertEquals("Success\n",