From 4fe554ae58cfe0228dac9da7f63528ae28d8aa90 Mon Sep 17 00:00:00 2001 From: Chandan Nath Date: Tue, 2 Apr 2019 18:16:40 +0100 Subject: [PATCH] isBackupServiceActive should not depend on whether the user is started Bug: 129763613 Test: atest com.android.server.backup.TrampolineTest Change-Id: Ia05451a4d45a14bc30353e268cb6616ceb49947e --- .../com/android/server/backup/Trampoline.java | 2 +- .../android/server/backup/TrampolineTest.java | 46 +++++++++++++++---- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/services/backup/java/com/android/server/backup/Trampoline.java b/services/backup/java/com/android/server/backup/Trampoline.java index 8f0c5d812e1c3..bb0aba0c2e886 100644 --- a/services/backup/java/com/android/server/backup/Trampoline.java +++ b/services/backup/java/com/android/server/backup/Trampoline.java @@ -395,7 +395,7 @@ public class Trampoline extends IBackupManager.Stub { @Override public boolean isBackupServiceActive(int userId) { synchronized (mStateLock) { - return isUserReadyForBackup(userId); + return mService != null && isBackupActivatedForUser(userId); } } diff --git a/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java b/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java index dd79aad52fd25..29cbf988fd566 100644 --- a/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java +++ b/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java @@ -95,6 +95,7 @@ public class TrampolineTest { new ComponentName("package2", "class2") }; private static final int NON_USER_SYSTEM = UserHandle.USER_SYSTEM + 1; + private static final int UNSTARTED_NON_USER_SYSTEM = UserHandle.USER_SYSTEM + 2; @UserIdInt private int mUserId; @@ -126,8 +127,6 @@ public class TrampolineTest { private TrampolineTestable mTrampoline; private File mTestDir; private File mSuppressFile; - private File mActivatedFile; - private File mRememberActivatedFile; @Before public void setUp() throws Exception { @@ -141,6 +140,7 @@ public class TrampolineTest { when(mUserManagerMock.getUserInfo(UserHandle.USER_SYSTEM)).thenReturn(mUserInfoMock); when(mUserManagerMock.getUserInfo(NON_USER_SYSTEM)).thenReturn(mUserInfoMock); + when(mUserManagerMock.getUserInfo(UNSTARTED_NON_USER_SYSTEM)).thenReturn(mUserInfoMock); TrampolineTestable.sBackupManagerServiceMock = mBackupManagerServiceMock; TrampolineTestable.sCallingUserId = UserHandle.USER_SYSTEM; @@ -154,18 +154,31 @@ public class TrampolineTest { mSuppressFile = new File(mTestDir, "suppress"); TrampolineTestable.sSuppressFile = mSuppressFile; - mActivatedFile = new File(mTestDir, "activate-" + NON_USER_SYSTEM); - TrampolineTestable.sActivatedFiles.append(NON_USER_SYSTEM, mActivatedFile); - mRememberActivatedFile = new File(mTestDir, "rem-activate-" + NON_USER_SYSTEM); - TrampolineTestable.sRememberActivatedFiles.append(NON_USER_SYSTEM, mRememberActivatedFile); + setUpStateFilesForNonSystemUser(NON_USER_SYSTEM); + setUpStateFilesForNonSystemUser(UNSTARTED_NON_USER_SYSTEM); mTrampoline = new TrampolineTestable(mContextMock); } + private void setUpStateFilesForNonSystemUser(int userId) { + File activatedFile = new File(mTestDir, "activate-" + userId); + TrampolineTestable.sActivatedFiles.append(userId, activatedFile); + File rememberActivatedFile = new File(mTestDir, "rem-activate-" + userId); + TrampolineTestable.sRememberActivatedFiles.append(userId, rememberActivatedFile); + } + @After public void tearDown() throws Exception { mSuppressFile.delete(); - mActivatedFile.delete(); + deleteFiles(TrampolineTestable.sActivatedFiles); + deleteFiles(TrampolineTestable.sRememberActivatedFiles); + } + + private void deleteFiles(SparseArray files) { + int numFiles = files.size(); + for (int i = 0; i < numFiles; i++) { + files.valueAt(i).delete(); + } } @Test @@ -244,6 +257,16 @@ public class TrampolineTest { assertTrue(mTrampoline.isBackupServiceActive(NON_USER_SYSTEM)); } + @Test + public void + isBackupServiceActive_forUnstartedNonSystemUser_returnsTrueWhenSystemAndUserActivated() + throws Exception { + mTrampoline.initializeService(); + mTrampoline.setBackupServiceActive(UNSTARTED_NON_USER_SYSTEM, true); + + assertTrue(mTrampoline.isBackupServiceActive(UNSTARTED_NON_USER_SYSTEM)); + } + @Test public void setBackupServiceActive_forSystemUserAndCallerSystemUid_serviceCreated() { mTrampoline.initializeService(); @@ -421,7 +444,8 @@ public class TrampolineTest { mTrampoline.setBackupServiceActive(NON_USER_SYSTEM, true); - assertTrue(RandomAccessFileUtils.readBoolean(mRememberActivatedFile, false)); + assertTrue(RandomAccessFileUtils.readBoolean( + TrampolineTestable.sRememberActivatedFiles.get(NON_USER_SYSTEM), false)); } @Test @@ -430,7 +454,8 @@ public class TrampolineTest { mTrampoline.setBackupServiceActive(NON_USER_SYSTEM, false); - assertFalse(RandomAccessFileUtils.readBoolean(mRememberActivatedFile, true)); + assertFalse(RandomAccessFileUtils.readBoolean( + TrampolineTestable.sRememberActivatedFiles.get(NON_USER_SYSTEM), true)); } @Test @@ -440,7 +465,8 @@ public class TrampolineTest { mTrampoline.setBackupServiceActive(NON_USER_SYSTEM, true); mTrampoline.setBackupServiceActive(NON_USER_SYSTEM, false); - assertFalse(RandomAccessFileUtils.readBoolean(mRememberActivatedFile, true)); + assertFalse(RandomAccessFileUtils.readBoolean( + TrampolineTestable.sRememberActivatedFiles.get(NON_USER_SYSTEM), true)); } @Test