summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernardo Rufino <brufino@google.com>2018-02-28 11:05:18 +0000
committerBernardo Rufino <brufino@google.com>2018-02-28 11:07:30 +0000
commitcea93536bc47a76d4e8ea420990e39f4e54d712b (patch)
tree8a6e8b9438aff0b7ae32f43796c2b5d97241001b
parent12b6bafcf443723c0479d255af373df201d1ae6f (diff)
More tests for ActiveRestoreSession - 2
Around restorePackage(). Test: m - j RunFrameworksServicesRoboTests Change-Id: I291d899d5bb786a1d394e758698418718d6c4d9b
-rw-r--r--services/robotests/src/com/android/server/backup/PerformBackupTaskTest.java14
-rw-r--r--services/robotests/src/com/android/server/backup/TransportManagerTest.java1
-rw-r--r--services/robotests/src/com/android/server/backup/restore/ActiveRestoreSessionTest.java173
-rw-r--r--services/robotests/src/com/android/server/backup/testing/BackupManagerServiceTestUtils.java3
4 files changed, 147 insertions, 44 deletions
diff --git a/services/robotests/src/com/android/server/backup/PerformBackupTaskTest.java b/services/robotests/src/com/android/server/backup/PerformBackupTaskTest.java
index 91d4937c104c..466ce1f2f1e3 100644
--- a/services/robotests/src/com/android/server/backup/PerformBackupTaskTest.java
+++ b/services/robotests/src/com/android/server/backup/PerformBackupTaskTest.java
@@ -19,6 +19,7 @@ package com.android.server.backup;
import static com.android.server.backup.testing.BackupManagerServiceTestUtils.createBackupWakeLock;
import static com.android.server.backup.testing.BackupManagerServiceTestUtils.setUpBackupManagerServiceBasics;
import static com.android.server.backup.testing.BackupManagerServiceTestUtils.startBackupThreadAndGetLooper;
+
import static com.android.server.backup.testing.TransportData.backupTransport;
import static com.google.common.truth.Truth.assertThat;
@@ -102,18 +103,10 @@ import java.util.stream.Stream;
@Config(
manifest = Config.NONE,
sdk = 26,
- shadows = {
- ShadowBackupDataInput.class,
- ShadowBackupDataOutput.class,
- ShadowQueuedWork.class
- }
+ shadows = {ShadowBackupDataInput.class, ShadowBackupDataOutput.class, ShadowQueuedWork.class}
)
@SystemLoaderPackages({"com.android.server.backup", "android.app.backup"})
-@SystemLoaderClasses({
- IBackupTransport.class,
- IBackupAgent.class,
- PackageInfo.class
-})
+@SystemLoaderClasses({IBackupTransport.class, IBackupAgent.class, PackageInfo.class})
@Presubmit
public class PerformBackupTaskTest {
private static final String PACKAGE_1 = "com.example.package1";
@@ -579,6 +572,7 @@ public class PerformBackupTaskTest {
return task;
}
+ /** Matches {@link PackageInfo} whose package name is {@code packageName}. */
private static ArgumentMatcher<PackageInfo> packageInfo(String packageName) {
// We have to test for packageInfo nulity because of Mockito's own stubbing with argThat().
// E.g. if you do:
diff --git a/services/robotests/src/com/android/server/backup/TransportManagerTest.java b/services/robotests/src/com/android/server/backup/TransportManagerTest.java
index 02514b82ffba..d02b616c4b19 100644
--- a/services/robotests/src/com/android/server/backup/TransportManagerTest.java
+++ b/services/robotests/src/com/android/server/backup/TransportManagerTest.java
@@ -97,7 +97,6 @@ public class TransportManagerTest {
private TransportData mTransportA1;
private TransportData mTransportA2;
private TransportData mTransportB1;
-
private ShadowPackageManager mShadowPackageManager;
private Context mContext;
diff --git a/services/robotests/src/com/android/server/backup/restore/ActiveRestoreSessionTest.java b/services/robotests/src/com/android/server/backup/restore/ActiveRestoreSessionTest.java
index c6a4f57b2a91..03792b1d40ba 100644
--- a/services/robotests/src/com/android/server/backup/restore/ActiveRestoreSessionTest.java
+++ b/services/robotests/src/com/android/server/backup/restore/ActiveRestoreSessionTest.java
@@ -39,6 +39,8 @@ import android.app.backup.IBackupManagerMonitor;
import android.app.backup.IRestoreObserver;
import android.app.backup.IRestoreSession;
import android.app.backup.RestoreSet;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
import android.os.Looper;
import android.os.PowerManager;
import android.os.RemoteException;
@@ -65,7 +67,9 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowApplication;
+import org.robolectric.shadows.ShadowBinder;
import org.robolectric.shadows.ShadowLooper;
+import org.robolectric.shadows.ShadowPackageManager;
import java.util.ArrayDeque;
@@ -73,13 +77,15 @@ import java.util.ArrayDeque;
@Config(
manifest = Config.NONE,
sdk = 26,
- shadows = {ShadowEventLog.class, ShadowPerformUnifiedRestoreTask.class}
+ shadows = {ShadowEventLog.class, ShadowPerformUnifiedRestoreTask.class, ShadowBinder.class}
)
@SystemLoaderPackages({"com.android.server.backup"})
@Presubmit
public class ActiveRestoreSessionTest {
private static final String PACKAGE_1 = "com.example.package1";
private static final String PACKAGE_2 = "com.example.package2";
+ public static final long TOKEN_1 = 1L;
+ public static final long TOKEN_2 = 2L;
@Mock private BackupManagerService mBackupManagerService;
@Mock private TransportManager mTransportManager;
@@ -89,10 +95,9 @@ public class ActiveRestoreSessionTest {
private ShadowApplication mShadowApplication;
private PowerManager.WakeLock mWakeLock;
private TransportData mTransport;
- private long mToken1;
- private long mToken2;
private RestoreSet mRestoreSet1;
private RestoreSet mRestoreSet2;
+ private ShadowPackageManager mShadowPackageManager;
@Before
public void setUp() throws Exception {
@@ -100,14 +105,14 @@ public class ActiveRestoreSessionTest {
mTransport = backupTransport();
- mToken1 = 1L;
- mRestoreSet1 = new RestoreSet("name1", "device1", mToken1);
- mToken2 = 2L;
- mRestoreSet2 = new RestoreSet("name2", "device2", mToken2);
+ mRestoreSet1 = new RestoreSet("name1", "device1", TOKEN_1);
+ mRestoreSet2 = new RestoreSet("name2", "device2", TOKEN_2);
Application application = RuntimeEnvironment.application;
mShadowApplication = shadowOf(application);
+ mShadowPackageManager = shadowOf(application.getPackageManager());
+
Looper backupLooper = startBackupThreadAndGetLooper();
mShadowBackupLooper = shadowOf(backupLooper);
BackupHandler backupHandler = new BackupHandler(mBackupManagerService, backupLooper);
@@ -223,7 +228,7 @@ public class ActiveRestoreSessionTest {
IRestoreSession restoreSession =
createActiveRestoreSessionWithRestoreSets(null, mTransport, mRestoreSet1);
- int result = restoreSession.restoreAll(mToken1, mObserver, mMonitor);
+ int result = restoreSession.restoreAll(TOKEN_1, mObserver, mMonitor);
mShadowBackupLooper.runToEndOfTasks();
assertThat(result).isEqualTo(0);
@@ -245,11 +250,9 @@ public class ActiveRestoreSessionTest {
setUpTransport(mTransport);
IRestoreSession restoreSession = createActiveRestoreSession(null, mTransport);
- int result = restoreSession.restoreAll(mToken1, mObserver, mMonitor);
+ int result = restoreSession.restoreAll(TOKEN_1, mObserver, mMonitor);
- mShadowBackupLooper.runToEndOfTasks();
assertThat(result).isEqualTo(-1);
- assertThat(ShadowPerformUnifiedRestoreTask.getLastCreated()).isNull();
}
@Test
@@ -259,11 +262,9 @@ public class ActiveRestoreSessionTest {
IRestoreSession restoreSession =
createActiveRestoreSessionWithRestoreSets(PACKAGE_1, mTransport, mRestoreSet1);
- int result = restoreSession.restoreAll(mToken1, mObserver, mMonitor);
+ int result = restoreSession.restoreAll(TOKEN_1, mObserver, mMonitor);
- mShadowBackupLooper.runToEndOfTasks();
assertThat(result).isEqualTo(-1);
- assertThat(ShadowPerformUnifiedRestoreTask.getLastCreated()).isNull();
}
@Test
@@ -277,7 +278,7 @@ public class ActiveRestoreSessionTest {
expectThrows(
IllegalStateException.class,
- () -> restoreSession.restoreAll(mToken1, mObserver, mMonitor));
+ () -> restoreSession.restoreAll(TOKEN_1, mObserver, mMonitor));
}
@Test
@@ -287,11 +288,9 @@ public class ActiveRestoreSessionTest {
IRestoreSession restoreSession =
createActiveRestoreSessionWithRestoreSets(null, mTransport, mRestoreSet1);
- int result = restoreSession.restoreAll(mToken1, mObserver, mMonitor);
+ int result = restoreSession.restoreAll(TOKEN_1, mObserver, mMonitor);
- mShadowBackupLooper.runToEndOfTasks();
assertThat(result).isEqualTo(-1);
- assertThat(ShadowPerformUnifiedRestoreTask.getLastCreated()).isNull();
}
@Test
@@ -302,7 +301,7 @@ public class ActiveRestoreSessionTest {
IRestoreSession restoreSession =
createActiveRestoreSessionWithRestoreSets(null, mTransport, mRestoreSet1);
- int result = restoreSession.restoreAll(mToken1, mObserver, mMonitor);
+ int result = restoreSession.restoreAll(TOKEN_1, mObserver, mMonitor);
mShadowBackupLooper.runToEndOfTasks();
assertThat(result).isEqualTo(0);
@@ -318,7 +317,7 @@ public class ActiveRestoreSessionTest {
int result =
restoreSession.restoreSome(
- mToken1, mObserver, mMonitor, new String[] {PACKAGE_1, PACKAGE_2});
+ TOKEN_1, mObserver, mMonitor, new String[] {PACKAGE_1, PACKAGE_2});
mShadowBackupLooper.runToEndOfTasks();
assertThat(result).isEqualTo(0);
@@ -340,7 +339,7 @@ public class ActiveRestoreSessionTest {
createActiveRestoreSessionWithRestoreSets(null, mTransport, mRestoreSet1);
restoreSession.restoreSome(
- mToken1, mObserver, mMonitor, new String[] {PACKAGE_1, PACKAGE_2});
+ TOKEN_1, mObserver, mMonitor, new String[] {PACKAGE_1, PACKAGE_2});
mShadowBackupLooper.runToEndOfTasks();
assertThat(ShadowPerformUnifiedRestoreTask.getLastCreated().isFullSystemRestore()).isTrue();
@@ -353,7 +352,7 @@ public class ActiveRestoreSessionTest {
IRestoreSession restoreSession =
createActiveRestoreSessionWithRestoreSets(null, mTransport, mRestoreSet1);
- restoreSession.restoreSome(mToken1, mObserver, mMonitor, new String[] {PACKAGE_1});
+ restoreSession.restoreSome(TOKEN_1, mObserver, mMonitor, new String[] {PACKAGE_1});
mShadowBackupLooper.runToEndOfTasks();
ShadowPerformUnifiedRestoreTask shadowTask =
@@ -369,7 +368,7 @@ public class ActiveRestoreSessionTest {
IRestoreSession restoreSession =
createActiveRestoreSessionWithRestoreSets(null, mTransport, mRestoreSet1);
- restoreSession.restoreSome(mToken1, mObserver, mMonitor, new String[] {PACKAGE_1});
+ restoreSession.restoreSome(TOKEN_1, mObserver, mMonitor, new String[] {PACKAGE_1});
mShadowBackupLooper.runToEndOfTasks();
assertThat(ShadowPerformUnifiedRestoreTask.getLastCreated().isFullSystemRestore())
@@ -383,11 +382,9 @@ public class ActiveRestoreSessionTest {
IRestoreSession restoreSession = createActiveRestoreSession(null, mTransport);
int result =
- restoreSession.restoreSome(mToken1, mObserver, mMonitor, new String[] {PACKAGE_1});
+ restoreSession.restoreSome(TOKEN_1, mObserver, mMonitor, new String[] {PACKAGE_1});
- mShadowBackupLooper.runToEndOfTasks();
assertThat(result).isEqualTo(-1);
- assertThat(ShadowPerformUnifiedRestoreTask.getLastCreated()).isNull();
}
@Test
@@ -398,11 +395,9 @@ public class ActiveRestoreSessionTest {
createActiveRestoreSessionWithRestoreSets(PACKAGE_1, mTransport, mRestoreSet1);
int result =
- restoreSession.restoreSome(mToken1, mObserver, mMonitor, new String[] {PACKAGE_2});
+ restoreSession.restoreSome(TOKEN_1, mObserver, mMonitor, new String[] {PACKAGE_2});
- mShadowBackupLooper.runToEndOfTasks();
assertThat(result).isEqualTo(-1);
- assertThat(ShadowPerformUnifiedRestoreTask.getLastCreated()).isNull();
}
@Test
@@ -418,7 +413,7 @@ public class ActiveRestoreSessionTest {
IllegalStateException.class,
() ->
restoreSession.restoreSome(
- mToken1, mObserver, mMonitor, new String[] {PACKAGE_1}));
+ TOKEN_1, mObserver, mMonitor, new String[] {PACKAGE_1}));
}
@Test
@@ -429,11 +424,125 @@ public class ActiveRestoreSessionTest {
createActiveRestoreSessionWithRestoreSets(null, mTransport, mRestoreSet1);
int result =
- restoreSession.restoreSome(mToken1, mObserver, mMonitor, new String[] {PACKAGE_1});
+ restoreSession.restoreSome(TOKEN_1, mObserver, mMonitor, new String[] {PACKAGE_1});
+
+ assertThat(result).isEqualTo(-1);
+ }
+
+ @Test
+ public void testRestorePackage_whenCallerIsPackage() throws Exception {
+ // No need for BACKUP permission in this case
+ mShadowApplication.denyPermissions(android.Manifest.permission.BACKUP);
+ ShadowBinder.setCallingUid(1);
+ setUpPackage(PACKAGE_1, /* uid */ 1);
+ when(mBackupManagerService.getAvailableRestoreToken(PACKAGE_1)).thenReturn(TOKEN_1);
+ TransportMock transportMock = setUpTransport(mTransport);
+ IRestoreSession restoreSession = createActiveRestoreSession(PACKAGE_1, mTransport);
+
+ int result = restoreSession.restorePackage(PACKAGE_1, mObserver, mMonitor);
+
+ mShadowBackupLooper.runToEndOfTasks();
+ assertThat(result).isEqualTo(0);
+ verify(mTransportManager)
+ .disposeOfTransportClient(eq(transportMock.transportClient), any());
+ assertThat(mWakeLock.isHeld()).isFalse();
+ assertThat(mBackupManagerService.isRestoreInProgress()).isFalse();
+ ShadowPerformUnifiedRestoreTask shadowTask =
+ ShadowPerformUnifiedRestoreTask.getLastCreated();
+ assertThat(shadowTask.isFullSystemRestore()).isFalse();
+ assertThat(shadowTask.getFilterSet()).isNull();
+ assertThat(shadowTask.getPackage().packageName).isEqualTo(PACKAGE_1);
+ }
+
+ @Test
+ public void testRestorePackage_whenPackageNullWhenCreated() throws Exception {
+ ShadowBinder.setCallingUid(1);
+ setUpPackage(PACKAGE_1, /* uid */ 1);
+ when(mBackupManagerService.getAvailableRestoreToken(PACKAGE_1)).thenReturn(TOKEN_1);
+ setUpTransport(mTransport);
+ IRestoreSession restoreSession = createActiveRestoreSession(null, mTransport);
+
+ int result = restoreSession.restorePackage(PACKAGE_1, mObserver, mMonitor);
mShadowBackupLooper.runToEndOfTasks();
+ assertThat(result).isEqualTo(0);
+ }
+
+ @Test
+ public void testRestorePackage_whenCallerIsNotPackageAndPermissionGranted() throws Exception {
+ mShadowApplication.grantPermissions(android.Manifest.permission.BACKUP);
+ ShadowBinder.setCallingUid(1);
+ setUpPackage(PACKAGE_1, /* uid */ 2);
+ when(mBackupManagerService.getAvailableRestoreToken(PACKAGE_1)).thenReturn(TOKEN_1);
+ setUpTransport(mTransport);
+ IRestoreSession restoreSession = createActiveRestoreSession(PACKAGE_1, mTransport);
+
+ int result = restoreSession.restorePackage(PACKAGE_1, mObserver, mMonitor);
+
+ mShadowBackupLooper.runToEndOfTasks();
+ assertThat(result).isEqualTo(0);
+ }
+
+ @Test
+ public void testRestorePackage_whenCallerIsNotPackageAndPermissionDenied() throws Exception {
+ mShadowApplication.denyPermissions(android.Manifest.permission.BACKUP);
+ ShadowBinder.setCallingUid(1);
+ setUpPackage(PACKAGE_1, /* uid */ 2);
+ when(mBackupManagerService.getAvailableRestoreToken(PACKAGE_1)).thenReturn(TOKEN_1);
+ setUpTransport(mTransport);
+ IRestoreSession restoreSession = createActiveRestoreSession(PACKAGE_1, mTransport);
+
+ expectThrows(
+ SecurityException.class,
+ () -> restoreSession.restorePackage(PACKAGE_1, mObserver, mMonitor));
+ }
+
+ @Test
+ public void testRestorePackage_whenPackageNotFound() throws Exception {
+ mShadowApplication.grantPermissions(android.Manifest.permission.BACKUP);
+ setUpPackage(PACKAGE_1, /* uid */ 1);
+ setUpTransport(mTransport);
+ IRestoreSession restoreSession = createActiveRestoreSession(null, mTransport);
+
+ int result = restoreSession.restorePackage(PACKAGE_2, mObserver, mMonitor);
+
assertThat(result).isEqualTo(-1);
- assertThat(ShadowPerformUnifiedRestoreTask.getLastCreated()).isNull();
+ }
+
+ @Test
+ public void testRestorePackage_whenSessionEnded() throws Exception {
+ ShadowBinder.setCallingUid(1);
+ setUpPackage(PACKAGE_1, /* uid */ 1);
+ setUpTransport(mTransport);
+ IRestoreSession restoreSession = createActiveRestoreSession(null, mTransport);
+ restoreSession.endRestoreSession();
+ mShadowBackupLooper.runToEndOfTasks();
+
+ expectThrows(
+ IllegalStateException.class,
+ () -> restoreSession.restorePackage(PACKAGE_1, mObserver, mMonitor));
+ }
+
+ @Test
+ public void testRestorePackage_whenTransportNotRegistered() throws Exception {
+ ShadowBinder.setCallingUid(1);
+ setUpPackage(PACKAGE_1, /* uid */ 1);
+ setUpTransport(mTransport.unregistered());
+ IRestoreSession restoreSession = createActiveRestoreSession(null, mTransport);
+
+ int result = restoreSession.restorePackage(PACKAGE_1, mObserver, mMonitor);
+
+ assertThat(result).isEqualTo(-1);
+ }
+
+ // TODO: Create a builder for PackageInfo/ApplicationInfo and unify usage with
+ // TransportManagerTest
+ private void setUpPackage(String packageName, int uid) {
+ PackageInfo packageInfo = new PackageInfo();
+ packageInfo.packageName = packageName;
+ packageInfo.applicationInfo = new ApplicationInfo();
+ packageInfo.applicationInfo.uid = uid;
+ mShadowPackageManager.addPackage(packageInfo);
}
private IRestoreSession createActiveRestoreSession(
diff --git a/services/robotests/src/com/android/server/backup/testing/BackupManagerServiceTestUtils.java b/services/robotests/src/com/android/server/backup/testing/BackupManagerServiceTestUtils.java
index 3c0234bf0a2d..c210fdea6e89 100644
--- a/services/robotests/src/com/android/server/backup/testing/BackupManagerServiceTestUtils.java
+++ b/services/robotests/src/com/android/server/backup/testing/BackupManagerServiceTestUtils.java
@@ -34,8 +34,9 @@ import com.android.server.backup.internal.BackupHandler;
import java.lang.Thread.UncaughtExceptionHandler;
+/** Test utils for {@link BackupManagerService} and friends. */
public class BackupManagerServiceTestUtils {
- /** Sets up a basic mocks for {@link BackupManagerService} */
+ /** Sets up basic mocks for {@link BackupManagerService}. */
public static void setUpBackupManagerServiceBasics(
BackupManagerService backupManagerService,
Context context,