Loading services/core/java/com/android/server/rollback/AppDataRollbackHelper.java +7 −0 Original line number Diff line number Diff line Loading @@ -223,6 +223,13 @@ public class AppDataRollbackHelper { } } /** * Deletes all device-encrypted apex data snapshots for the given rollback id. */ public void destroyApexDeSnapshots(int rollbackId) { mApexManager.destroyDeSnapshots(rollbackId); } /** * Commits the pending backups and restores for a given {@code userId} and {@code rollback}. If * the rollback has a pending backup, it is updated with a mapping from {@code userId} to inode Loading services/core/java/com/android/server/rollback/Rollback.java +1 −2 Original line number Diff line number Diff line Loading @@ -44,7 +44,6 @@ import android.util.SparseLongArray; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.ArrayUtils; import com.android.internal.util.IndentingPrintWriter; import com.android.server.pm.ApexManager; import java.io.File; import java.io.IOException; Loading Loading @@ -671,7 +670,7 @@ class Rollback { } } if (containsApex) { ApexManager.getInstance().destroyDeSnapshots(info.getRollbackId()); dataHelper.destroyApexDeSnapshots(info.getRollbackId()); } RollbackStore.deleteRollback(this); Loading services/tests/servicestests/src/com/android/server/rollback/RollbackUnitTest.java +26 −4 Original line number Diff line number Diff line Loading @@ -224,21 +224,43 @@ public class RollbackUnitTest { } @Test public void snapshotThenDelete() { public void snapshotThenDeleteNoApex() { Rollback rollback = new Rollback(123, new File("/test/testing"), -1, USER, INSTALLER); PackageRollbackInfo pkgInfo1 = newPkgInfoFor(PKG_1, 12, 10, false); PackageRollbackInfo pkgInfo2 = newPkgInfoFor(PKG_2, 18, 12, false); rollback.info.getPackages().addAll(Arrays.asList(pkgInfo1, pkgInfo2)); int[] userIds = {111, 222}; rollback.snapshotUserData(PKG_2, userIds, mMockDataHelper); verify(mMockDataHelper).snapshotAppData(eq(123), pkgRollbackInfoFor(PKG_2), eq(userIds)); rollback.delete(mMockDataHelper); verify(mMockDataHelper).destroyAppDataSnapshot(eq(123), pkgRollbackInfoFor(PKG_2), eq(111)); verify(mMockDataHelper).destroyAppDataSnapshot(eq(123), pkgRollbackInfoFor(PKG_2), eq(222)); verify(mMockDataHelper, never()).destroyApexDeSnapshots(anyInt()); assertThat(rollback.isDeleted()).isTrue(); } @Test public void snapshotThenDeleteWithApex() { Rollback rollback = new Rollback(123, new File("/test/testing"), -1, USER, INSTALLER); PackageRollbackInfo pkgInfo1 = newPkgInfoFor(PKG_1, 12, 10, false); PackageRollbackInfo pkgInfo2 = newPkgInfoFor(PKG_2, 18, 12, true); rollback.info.getPackages().addAll(Arrays.asList(pkgInfo1, pkgInfo2)); int[] userIds = {12, 18}; int[] userIds = {111, 222}; rollback.snapshotUserData(PKG_2, userIds, mMockDataHelper); verify(mMockDataHelper).snapshotAppData(eq(123), pkgRollbackInfoFor(PKG_2), eq(userIds)); rollback.delete(mMockDataHelper); verify(mMockDataHelper).destroyAppDataSnapshot(eq(123), pkgRollbackInfoFor(PKG_2), eq(12)); verify(mMockDataHelper).destroyAppDataSnapshot(eq(123), pkgRollbackInfoFor(PKG_2), eq(18)); verify(mMockDataHelper, never()) .destroyAppDataSnapshot(anyInt(), pkgRollbackInfoFor(PKG_2), anyInt()); verify(mMockDataHelper).destroyApexDeSnapshots(123); assertThat(rollback.isDeleted()).isTrue(); } Loading Loading
services/core/java/com/android/server/rollback/AppDataRollbackHelper.java +7 −0 Original line number Diff line number Diff line Loading @@ -223,6 +223,13 @@ public class AppDataRollbackHelper { } } /** * Deletes all device-encrypted apex data snapshots for the given rollback id. */ public void destroyApexDeSnapshots(int rollbackId) { mApexManager.destroyDeSnapshots(rollbackId); } /** * Commits the pending backups and restores for a given {@code userId} and {@code rollback}. If * the rollback has a pending backup, it is updated with a mapping from {@code userId} to inode Loading
services/core/java/com/android/server/rollback/Rollback.java +1 −2 Original line number Diff line number Diff line Loading @@ -44,7 +44,6 @@ import android.util.SparseLongArray; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.ArrayUtils; import com.android.internal.util.IndentingPrintWriter; import com.android.server.pm.ApexManager; import java.io.File; import java.io.IOException; Loading Loading @@ -671,7 +670,7 @@ class Rollback { } } if (containsApex) { ApexManager.getInstance().destroyDeSnapshots(info.getRollbackId()); dataHelper.destroyApexDeSnapshots(info.getRollbackId()); } RollbackStore.deleteRollback(this); Loading
services/tests/servicestests/src/com/android/server/rollback/RollbackUnitTest.java +26 −4 Original line number Diff line number Diff line Loading @@ -224,21 +224,43 @@ public class RollbackUnitTest { } @Test public void snapshotThenDelete() { public void snapshotThenDeleteNoApex() { Rollback rollback = new Rollback(123, new File("/test/testing"), -1, USER, INSTALLER); PackageRollbackInfo pkgInfo1 = newPkgInfoFor(PKG_1, 12, 10, false); PackageRollbackInfo pkgInfo2 = newPkgInfoFor(PKG_2, 18, 12, false); rollback.info.getPackages().addAll(Arrays.asList(pkgInfo1, pkgInfo2)); int[] userIds = {111, 222}; rollback.snapshotUserData(PKG_2, userIds, mMockDataHelper); verify(mMockDataHelper).snapshotAppData(eq(123), pkgRollbackInfoFor(PKG_2), eq(userIds)); rollback.delete(mMockDataHelper); verify(mMockDataHelper).destroyAppDataSnapshot(eq(123), pkgRollbackInfoFor(PKG_2), eq(111)); verify(mMockDataHelper).destroyAppDataSnapshot(eq(123), pkgRollbackInfoFor(PKG_2), eq(222)); verify(mMockDataHelper, never()).destroyApexDeSnapshots(anyInt()); assertThat(rollback.isDeleted()).isTrue(); } @Test public void snapshotThenDeleteWithApex() { Rollback rollback = new Rollback(123, new File("/test/testing"), -1, USER, INSTALLER); PackageRollbackInfo pkgInfo1 = newPkgInfoFor(PKG_1, 12, 10, false); PackageRollbackInfo pkgInfo2 = newPkgInfoFor(PKG_2, 18, 12, true); rollback.info.getPackages().addAll(Arrays.asList(pkgInfo1, pkgInfo2)); int[] userIds = {12, 18}; int[] userIds = {111, 222}; rollback.snapshotUserData(PKG_2, userIds, mMockDataHelper); verify(mMockDataHelper).snapshotAppData(eq(123), pkgRollbackInfoFor(PKG_2), eq(userIds)); rollback.delete(mMockDataHelper); verify(mMockDataHelper).destroyAppDataSnapshot(eq(123), pkgRollbackInfoFor(PKG_2), eq(12)); verify(mMockDataHelper).destroyAppDataSnapshot(eq(123), pkgRollbackInfoFor(PKG_2), eq(18)); verify(mMockDataHelper, never()) .destroyAppDataSnapshot(anyInt(), pkgRollbackInfoFor(PKG_2), anyInt()); verify(mMockDataHelper).destroyApexDeSnapshots(123); assertThat(rollback.isDeleted()).isTrue(); } Loading