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

Commit 9a747776 authored by Ruslan Tkhakokhov's avatar Ruslan Tkhakokhov
Browse files

Update robolectric tetst for BackupEligibilityRules refactor

Bug: 161241479
Test: atest RunBackupFrameworksServicesRoboTests
Change-Id: I7705d441947b1e2143f5da3c298294f5a67377f0
parent 9a724ed0
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ import com.android.server.backup.testing.BackupManagerServiceTestUtils;
import com.android.server.backup.testing.TransportData;
import com.android.server.backup.testing.TransportTestUtils.TransportMock;
import com.android.server.backup.transport.TransportNotRegisteredException;
import com.android.server.testing.shadows.ShadowAppBackupUtils;
import com.android.server.testing.shadows.ShadowBackupEligibilityRules;
import com.android.server.testing.shadows.ShadowApplicationPackageManager;
import com.android.server.testing.shadows.ShadowBinder;
import com.android.server.testing.shadows.ShadowKeyValueBackupJob;
@@ -99,7 +99,7 @@ import java.util.List;
@RunWith(RobolectricTestRunner.class)
@Config(
        shadows = {
            ShadowAppBackupUtils.class,
            ShadowBackupEligibilityRules.class,
            ShadowApplicationPackageManager.class,
            ShadowSystemServiceRegistry.class
        })
@@ -159,7 +159,7 @@ public class UserBackupManagerServiceTest {
    @After
    public void tearDown() throws Exception {
        mBackupThread.quit();
        ShadowAppBackupUtils.reset();
        ShadowBackupEligibilityRules.reset();
        ShadowApplicationPackageManager.reset();
    }

@@ -236,7 +236,7 @@ public class UserBackupManagerServiceTest {
        mShadowContext.grantPermissions(android.Manifest.permission.BACKUP);
        TransportMock transportMock = setUpCurrentTransport(mTransportManager, backupTransport());
        registerPackages(PACKAGE_1);
        ShadowAppBackupUtils.setAppRunningAndEligibleForBackupWithTransport(PACKAGE_1);
        ShadowBackupEligibilityRules.setAppRunningAndEligibleForBackupWithTransport(PACKAGE_1);
        UserBackupManagerService backupManagerService = createUserBackupManagerServiceAndRunTasks();

        boolean result = backupManagerService.isAppEligibleForBackup(PACKAGE_1);
@@ -255,7 +255,7 @@ public class UserBackupManagerServiceTest {
        mShadowContext.denyPermissions(android.Manifest.permission.BACKUP);
        setUpCurrentTransport(mTransportManager, mTransport);
        registerPackages(PACKAGE_1);
        ShadowAppBackupUtils.setAppRunningAndEligibleForBackupWithTransport(PACKAGE_1);
        ShadowBackupEligibilityRules.setAppRunningAndEligibleForBackupWithTransport(PACKAGE_1);
        UserBackupManagerService backupManagerService = createUserBackupManagerServiceAndRunTasks();

        expectThrows(
@@ -273,7 +273,7 @@ public class UserBackupManagerServiceTest {
        mShadowContext.grantPermissions(android.Manifest.permission.BACKUP);
        TransportMock transportMock = setUpCurrentTransport(mTransportManager, mTransport);
        registerPackages(PACKAGE_1, PACKAGE_2);
        ShadowAppBackupUtils.setAppRunningAndEligibleForBackupWithTransport(PACKAGE_1);
        ShadowBackupEligibilityRules.setAppRunningAndEligibleForBackupWithTransport(PACKAGE_1);
        UserBackupManagerService backupManagerService = createUserBackupManagerServiceAndRunTasks();

        String[] filtered =
@@ -801,7 +801,7 @@ public class UserBackupManagerServiceTest {
        mShadowContext.grantPermissions(android.Manifest.permission.BACKUP);
        for (String packageName : packages) {
            registerPackages(packageName);
            ShadowAppBackupUtils.setAppRunningAndEligibleForBackupWithTransport(packageName);
            ShadowBackupEligibilityRules.setAppRunningAndEligibleForBackupWithTransport(packageName);
        }
        setUpCurrentTransport(mTransportManager, mTransport);
    }
@@ -962,7 +962,7 @@ public class UserBackupManagerServiceTest {
    @Config(shadows = ShadowKeyValueBackupTask.class)
    public void testRequestBackup_whenPackageIsFullBackup() throws Exception {
        setUpForRequestBackup(PACKAGE_1);
        ShadowAppBackupUtils.setAppGetsFullBackup(PACKAGE_1);
        ShadowBackupEligibilityRules.setAppGetsFullBackup(PACKAGE_1);
        UserBackupManagerService backupManagerService =
                createBackupManagerServiceForRequestBackup();

+45 −23
Original line number Diff line number Diff line
@@ -115,6 +115,7 @@ import com.android.server.backup.testing.TestUtils.ThrowingRunnable;
import com.android.server.backup.testing.TransportData;
import com.android.server.backup.testing.TransportTestUtils;
import com.android.server.backup.testing.TransportTestUtils.TransportMock;
import com.android.server.backup.utils.BackupEligibilityRules;
import com.android.server.testing.shadows.FrameworkShadowLooper;
import com.android.server.testing.shadows.ShadowApplicationPackageManager;
import com.android.server.testing.shadows.ShadowBackupDataInput;
@@ -176,6 +177,7 @@ public class KeyValueBackupTaskTest {
    private static final String BACKUP_AGENT_SHARED_PREFS_SYNCHRONIZER_CLASS =
            "android.app.backup.BackupAgent$SharedPrefsSynchronizer";
    private static final int USER_ID = 10;
    private static final int OPERATION_TYPE = BackupManager.OperationType.BACKUP;

    @Mock private TransportManager mTransportManager;
    @Mock private DataChangedJournal mOldJournal;
@@ -183,6 +185,7 @@ public class KeyValueBackupTaskTest {
    @Mock private IBackupManagerMonitor mMonitor;
    @Mock private OnTaskFinishedListener mListener;
    @Mock private PackageManagerInternal mPackageManagerInternal;

    private UserBackupManagerService mBackupManagerService;
    private TransportData mTransport;
    private ShadowLooper mShadowBackupLooper;
@@ -198,6 +201,7 @@ public class KeyValueBackupTaskTest {
    private Looper mMainLooper;
    private FrameworkShadowLooper mShadowMainLooper;
    private Context mContext;
    private BackupEligibilityRules mBackupEligibilityRules;

    @Before
    public void setUp() throws Exception {
@@ -253,6 +257,8 @@ public class KeyValueBackupTaskTest {
                .thenReturn(PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
        LocalServices.removeServiceForTest(PackageManagerInternal.class);
        LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternal);
        mBackupEligibilityRules = new BackupEligibilityRules(mPackageManager,
                LocalServices.getService(PackageManagerInternal.class), USER_ID, OPERATION_TYPE);
    }

    @After
@@ -479,7 +485,8 @@ public class KeyValueBackupTaskTest {
        TransportMock transportMock = setUpInitializedTransport(mTransport);
        setUpAgentWithData(PACKAGE_1);
        BackupAgent pmAgent = spy(createPmAgent());
        doReturn(forward(pmAgent)).when(mBackupManagerService).makeMetadataAgent();
        doReturn(forward(pmAgent)).when(mBackupManagerService)
                .makeMetadataAgentWithEligibilityRules(mBackupEligibilityRules);
        KeyValueBackupTask task = createKeyValueBackupTask(transportMock, true, PACKAGE_1);

        runTask(task);
@@ -492,7 +499,8 @@ public class KeyValueBackupTaskTest {
        TransportMock transportMock = setUpInitializedTransport(mTransport);
        setUpAgentWithData(PACKAGE_1);
        BackupAgent pmAgent = spy(createPmAgent());
        doReturn(forward(pmAgent)).when(mBackupManagerService).makeMetadataAgent();
        doReturn(forward(pmAgent)).when(mBackupManagerService)
                .makeMetadataAgentWithEligibilityRules(mBackupEligibilityRules);
        KeyValueBackupTask task =
                createKeyValueBackupTask(transportMock, true, PACKAGE_1, PM_PACKAGE);

@@ -506,7 +514,8 @@ public class KeyValueBackupTaskTest {
        TransportMock transportMock = setUpInitializedTransport(mTransport);
        setUpAgentWithData(PACKAGE_1);
        BackupAgent pmAgent = spy(createPmAgent());
        doReturn(forward(pmAgent)).when(mBackupManagerService).makeMetadataAgent();
        doReturn(forward(pmAgent)).when(mBackupManagerService)
                .makeMetadataAgentWithEligibilityRules(mBackupEligibilityRules);
        KeyValueBackupTask task = createKeyValueBackupTask(transportMock, false, PACKAGE_1);

        runTask(task);
@@ -742,7 +751,7 @@ public class KeyValueBackupTaskTest {

        verify(mBackupManagerService).setWorkSource(null);
        verify(mObserver).onResult(PACKAGE_1.packageName, ERROR_AGENT_FAILURE);
        verify(mObserver).backupFinished(BackupManager.SUCCESS);
        verify(mObserver).backupFinished(SUCCESS);
        assertBackupPendingFor(PACKAGE_1);
    }

@@ -775,7 +784,7 @@ public class KeyValueBackupTaskTest {

        verify(mBackupManagerService).setWorkSource(null);
        verify(mObserver).onResult(PACKAGE_1.packageName, ERROR_AGENT_FAILURE);
        verify(mObserver).backupFinished(BackupManager.SUCCESS);
        verify(mObserver).backupFinished(SUCCESS);
        assertBackupPendingFor(PACKAGE_1);
    }

@@ -792,7 +801,7 @@ public class KeyValueBackupTaskTest {

        verify(mBackupManagerService).setWorkSource(null);
        verify(mObserver).onResult(PACKAGE_1.packageName, ERROR_AGENT_FAILURE);
        verify(mObserver).backupFinished(BackupManager.SUCCESS);
        verify(mObserver).backupFinished(SUCCESS);
        assertBackupPendingFor(PACKAGE_1);
    }

@@ -810,7 +819,7 @@ public class KeyValueBackupTaskTest {

        verify(mBackupManagerService).setWorkSource(null);
        verify(mObserver).onResult(PACKAGE_1.packageName, ERROR_AGENT_FAILURE);
        verify(mObserver).backupFinished(BackupManager.SUCCESS);
        verify(mObserver).backupFinished(SUCCESS);
        assertBackupPendingFor(PACKAGE_1);
    }

@@ -1316,7 +1325,8 @@ public class KeyValueBackupTaskTest {
                        argThat(packageInfo(PM_PACKAGE)), any(), anyInt()))
                .then(copyBackupDataTo(backupDataPath));
        BackupAgent pmAgent = spy(createPmAgent());
        doReturn(forward(pmAgent)).when(mBackupManagerService).makeMetadataAgent();
        doReturn(forward(pmAgent)).when(mBackupManagerService)
                .makeMetadataAgentWithEligibilityRules(mBackupEligibilityRules);
        agentOnBackupDo(
                pmAgent,
                (oldState, dataOutput, newState) -> {
@@ -1380,7 +1390,8 @@ public class KeyValueBackupTaskTest {
        setUpAgent(PACKAGE_1);
        when(transportMock.transport.finishBackup()).thenReturn(BackupTransport.TRANSPORT_OK);
        BackupAgent pmAgent = spy(createPmAgent());
        doReturn(forward(pmAgent)).when(mBackupManagerService).makeMetadataAgent();
        doReturn(forward(pmAgent)).when(mBackupManagerService)
                .makeMetadataAgentWithEligibilityRules(mBackupEligibilityRules);
        agentOnBackupDo(
                pmAgent,
                (oldState, dataOutput, newState) -> {
@@ -1404,7 +1415,8 @@ public class KeyValueBackupTaskTest {
        setUpAgent(PACKAGE_1);
        when(transportMock.transport.finishBackup()).thenReturn(BackupTransport.TRANSPORT_OK);
        BackupAgent pmAgent = spy(createPmAgent());
        doReturn(forward(pmAgent)).when(mBackupManagerService).makeMetadataAgent();
        doReturn(forward(pmAgent)).when(mBackupManagerService)
                .makeMetadataAgentWithEligibilityRules(mBackupEligibilityRules);
        agentOnBackupDo(
                pmAgent,
                (oldState, dataOutput, newState) -> {
@@ -1669,7 +1681,7 @@ public class KeyValueBackupTaskTest {

        verify(mReporter).onPackageBackupTransportFailure(PACKAGE_1.packageName);
        verify(mReporter).onTransportNotInitialized(mTransport.transportName);
        verify(mReporter).onBackupFinished(BackupManager.ERROR_TRANSPORT_ABORTED);
        verify(mReporter).onBackupFinished(ERROR_TRANSPORT_ABORTED);
    }

    @Test
@@ -1686,7 +1698,7 @@ public class KeyValueBackupTaskTest {

        verify(mReporter).onPackageBackupTransportFailure(PM_PACKAGE.packageName);
        verify(mReporter).onTransportNotInitialized(mTransport.transportName);
        verify(mReporter).onBackupFinished(BackupManager.ERROR_TRANSPORT_ABORTED);
        verify(mReporter).onBackupFinished(ERROR_TRANSPORT_ABORTED);
    }

    @Test
@@ -1983,7 +1995,8 @@ public class KeyValueBackupTaskTest {
    public void testRunTask_whenPmAgentFails_reportsCorrectly() throws Exception {
        TransportMock transportMock = setUpInitializedTransport(mTransport);
        BackupAgent pmAgent = createThrowingPmAgent(new RuntimeException());
        when(mBackupManagerService.makeMetadataAgent()).thenReturn(pmAgent);
        when(mBackupManagerService.makeMetadataAgentWithEligibilityRules(
                mBackupEligibilityRules)).thenReturn(pmAgent);
        KeyValueBackupTask task = createKeyValueBackupTask(transportMock, PACKAGE_1);

        runTask(task);
@@ -2001,7 +2014,8 @@ public class KeyValueBackupTaskTest {
        TransportMock transportMock = setUpInitializedTransport(mTransport);
        setUpAgent(PACKAGE_1);
        BackupAgent pmAgent = createThrowingPmAgent(new RuntimeException());
        doReturn(pmAgent).when(mBackupManagerService).makeMetadataAgent();
        doReturn(pmAgent).when(mBackupManagerService)
                .makeMetadataAgentWithEligibilityRules(mBackupEligibilityRules);
        KeyValueBackupTask task = createKeyValueBackupTask(transportMock, PACKAGE_1);

        runTask(task);
@@ -2014,7 +2028,8 @@ public class KeyValueBackupTaskTest {
        TransportMock transportMock = setUpInitializedTransport(mTransport);
        setUpAgent(PACKAGE_1);
        BackupAgent pmAgent = createThrowingPmAgent(new RuntimeException());
        doReturn(pmAgent).when(mBackupManagerService).makeMetadataAgent();
        doReturn(pmAgent).when(mBackupManagerService)
                .makeMetadataAgentWithEligibilityRules(mBackupEligibilityRules);
        KeyValueBackupTask task = createKeyValueBackupTask(transportMock, PACKAGE_1);

        runTask(task);
@@ -2027,7 +2042,8 @@ public class KeyValueBackupTaskTest {
        TransportMock transportMock = setUpInitializedTransport(mTransport);
        setUpAgent(PACKAGE_1);
        BackupAgent pmAgent = createThrowingPmAgent(new RuntimeException());
        doReturn(pmAgent).when(mBackupManagerService).makeMetadataAgent();
        doReturn(pmAgent).when(mBackupManagerService)
                .makeMetadataAgentWithEligibilityRules(mBackupEligibilityRules);
        KeyValueBackupTask task = createKeyValueBackupTask(transportMock, PACKAGE_1);

        runTask(task);
@@ -2040,7 +2056,8 @@ public class KeyValueBackupTaskTest {
        TransportMock transportMock = setUpInitializedTransport(mTransport);
        setUpAgent(PACKAGE_1);
        BackupAgent pmAgent = spy(createPmAgent());
        doReturn(forward(pmAgent)).when(mBackupManagerService).makeMetadataAgent();
        doReturn(forward(pmAgent)).when(mBackupManagerService)
                .makeMetadataAgentWithEligibilityRules(mBackupEligibilityRules);
        KeyValueBackupTask task = createKeyValueBackupTask(transportMock, PACKAGE_1);
        agentOnBackupDo(
                pmAgent, (oldState, dataOutput, newState) -> runInWorkerThread(task::markCancel));
@@ -2055,7 +2072,8 @@ public class KeyValueBackupTaskTest {
        TransportMock transportMock = setUpInitializedTransport(mTransport);
        setUpAgent(PACKAGE_1);
        BackupAgent pmAgent = spy(createPmAgent());
        doReturn(forward(pmAgent)).when(mBackupManagerService).makeMetadataAgent();
        doReturn(forward(pmAgent)).when(mBackupManagerService)
                .makeMetadataAgentWithEligibilityRules(mBackupEligibilityRules);
        KeyValueBackupTask task = createKeyValueBackupTask(transportMock, PACKAGE_1);
        agentOnBackupDo(
                pmAgent, (oldState, dataOutput, newState) -> runInWorkerThread(task::markCancel));
@@ -2652,14 +2670,16 @@ public class KeyValueBackupTaskTest {
                        mListener,
                        emptyList(),
                        /* userInitiated */ false,
                        nonIncremental);
                        nonIncremental,
                        mBackupEligibilityRules);
        mBackupManager.setUp(mBackupHandler, task);
        return task;
    }

    private PackageManagerBackupAgent createPmAgent() {
        PackageManagerBackupAgent pmAgent =
                new PackageManagerBackupAgent(mApplication.getPackageManager(), USER_ID);
                new PackageManagerBackupAgent(mApplication.getPackageManager(), USER_ID,
                        mBackupEligibilityRules);
        pmAgent.attach(mApplication);
        pmAgent.onCreate();
        return pmAgent;
@@ -2671,7 +2691,8 @@ public class KeyValueBackupTaskTest {
     */
    private PackageManagerBackupAgent createThrowingPmAgent(RuntimeException exception) {
        PackageManagerBackupAgent pmAgent =
                new ThrowingPackageManagerBackupAgent(mApplication.getPackageManager(), exception);
                new ThrowingPackageManagerBackupAgent(mApplication.getPackageManager(), exception,
                        mBackupEligibilityRules);
        pmAgent.attach(mApplication);
        pmAgent.onCreate();
        return pmAgent;
@@ -2985,8 +3006,9 @@ public class KeyValueBackupTaskTest {
        private final RuntimeException mException;

        ThrowingPackageManagerBackupAgent(
                PackageManager packageManager, RuntimeException exception) {
            super(packageManager, USER_ID);
                PackageManager packageManager, RuntimeException exception,
                BackupEligibilityRules backupEligibilityRules) {
            super(packageManager, USER_ID, backupEligibilityRules);
            mException = exception;
        }

+0 −81
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License
 */

package com.android.server.testing.shadows;

import android.annotation.Nullable;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;

import com.android.server.backup.transport.TransportClient;
import com.android.server.backup.utils.AppBackupUtils;

import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.annotation.Resetter;

import java.util.HashSet;
import java.util.Set;

@Implements(AppBackupUtils.class)
public class ShadowAppBackupUtils {
    private static final Set<String> sAppsRunningAndEligibleForBackupWithTransport =
            new HashSet<>();
    private static final Set<String> sAppsEligibleForBackup = new HashSet<>();
    private static final Set<String> sAppsGetFullBackup = new HashSet<>();

    public static void setAppRunningAndEligibleForBackupWithTransport(String packageName) {
        sAppsEligibleForBackup.add(packageName);
        sAppsRunningAndEligibleForBackupWithTransport.add(packageName);
    }

    public static void setAppEligibleForBackup(String packageName) {
        sAppsEligibleForBackup.add(packageName);
    }

    /** By default the app will be key-value. */
    public static void setAppGetsFullBackup(String packageName) {
        sAppsGetFullBackup.add(packageName);
    }

    @Implementation
    protected static boolean appIsRunningAndEligibleForBackupWithTransport(
            @Nullable TransportClient transportClient,
            String packageName,
            PackageManager pm,
            int userId) {
        return sAppsRunningAndEligibleForBackupWithTransport.contains(packageName);
    }

    @Implementation
    protected static boolean appIsEligibleForBackup(ApplicationInfo app, int userId,
            int operationType) {
        return sAppsEligibleForBackup.contains(app.packageName);
    }

    @Implementation
    protected static boolean appGetsFullBackup(PackageInfo packageInfo, int operationType) {
        return sAppsGetFullBackup.contains(packageInfo.packageName);
    }

    @Resetter
    public static void reset() {
        sAppsRunningAndEligibleForBackupWithTransport.clear();
        sAppsEligibleForBackup.clear();
        sAppsGetFullBackup.clear();
    }
}
+3 −1
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import com.android.server.backup.internal.OnTaskFinishedListener;
import com.android.server.backup.keyvalue.KeyValueBackupReporter;
import com.android.server.backup.keyvalue.KeyValueBackupTask;
import com.android.server.backup.transport.TransportClient;
import com.android.server.backup.utils.BackupEligibilityRules;

import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
@@ -63,7 +64,8 @@ public class ShadowKeyValueBackupTask {
            OnTaskFinishedListener listener,
            List<String> pendingFullBackups,
            boolean userInitiated,
            boolean nonIncremental) {
            boolean nonIncremental,
            BackupEligibilityRules backupEligibilityRules) {
        mListener = listener;
        mQueue = queue;
        mPendingFullBackups = pendingFullBackups;
+3 −1
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import com.android.server.backup.UserBackupManagerService;
import com.android.server.backup.internal.OnTaskFinishedListener;
import com.android.server.backup.restore.PerformUnifiedRestoreTask;
import com.android.server.backup.transport.TransportClient;
import com.android.server.backup.utils.BackupEligibilityRules;

import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
@@ -67,7 +68,8 @@ public class ShadowPerformUnifiedRestoreTask {
            int pmToken,
            boolean isFullSystemRestore,
            @Nullable String[] filterSet,
            OnTaskFinishedListener listener) {
            OnTaskFinishedListener listener,
            BackupEligibilityRules backupEligibilityRules) {
        mBackupManagerService = backupManagerService;
        mPackage = targetPackage;
        mIsFullSystemRestore = isFullSystemRestore;