diff options
| author | 2019-01-10 12:01:54 +0000 | |
|---|---|---|
| committer | 2019-01-17 09:30:50 +0000 | |
| commit | 31bc9606ddee42c1296cf376f8139f1010d66c47 (patch) | |
| tree | 5851297f2ed3105dc9346cfe88d5a94f098ef4c0 | |
| parent | f8e7ff917512017baf1fff7b2a9efd533fec78a5 (diff) | |
Improve test coverage of rollback data persistence.
Tests that we properly persist data about multiple available rollbacks
and available multi-package rollbacks.
Test: atest RollbackTest
Bug: 112431924
Change-Id: Ib31a0388e6420a942fac00f27fef33c0a866ea0b
| -rw-r--r-- | tests/RollbackTest/src/com/android/tests/rollback/RollbackTest.java | 153 |
1 files changed, 137 insertions, 16 deletions
diff --git a/tests/RollbackTest/src/com/android/tests/rollback/RollbackTest.java b/tests/RollbackTest/src/com/android/tests/rollback/RollbackTest.java index 77cd9d8f20a3..c2e735e184b0 100644 --- a/tests/RollbackTest/src/com/android/tests/rollback/RollbackTest.java +++ b/tests/RollbackTest/src/com/android/tests/rollback/RollbackTest.java @@ -178,10 +178,10 @@ public class RollbackTest { } /** - * Test that rollback data is properly persisted. + * Test that multiple available rollbacks are properly persisted. */ @Test - public void testRollbackDataPersistence() throws Exception { + public void testAvailableRollbackPersistence() throws Exception { try { RollbackTestUtils.adoptShellPermissionIdentity( Manifest.permission.INSTALL_PACKAGES, @@ -190,36 +190,157 @@ public class RollbackTest { RollbackManager rm = RollbackTestUtils.getRollbackManager(); - // TODO: Test this with multi-package rollback, not just single - // package rollback. - // Prep installation of TEST_APP_A RollbackTestUtils.uninstall(TEST_APP_A); RollbackTestUtils.install("RollbackTestAppAv1.apk", false); RollbackTestUtils.install("RollbackTestAppAv2.apk", true); assertEquals(2, RollbackTestUtils.getInstalledVersion(TEST_APP_A)); + RollbackTestUtils.uninstall(TEST_APP_B); + RollbackTestUtils.install("RollbackTestAppBv1.apk", false); + RollbackTestUtils.install("RollbackTestAppBv2.apk", true); + assertEquals(2, RollbackTestUtils.getInstalledVersion(TEST_APP_B)); + + // Both test apps should now be available for rollback. + // TODO: See if there is a way to remove this race condition + // between when the app is installed and when the rollback + // is made available. + Thread.sleep(1000); + + assertTrue(rm.getPackagesWithAvailableRollbacks().contains(TEST_APP_A)); + RollbackInfo rollbackA = rm.getAvailableRollback(TEST_APP_A); + assertNotNull(rollbackA); + assertEquals(TEST_APP_A, rollbackA.targetPackage.packageName); + assertEquals(2, rollbackA.targetPackage.higherVersion.versionCode); + assertEquals(1, rollbackA.targetPackage.lowerVersion.versionCode); + + assertTrue(rm.getPackagesWithAvailableRollbacks().contains(TEST_APP_B)); + RollbackInfo rollbackB = rm.getAvailableRollback(TEST_APP_B); + assertNotNull(rollbackB); + assertEquals(TEST_APP_B, rollbackB.targetPackage.packageName); + assertEquals(2, rollbackB.targetPackage.higherVersion.versionCode); + assertEquals(1, rollbackB.targetPackage.lowerVersion.versionCode); + + // Reload the persisted data. + rm.reloadPersistedData(); + + // The apps should still be available for rollback. + rollbackA = rm.getAvailableRollback(TEST_APP_A); + assertNotNull(rollbackA); + assertEquals(TEST_APP_A, rollbackA.targetPackage.packageName); + assertEquals(2, rollbackA.targetPackage.higherVersion.versionCode); + assertEquals(1, rollbackA.targetPackage.lowerVersion.versionCode); + + assertTrue(rm.getPackagesWithAvailableRollbacks().contains(TEST_APP_B)); + rollbackB = rm.getAvailableRollback(TEST_APP_B); + assertNotNull(rollbackB); + assertEquals(TEST_APP_B, rollbackB.targetPackage.packageName); + assertEquals(2, rollbackB.targetPackage.higherVersion.versionCode); + assertEquals(1, rollbackB.targetPackage.lowerVersion.versionCode); + + // Rollback of B should not rollback A + RollbackTestUtils.rollback(rollbackB); + assertEquals(2, RollbackTestUtils.getInstalledVersion(TEST_APP_A)); + assertEquals(1, RollbackTestUtils.getInstalledVersion(TEST_APP_B)); + } finally { + RollbackTestUtils.dropShellPermissionIdentity(); + } + } + + /** + * Test that available multi-package rollbacks are properly persisted. + */ + @Test + public void testAvailableMultiPackageRollbackPersistence() throws Exception { + try { + RollbackTestUtils.adoptShellPermissionIdentity( + Manifest.permission.INSTALL_PACKAGES, + Manifest.permission.DELETE_PACKAGES, + Manifest.permission.MANAGE_ROLLBACKS); + + RollbackManager rm = RollbackTestUtils.getRollbackManager(); + + RollbackTestUtils.uninstall(TEST_APP_A); + RollbackTestUtils.uninstall(TEST_APP_B); + RollbackTestUtils.installMultiPackage(false, + "RollbackTestAppAv1.apk", + "RollbackTestAppBv1.apk"); + RollbackTestUtils.installMultiPackage(true, + "RollbackTestAppAv2.apk", + "RollbackTestAppBv2.apk"); + assertEquals(2, RollbackTestUtils.getInstalledVersion(TEST_APP_A)); + assertEquals(2, RollbackTestUtils.getInstalledVersion(TEST_APP_B)); + // The app should now be available for rollback. // TODO: See if there is a way to remove this race condition // between when the app is installed and when the rollback // is made available. Thread.sleep(1000); + assertTrue(rm.getPackagesWithAvailableRollbacks().contains(TEST_APP_A)); - RollbackInfo rollback = rm.getAvailableRollback(TEST_APP_A); - assertNotNull(rollback); - assertEquals(TEST_APP_A, rollback.targetPackage.packageName); - assertEquals(2, rollback.targetPackage.higherVersion.versionCode); - assertEquals(1, rollback.targetPackage.lowerVersion.versionCode); + RollbackInfo rollbackA = rm.getAvailableRollback(TEST_APP_A); + assertNotNull(rollbackA); + assertEquals(TEST_APP_A, rollbackA.targetPackage.packageName); + assertEquals(2, rollbackA.targetPackage.higherVersion.versionCode); + assertEquals(1, rollbackA.targetPackage.lowerVersion.versionCode); + + assertTrue(rm.getPackagesWithAvailableRollbacks().contains(TEST_APP_B)); + RollbackInfo rollbackB = rm.getAvailableRollback(TEST_APP_B); + assertNotNull(rollbackB); + assertEquals(TEST_APP_B, rollbackB.targetPackage.packageName); + assertEquals(2, rollbackB.targetPackage.higherVersion.versionCode); + assertEquals(1, rollbackB.targetPackage.lowerVersion.versionCode); // Reload the persisted data. rm.reloadPersistedData(); - // The app should still be available for rollback. + // The apps should still be available for rollback. + rollbackA = rm.getAvailableRollback(TEST_APP_A); + assertNotNull(rollbackA); + assertEquals(TEST_APP_A, rollbackA.targetPackage.packageName); + assertEquals(2, rollbackA.targetPackage.higherVersion.versionCode); + assertEquals(1, rollbackA.targetPackage.lowerVersion.versionCode); + + assertTrue(rm.getPackagesWithAvailableRollbacks().contains(TEST_APP_B)); + rollbackB = rm.getAvailableRollback(TEST_APP_B); + assertNotNull(rollbackB); + assertEquals(TEST_APP_B, rollbackB.targetPackage.packageName); + assertEquals(2, rollbackB.targetPackage.higherVersion.versionCode); + assertEquals(1, rollbackB.targetPackage.lowerVersion.versionCode); + + // Rollback of B should rollback A as well + RollbackTestUtils.rollback(rollbackB); + assertEquals(1, RollbackTestUtils.getInstalledVersion(TEST_APP_A)); + assertEquals(1, RollbackTestUtils.getInstalledVersion(TEST_APP_B)); + } finally { + RollbackTestUtils.dropShellPermissionIdentity(); + } + } + + /** + * Test that recently executed rollback data is properly persisted. + */ + @Test + public void testRecentlyExecutedRollbackPersistence() throws Exception { + try { + RollbackTestUtils.adoptShellPermissionIdentity( + Manifest.permission.INSTALL_PACKAGES, + Manifest.permission.DELETE_PACKAGES, + Manifest.permission.MANAGE_ROLLBACKS); + + RollbackManager rm = RollbackTestUtils.getRollbackManager(); + + RollbackTestUtils.uninstall(TEST_APP_A); + RollbackTestUtils.install("RollbackTestAppAv1.apk", false); + RollbackTestUtils.install("RollbackTestAppAv2.apk", true); + assertEquals(2, RollbackTestUtils.getInstalledVersion(TEST_APP_A)); + + // The app should now be available for rollback. + // TODO: See if there is a way to remove this race condition + // between when the app is installed and when the rollback + // is made available. + Thread.sleep(1000); assertTrue(rm.getPackagesWithAvailableRollbacks().contains(TEST_APP_A)); - rollback = rm.getAvailableRollback(TEST_APP_A); - assertNotNull(rollback); - assertEquals(TEST_APP_A, rollback.targetPackage.packageName); - assertEquals(2, rollback.targetPackage.higherVersion.versionCode); - assertEquals(1, rollback.targetPackage.lowerVersion.versionCode); + RollbackInfo rollback = rm.getAvailableRollback(TEST_APP_A); // Roll back the app. RollbackTestUtils.rollback(rollback); |