Update robolectric tetst for BackupEligibilityRules refactor

Bug: 161241479
Test: atest RunBackupFrameworksServicesRoboTests
Change-Id: I7705d441947b1e2143f5da3c298294f5a67377f0
This commit is contained in:
Ruslan Tkhakokhov
2020-07-15 23:31:50 +01:00
parent 9a724ed0b3
commit 9a747776b2
5 changed files with 59 additions and 114 deletions

View File

@@ -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();

View File

@@ -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;
}

View File

@@ -1,81 +0,0 @@
/*
* 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();
}
}

View File

@@ -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;

View File

@@ -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;