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",