Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f4da7986 authored by Oli Lan's avatar Oli Lan
Browse files

Fix RollbackUnitTest when deleting rollback.

This fixes a test break introduced by ag/10173899.

An additional test is added to correctly test the new case of APEX data
being deleted.

Bug: 148961691
Test: atest RollbackUnitTest
Change-Id: I1fe168ff65a6b5011f2a0809bc5f410de1fb25db
parent a7db3c8e
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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
+1 −2
Original line number Diff line number Diff line
@@ -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;
@@ -662,7 +661,7 @@ class Rollback {
                }
            }
            if (containsApex) {
                ApexManager.getInstance().destroyDeSnapshots(info.getRollbackId());
                dataHelper.destroyApexDeSnapshots(info.getRollbackId());
            }

            RollbackStore.deleteRollback(this);
+26 −4
Original line number Diff line number Diff line
@@ -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();
    }