Ignore sharedUserId when package already left shared UID
After a package has left shared UID, its non-shared UID state should be
preserved after the next scan (e.g. reboot or an APK upgrade), or else
the app would observe data loss.
Bug: 235460457
Test: atest CtsSharedUserMigrationTestCases
Change-Id: I128ee864edfbcd609dcd8e9d8ce919198052321e
(cherry picked from commit f43da6d00aefe9a2c545910760a3689e2eee0005)
Merged-In: I128ee864edfbcd609dcd8e9d8ce919198052321e
diff --git a/tests/tests/uidmigration/src/android/uidmigration/cts/SharedUserMigrationTest.kt b/tests/tests/uidmigration/src/android/uidmigration/cts/SharedUserMigrationTest.kt
index 1f7af46..94fc698 100644
--- a/tests/tests/uidmigration/src/android/uidmigration/cts/SharedUserMigrationTest.kt
+++ b/tests/tests/uidmigration/src/android/uidmigration/cts/SharedUserMigrationTest.kt
@@ -87,6 +87,11 @@
assertTrue(pkgs.sameAs(Const.INSTALL_TEST_PKG2))
pkgInfo = mPm.getPackageInfo(Const.INSTALL_TEST_PKG, FLAG_ZERO)
assertNull(pkgInfo.sharedUserId)
+ // Upgrading an APK with sharedUserMaxSdkVersion set should not change its UID.
+ assertTrue(installPackage(InstallTest.APK4))
+ val newPkgInfo = mPm.getPackageInfo(Const.INSTALL_TEST_PKG, FLAG_ZERO)
+ assertNull(newPkgInfo.sharedUserId)
+ assertEquals(pkgInfo.applicationInfo.uid, newPkgInfo.applicationInfo.uid)
}
private fun testBestEffort(uid: Int) {