Merge "Fix PackageSetInstallerTest for multi-user" am: 7fe01040b2

Original change: https://android-review.googlesource.com/c/platform/cts/+/1441531

Change-Id: I58627748e542064803fa02753efe2d4c0aa095b8
diff --git a/hostsidetests/appsecurity/OWNERS b/hostsidetests/appsecurity/OWNERS
index 6ad0c7a..cbfad62 100644
--- a/hostsidetests/appsecurity/OWNERS
+++ b/hostsidetests/appsecurity/OWNERS
@@ -26,9 +26,9 @@
 per-file ListeningPortsTest.java = cbrubaker@google.com
 per-file MajorVersionTest.java = toddke@google.com
 per-file OverlayHostTest.java = rtmitchell@google.com
-per-file PackageResolutionHostTest.java = toddke@google.com
-per-file PackageVisibilityTest.java = toddke@google.com
+per-file Package* = chiuwinson@google.com,patb@google.com,toddke@google.com
 per-file PermissionsHostTest.java = moltmann@google.com
+per-file Pkg* = chiuwinson@google.com,patb@google.com,toddke@google.com
 per-file PkgInstallSignatureVerificationTest.java = cbrubaker@google.com
 per-file PrivilegedUpdateTests.java = toddke@google.com
 per-file ReviewPermissionHelper = moltmann@google.com
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/PackageSetInstallerTest.kt b/hostsidetests/appsecurity/src/android/appsecurity/cts/PackageSetInstallerTest.kt
index 923810c..ba62f2f 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/PackageSetInstallerTest.kt
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/PackageSetInstallerTest.kt
@@ -30,7 +30,6 @@
 import android.cts.host.utils.DeviceJUnit4ClassRunnerWithParameters
 import android.cts.host.utils.DeviceJUnit4Parameterized
 import com.google.common.truth.Truth.assertThat
-import com.google.common.truth.Truth.assertWithMessage
 import org.junit.After
 import org.junit.Before
 import org.junit.Test
@@ -198,8 +197,7 @@
     }
 
     private fun assertPermission(granted: Boolean, permission: String) {
-        assertThat(device.executeShellCommand("dumpsys package $TARGET_PKG | grep $permission"))
-                .contains("$permission: granted=$granted")
+        assertThat(getPermissionString(permission)).contains("granted=$granted")
     }
 
     private fun grantPermission(permission: String) {
@@ -211,11 +209,7 @@
     }
 
     private fun assertGrantState(state: GrantState, permission: String) {
-        val output = device.executeShellCommand(
-                "dumpsys package $TARGET_PKG | grep \"$permission: granted\"").trim()
-
-        // Make sure only the expected output line is returned
-        assertWithMessage(output).that(output.lines().size).isEqualTo(1)
+        val output = getPermissionString(permission)
 
         when (state) {
             GrantState.TRUE -> {
@@ -238,6 +232,18 @@
         }
     }
 
+    private fun getPermissionString(permission: String) =
+            device.executeShellCommand("dumpsys package $TARGET_PKG")
+                    .lineSequence()
+                    .dropWhile { !it.startsWith("Packages:") } // Wait for package header
+                    .drop(1) // Drop the package header itself
+                    .takeWhile { it.isEmpty() || it.first().isWhitespace() } // Until next header
+                    .dropWhile { !it.trim().startsWith("User $mPrimaryUserId:") } // Find user
+                    .drop(1) // Drop the user header itself
+                    .takeWhile { !it.trim().startsWith("User") } // Until next user
+                    .filter { it.contains("$permission: granted=") }
+                    .single()
+
     enum class GrantState {
         // Granted in full, unrestricted
         TRUE,