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

Commit 28b6de63 authored by Joël Stemmer's avatar Joël Stemmer
Browse files

Fix formatting in backup and restore sources and tests

This is a pure refactor, just running `google-java-format --aosp` on
these files and some minor changes like adding annotations and updating
javadoc to make checkstyle happy.

Bug: 432673356
Test: builds successfully
Test: atest ActiveRestoreSessionTest.java (both of them)
Test: atest FullRestoreEngineTest.java
Flag: EXEMPT refactor

Change-Id: Icd43f5f06917815ede970ccac1fc63b5465adc36
parent c50e3c47
Loading
Loading
Loading
Loading
+97 −62
Original line number Diff line number Diff line
@@ -53,9 +53,7 @@ import com.android.server.backup.utils.BackupEligibilityRules;
import java.util.List;
import java.util.function.BiFunction;

/**
 * Restore session.
 */
/** Restore session. */
public class ActiveRestoreSession extends IRestoreSession.Stub {
    private static final String TAG = "RestoreSession";
    private static final String DEVICE_NAME_FOR_D2D_SET = "D2D";
@@ -88,11 +86,13 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
    }

    // --- Binder interface ---
    public synchronized int getAvailableRestoreSets(IRestoreObserver observer,
            IBackupManagerMonitor monitor) {
        mBackupManagerService.getContext().enforceCallingOrSelfPermission(
                android.Manifest.permission.BACKUP,
                "getAvailableRestoreSets");
    @Override
    public synchronized int getAvailableRestoreSets(
            IRestoreObserver observer, IBackupManagerMonitor monitor) {
        mBackupManagerService
                .getContext()
                .enforceCallingOrSelfPermission(
                        android.Manifest.permission.BACKUP, "getAvailableRestoreSets");
        if (observer == null) {
            throw new IllegalArgumentException("Observer must not be null");
        }
@@ -126,13 +126,21 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {

            // Prevent lambda from leaking 'this'
            TransportManager transportManager = mTransportManager;
            OnTaskFinishedListener listener = caller -> {
            OnTaskFinishedListener listener =
                    caller -> {
                        transportManager.disposeOfTransportClient(transportConnection, caller);
                        wakelock.release();
                    };
            Message msg = mBackupManagerService.getBackupHandler().obtainMessage(
            Message msg =
                    mBackupManagerService
                            .getBackupHandler()
                            .obtainMessage(
                                    MSG_RUN_GET_RESTORE_SETS,
                    new RestoreGetSetsParams(transportConnection, this, observer, monitor,
                                    new RestoreGetSetsParams(
                                            transportConnection,
                                            this,
                                            observer,
                                            monitor,
                                            listener));
            mBackupManagerService.getBackupHandler().sendMessage(msg);
            return 0;
@@ -144,14 +152,15 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
        }
    }

    public synchronized int restoreAll(long token, IRestoreObserver observer,
            IBackupManagerMonitor monitor) {
        mBackupManagerService.getContext().enforceCallingOrSelfPermission(
                android.Manifest.permission.BACKUP,
                "performRestore");
    @Override
    public synchronized int restoreAll(
            long token, IRestoreObserver observer, IBackupManagerMonitor monitor) {
        mBackupManagerService
                .getContext()
                .enforceCallingOrSelfPermission(
                        android.Manifest.permission.BACKUP, "performRestore");

        Slog.d(TAG, "restoreAll token=" + Long.toHexString(token)
                    + " observer=" + observer);
        Slog.d(TAG, "restoreAll token=" + Long.toHexString(token) + " observer=" + observer);

        if (mEnded) {
            throw new IllegalStateException("Restore session already ended");
@@ -205,11 +214,16 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
    }

    // Restores of more than a single package are treated as 'system' restores
    public synchronized int restorePackages(long token, @Nullable IRestoreObserver observer,
            @NonNull String[] packages, @Nullable IBackupManagerMonitor monitor) {
        mBackupManagerService.getContext().enforceCallingOrSelfPermission(
                android.Manifest.permission.BACKUP,
                "performRestore");
    @Override
    public synchronized int restorePackages(
            long token,
            @Nullable IRestoreObserver observer,
            @NonNull String[] packages,
            @Nullable IBackupManagerMonitor monitor) {
        mBackupManagerService
                .getContext()
                .enforceCallingOrSelfPermission(
                        android.Manifest.permission.BACKUP, "performRestore");

        StringBuilder b = new StringBuilder(128);
        b.append("restorePackages token=");
@@ -301,17 +315,21 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
    BackupEligibilityRules getBackupEligibilityRules(RestoreSet restoreSet) {
        // TODO(b/182986784): Remove device name comparison once a designated field for operation
        //  type is added to RestoreSet object.
        int backupDestination = DEVICE_NAME_FOR_D2D_SET.equals(restoreSet.device)
                ? BackupDestination.DEVICE_TRANSFER : BackupDestination.CLOUD;
        int backupDestination =
                DEVICE_NAME_FOR_D2D_SET.equals(restoreSet.device)
                        ? BackupDestination.DEVICE_TRANSFER
                        : BackupDestination.CLOUD;

        if (!Flags.enableSkippingRestoreLaunchedApps()) {
            return mBackupManagerService.getEligibilityRulesForOperation(backupDestination);
        }

        boolean skipRestoreForLaunchedApps = (restoreSet.backupTransportFlags
                & BackupAgent.FLAG_SKIP_RESTORE_FOR_LAUNCHED_APPS) != 0;
        boolean skipRestoreForLaunchedApps =
                (restoreSet.backupTransportFlags & BackupAgent.FLAG_SKIP_RESTORE_FOR_LAUNCHED_APPS)
                        != 0;

        return new BackupEligibilityRules(mBackupManagerService.getPackageManager(),
        return new BackupEligibilityRules(
                mBackupManagerService.getPackageManager(),
                LocalServices.getService(PackageManagerInternal.class),
                mUserId,
                mBackupManagerService.getContext(),
@@ -319,10 +337,12 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
                skipRestoreForLaunchedApps);
    }

    public synchronized int restorePackage(String packageName, IRestoreObserver observer,
            IBackupManagerMonitor monitor) {
        Slog.d(TAG, "restorePackage pkg=" + packageName + " obs=" + observer
                    + "monitor=" + monitor);
    @Override
    public synchronized int restorePackage(
            String packageName, IRestoreObserver observer, IBackupManagerMonitor monitor) {
        Slog.d(
                TAG,
                "restorePackage pkg=" + packageName + " obs=" + observer + "monitor=" + monitor);

        if (mEnded) {
            throw new IllegalStateException("Restore session already ended");
@@ -335,16 +355,22 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {

        if (mPackageName != null) {
            if (!mPackageName.equals(packageName)) {
                Slog.e(TAG, "Ignoring attempt to restore pkg=" + packageName
                        + " on session for package " + mPackageName);
                Slog.e(
                        TAG,
                        "Ignoring attempt to restore pkg="
                                + packageName
                                + " on session for package "
                                + mPackageName);
                return -1;
            }
        }

        final PackageInfo app;
        try {
            app = mBackupManagerService.getPackageManager().getPackageInfoAsUser(
                    packageName, 0, mUserId);
            app =
                    mBackupManagerService
                            .getPackageManager()
                            .getPackageInfoAsUser(packageName, 0, mUserId);
        } catch (NameNotFoundException nnf) {
            Slog.w(TAG, "Asked to restore nonexistent pkg " + packageName);
            return -1;
@@ -352,13 +378,21 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {

        // If the caller is not privileged and is not coming from the target
        // app's uid, throw a permission exception back to the caller.
        int perm = mBackupManagerService.getContext().checkPermission(
        int perm =
                mBackupManagerService
                        .getContext()
                        .checkPermission(
                                android.Manifest.permission.BACKUP,
                Binder.getCallingPid(), Binder.getCallingUid());
        if ((perm == PackageManager.PERMISSION_DENIED) &&
                (app.applicationInfo.uid != Binder.getCallingUid())) {
            Slog.w(TAG, "restorePackage: bad packageName=" + packageName
                    + " or calling uid=" + Binder.getCallingUid());
                                Binder.getCallingPid(),
                                Binder.getCallingUid());
        if ((perm == PackageManager.PERMISSION_DENIED)
                && (app.applicationInfo.uid != Binder.getCallingUid())) {
            Slog.w(
                    TAG,
                    "restorePackage: bad packageName="
                            + packageName
                            + " or calling uid="
                            + Binder.getCallingUid());
            throw new SecurityException("No permission to restore other packages");
        }

@@ -373,8 +407,7 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
            // Check whether there is data for it in the current dataset, falling back
            // to the ancestral dataset if not.
            long token = mBackupManagerService.getAvailableRestoreToken(packageName);
            Slog.d(TAG, "restorePackage pkg=" + packageName
                        + " token=" + Long.toHexString(token));
            Slog.d(TAG, "restorePackage pkg=" + packageName + " token=" + Long.toHexString(token));

            // If we didn't come up with a place to look -- no ancestral dataset and
            // the app has never been backed up from this device -- there's nothing
@@ -404,12 +437,11 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
        mRestoreSets = restoreSets;
    }

    /**
     * Returns 0 if operation sent or -1 otherwise.
     */
    /** Returns 0 if operation sent or -1 otherwise. */
    private int sendRestoreToHandlerLocked(
            BiFunction<TransportConnection, OnTaskFinishedListener,
                    RestoreParams> restoreParamsBuilder, String callerLogString) {
            BiFunction<TransportConnection, OnTaskFinishedListener, RestoreParams>
                    restoreParamsBuilder,
            String callerLogString) {
        TransportConnection transportConnection =
                mTransportManager.getTransportClient(mTransportName, callerLogString);
        if (transportConnection == null) {
@@ -429,7 +461,8 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {

        // Prevent lambda from leaking 'this'
        TransportManager transportManager = mTransportManager;
        OnTaskFinishedListener listener = caller -> {
        OnTaskFinishedListener listener =
                caller -> {
                    transportManager.disposeOfTransportClient(transportConnection, caller);
                    wakelock.release();
                };
@@ -462,6 +495,7 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
        }
    }

    @Override
    public synchronized void endRestoreSession() {
        Slog.d(TAG, "endRestoreSession");

@@ -474,7 +508,8 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
            throw new IllegalStateException("Restore session already ended");
        }

        mBackupManagerService.getBackupHandler().post(
                new EndRestoreRunnable(mBackupManagerService, this));
        mBackupManagerService
                .getBackupHandler()
                .post(new EndRestoreRunnable(mBackupManagerService, this));
    }
}
+183 −108

File changed.

Preview size limit exceeded, changes collapsed.

+24 −16
Original line number Diff line number Diff line
@@ -216,8 +216,8 @@ public class ActiveRestoreSessionTest {
    public void testGetAvailableRestoreSets_forEmptyRestoreSets() throws Exception {
        mShadowApplication.grantPermissions(android.Manifest.permission.BACKUP);
        TransportMock transportMock = setUpTransport(mTransport);
        when(transportMock.transport.getAvailableRestoreSets()).thenReturn(
                Arrays.asList(new RestoreSet[0]));
        when(transportMock.transport.getAvailableRestoreSets())
                .thenReturn(Arrays.asList(new RestoreSet[0]));
        IRestoreSession restoreSession = createActiveRestoreSession(PACKAGE_1, mTransport);

        int result = restoreSession.getAvailableRestoreSets(mObserver, mMonitor);
@@ -342,8 +342,9 @@ public class ActiveRestoreSessionTest {
        IRestoreSession restoreSession =
                createActiveRestoreSessionWithRestoreSets(null, mTransport, mRestoreSet1);

        int result = restoreSession.restorePackages(TOKEN_1, mObserver,
                new String[] {PACKAGE_1, PACKAGE_2}, mMonitor);
        int result =
                restoreSession.restorePackages(
                        TOKEN_1, mObserver, new String[] {PACKAGE_1, PACKAGE_2}, mMonitor);

        mShadowBackupLooper.runToEndOfTasks();
        assertThat(result).isEqualTo(0);
@@ -364,8 +365,8 @@ public class ActiveRestoreSessionTest {
        IRestoreSession restoreSession =
                createActiveRestoreSessionWithRestoreSets(null, mTransport, mRestoreSet1);

        restoreSession.restorePackages(TOKEN_1, mObserver, new String[] {PACKAGE_1, PACKAGE_2},
                mMonitor);
        restoreSession.restorePackages(
                TOKEN_1, mObserver, new String[] {PACKAGE_1, PACKAGE_2}, mMonitor);

        mShadowBackupLooper.runToEndOfTasks();
        assertThat(ShadowPerformUnifiedRestoreTask.getLastCreated().isFullSystemRestore()).isTrue();
@@ -407,8 +408,9 @@ public class ActiveRestoreSessionTest {
        setUpTransport(mTransport);
        IRestoreSession restoreSession = createActiveRestoreSession(null, mTransport);

        int result = restoreSession.restorePackages(TOKEN_1, mObserver, new String[] {PACKAGE_1},
                mMonitor);
        int result =
                restoreSession.restorePackages(
                        TOKEN_1, mObserver, new String[] {PACKAGE_1}, mMonitor);

        assertThat(result).isEqualTo(-1);
    }
@@ -420,8 +422,9 @@ public class ActiveRestoreSessionTest {
        IRestoreSession restoreSession =
                createActiveRestoreSessionWithRestoreSets(PACKAGE_1, mTransport, mRestoreSet1);

        int result = restoreSession.restorePackages(TOKEN_1, mObserver, new String[] {PACKAGE_2},
                mMonitor);
        int result =
                restoreSession.restorePackages(
                        TOKEN_1, mObserver, new String[] {PACKAGE_2}, mMonitor);

        assertThat(result).isEqualTo(-1);
    }
@@ -438,8 +441,8 @@ public class ActiveRestoreSessionTest {
        expectThrows(
                IllegalStateException.class,
                () ->
                        restoreSession.restorePackages(TOKEN_1, mObserver, new String[] {PACKAGE_1},
                                mMonitor));
                        restoreSession.restorePackages(
                                TOKEN_1, mObserver, new String[] {PACKAGE_1}, mMonitor));
    }

    @Test
@@ -449,8 +452,9 @@ public class ActiveRestoreSessionTest {
        IRestoreSession restoreSession =
                createActiveRestoreSessionWithRestoreSets(null, mTransport, mRestoreSet1);

        int result = restoreSession.restorePackages(TOKEN_1, mObserver, new String[] {PACKAGE_1},
                mMonitor);
        int result =
                restoreSession.restorePackages(
                        TOKEN_1, mObserver, new String[] {PACKAGE_1}, mMonitor);

        assertThat(result).isEqualTo(-1);
    }
@@ -585,7 +589,9 @@ public class ActiveRestoreSessionTest {
    private IRestoreSession createActiveRestoreSession(
            String packageName, TransportData transport) {
        return new ActiveRestoreSession(
                mBackupManagerService, packageName, transport.transportName,
                mBackupManagerService,
                packageName,
                transport.transportName,
                mBackupEligibilityRules);
    }

@@ -594,7 +600,9 @@ public class ActiveRestoreSessionTest {
            throws RemoteException {
        ActiveRestoreSession restoreSession =
                new ActiveRestoreSession(
                        mBackupManagerService, packageName, transport.transportName,
                        mBackupManagerService,
                        packageName,
                        transport.transportName,
                        mBackupEligibilityRules);
        restoreSession.setRestoreSets(Arrays.asList(restoreSets));
        return restoreSession;
+40 −41
Original line number Diff line number Diff line
@@ -56,41 +56,38 @@ public class ActiveRestoreSessionTest {
    private ActiveRestoreSession mRestoreSession;
    private ApplicationInfo mTestApp;

    @Mock
    private UserBackupManagerService mBackupManagerService;
    @Mock
    private BackupEligibilityRules mBackupEligibilityRules;
    @Mock
    private Context mContext;
    @Mock
    private PackageManagerInternal mPackageManagerInternal;
    @Mock
    private TransportManager mTransportManager;
    @Mock private UserBackupManagerService mBackupManagerService;
    @Mock private BackupEligibilityRules mBackupEligibilityRules;
    @Mock private Context mContext;
    @Mock private PackageManagerInternal mPackageManagerInternal;
    @Mock private TransportManager mTransportManager;
    @Mock private UserManager mUserManager;

    @Rule public final SetFlagsRule mFlagsRule = new SetFlagsRule();

    @Rule
    public final SetFlagsRule mFlagsRule = new SetFlagsRule();
    @Rule
    public final ExtendedMockitoRule mExtendedMockitoRule = new ExtendedMockitoRule
            .Builder(/* testClassInstance */ this)
    public final ExtendedMockitoRule mExtendedMockitoRule =
            new ExtendedMockitoRule.Builder(/* testClassInstance */ this)
                    .mockStatic(LocalServices.class)
                    .afterSessionFinished(
                    () -> LocalServices.removeServiceForTest(PackageManagerInternal.class)
            ).build();
                            () -> LocalServices.removeServiceForTest(PackageManagerInternal.class))
                    .build();

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(/* testClass */ this);
        when(mBackupEligibilityRules.isAppEligibleForRestore(any())).thenReturn(true);
        when(mBackupManagerService.getEligibilityRulesForOperation(anyInt())).thenReturn(
                mBackupEligibilityRules);
        when(mBackupManagerService.getEligibilityRulesForOperation(anyInt()))
                .thenReturn(mBackupEligibilityRules);
        when(mBackupManagerService.getTransportManager()).thenReturn(mTransportManager);
        when(mBackupManagerService.getContext()).thenReturn(mContext);
        when(mContext.getSystemService(eq(UserManager.class))).thenReturn(mUserManager);
        when(LocalServices.getService(PackageManagerInternal.class)).thenReturn(
                mPackageManagerInternal);
        when(LocalServices.getService(PackageManagerInternal.class))
                .thenReturn(mPackageManagerInternal);

        mRestoreSession = new ActiveRestoreSession(mBackupManagerService,
        mRestoreSession =
                new ActiveRestoreSession(
                        mBackupManagerService,
                        /* packageName */ null,
                        /* transportName */ "",
                        mBackupEligibilityRules);
@@ -101,7 +98,8 @@ public class ActiveRestoreSessionTest {
    @Test
    public void testGetBackupEligibilityRules_skipRestoreFlagOn_skipsLaunchedAppRestore() {
        mFlagsRule.enableFlags(Flags.FLAG_ENABLE_SKIPPING_RESTORE_LAUNCHED_APPS);
        RestoreSet restoreSet = new RestoreSet(
        RestoreSet restoreSet =
                new RestoreSet(
                        /* name */ null,
                        /* device */ null,
                        /* token */ 0,
@@ -109,8 +107,8 @@ public class ActiveRestoreSessionTest {
        when(mPackageManagerInternal.wasPackageEverLaunched(eq(TEST_APP_NAME), anyInt()))
                .thenReturn(true);

        BackupEligibilityRules eligibilityRules = mRestoreSession.getBackupEligibilityRules(
                restoreSet);
        BackupEligibilityRules eligibilityRules =
                mRestoreSession.getBackupEligibilityRules(restoreSet);

        assertThat(eligibilityRules.isAppEligibleForRestore(mTestApp)).isFalse();
    }
@@ -118,7 +116,8 @@ public class ActiveRestoreSessionTest {
    @Test
    public void testGetBackupEligibilityRules_skipRestoreFlagOff_allowsAppRestore() {
        mFlagsRule.disableFlags(Flags.FLAG_ENABLE_SKIPPING_RESTORE_LAUNCHED_APPS);
        RestoreSet restoreSet = new RestoreSet(
        RestoreSet restoreSet =
                new RestoreSet(
                        /* name */ null,
                        /* device */ null,
                        /* token */ 0,
@@ -126,8 +125,8 @@ public class ActiveRestoreSessionTest {
        when(mPackageManagerInternal.wasPackageEverLaunched(eq(TEST_APP_NAME), anyInt()))
                .thenReturn(true);

        BackupEligibilityRules eligibilityRules = mRestoreSession.getBackupEligibilityRules(
                restoreSet);
        BackupEligibilityRules eligibilityRules =
                mRestoreSession.getBackupEligibilityRules(restoreSet);

        assertThat(eligibilityRules.isAppEligibleForRestore(mTestApp)).isTrue();
    }
+39 −33
Original line number Diff line number Diff line
@@ -48,7 +48,8 @@ public class FullRestoreEngineTest {
    @Test
    public void shouldSkipReadOnlyDir_skipsAllReadonlyDirsAndTheirChildren() {
        // Create the file tree.
        TestFile[] testFiles = new TestFile[] {
        TestFile[] testFiles =
                new TestFile[] {
                    TestFile.dir("root"),
                    TestFile.file("root/auth_token"),
                    TestFile.dir("root/media"),
@@ -56,9 +57,11 @@ public class FullRestoreEngineTest {
                    TestFile.file("root/push_token.txt"),
                    TestFile.dir("root/read-only-dir-1").markReadOnly().expectSkipped(),
                    TestFile.dir("root/read-only-dir-1/writable-subdir").expectSkipped(),
                TestFile.file("root/read-only-dir-1/writable-subdir/writable-file").expectSkipped(),
                    TestFile.file("root/read-only-dir-1/writable-subdir/writable-file")
                            .expectSkipped(),
                    TestFile.dir("root/read-only-dir-1/writable-subdir/read-only-subdir-2")
                        .markReadOnly().expectSkipped(),
                            .markReadOnly()
                            .expectSkipped(),
                    TestFile.file("root/read-only-dir-1/writable-file").expectSkipped(),
                    TestFile.file("root/random-stuff.txt"),
                    TestFile.dir("root/database"),
@@ -73,7 +76,8 @@ public class FullRestoreEngineTest {

    @Test
    public void shouldSkipReadOnlyDir_onlySkipsChildrenUnderTheSamePackage() {
        TestFile[] testFiles = new TestFile[]{
        TestFile[] testFiles =
                new TestFile[] {
                    TestFile.dir("read-only-dir").markReadOnly().expectSkipped(),
                    TestFile.file("read-only-dir/file").expectSkipped(),
                    TestFile.file("read-only-dir/file-from-different-package")
@@ -85,7 +89,8 @@ public class FullRestoreEngineTest {

    @Test
    public void shouldSkipReadOnlyDir_onlySkipsChildrenUnderTheSameDomain() {
        TestFile[] testFiles = new TestFile[]{
        TestFile[] testFiles =
                new TestFile[] {
                    TestFile.dir("read-only-dir").markReadOnly().expectSkipped(),
                    TestFile.file("read-only-dir/file").expectSkipped(),
                    TestFile.file("read-only-dir/file-from-different-domain")
@@ -100,8 +105,9 @@ public class FullRestoreEngineTest {
        for (TestFile testFile : testFiles) {
            boolean actualExcluded = mRestoreEngine.shouldSkipReadOnlyDir(testFile.mMetadata);
            boolean expectedExcluded = testFile.mShouldSkip;
            assertWithMessage(testFile.mMetadata.path).that(actualExcluded).isEqualTo(
                    expectedExcluded);
            assertWithMessage(testFile.mMetadata.path)
                    .that(actualExcluded)
                    .isEqualTo(expectedExcluded);
        }
    }