Loading services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupTask.java +9 −4 Original line number Diff line number Diff line Loading @@ -708,8 +708,6 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { } else { throw TaskException.create(); } } finally { mBlankStateFile.delete(); } checkAgentResult(packageInfo, agentResult); } Loading Loading @@ -1037,8 +1035,13 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { private void cleanUpAgent(@StateTransaction int stateTransaction) { applyStateTransaction(stateTransaction); if (mBackupDataFile != null) { mBackupDataFile.delete(); } mBlankStateFile.delete(); mSavedStateFile = null; mBackupDataFile = null; mNewStateFile = null; tryCloseFileDescriptor(mSavedState, "old state"); tryCloseFileDescriptor(mBackupData, "backup data"); tryCloseFileDescriptor(mNewState, "new state"); Loading @@ -1059,7 +1062,9 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { mNewStateFile.renameTo(mSavedStateFile); break; case StateTransaction.DISCARD_NEW: if (mNewStateFile != null) { mNewStateFile.delete(); } break; case StateTransaction.DISCARD_ALL: mSavedStateFile.delete(); Loading services/robotests/src/com/android/server/backup/keyvalue/KeyValueBackupTaskTest.java +50 −0 Original line number Diff line number Diff line Loading @@ -725,6 +725,39 @@ public class KeyValueBackupTaskTest { assertBackupPendingFor(PACKAGE_1); } @Test public void testRunTask_whenSecondAgentUnavailable_commitsFirstAgentState() throws Exception { TransportMock transportMock = setUpInitializedTransport(mTransport); AgentMock agentMock = setUpAgent(PACKAGE_1); setUpAgent(PACKAGE_2.unavailable()); agentOnBackupDo( agentMock, (oldState, dataOutput, newState) -> { writeData(dataOutput, "key", "data".getBytes()); writeState(newState, "newState".getBytes()); }); KeyValueBackupTask task = createKeyValueBackupTask(transportMock, PACKAGE_1, PACKAGE_2); runTask(task); assertThat(Files.readAllBytes(getStateFile(mTransport, PACKAGE_1))).isEqualTo( "newState".getBytes()); } @Test public void testRunTask_whenNonIncrementalAndAgentUnavailable() throws Exception { TransportMock transportMock = setUpInitializedTransport(mTransport); setUpAgent(PACKAGE_1.unavailable()); KeyValueBackupTask task = createKeyValueBackupTask(transportMock, true, PACKAGE_1); runTask(task); verify(mBackupManagerService).setWorkSource(null); verify(mObserver).onResult(PACKAGE_1.packageName, ERROR_AGENT_FAILURE); verify(mObserver).backupFinished(BackupManager.SUCCESS); assertBackupPendingFor(PACKAGE_1); } @Test public void testRunTask_whenBindToAgentThrowsSecurityException() throws Exception { TransportMock transportMock = setUpInitializedTransport(mTransport); Loading @@ -742,6 +775,23 @@ public class KeyValueBackupTaskTest { assertBackupPendingFor(PACKAGE_1); } @Test public void testRunTask_whenNonIncrementalAndBindToAgentThrowsSecurityException() throws Exception { TransportMock transportMock = setUpInitializedTransport(mTransport); setUpAgent(PACKAGE_1); doThrow(SecurityException.class) .when(mBackupManagerService) .bindToAgentSynchronous(argThat(applicationInfo(PACKAGE_1)), anyInt()); KeyValueBackupTask task = createKeyValueBackupTask(transportMock, true, PACKAGE_1); runTask(task); verify(mBackupManagerService).setWorkSource(null); verify(mObserver).onResult(PACKAGE_1.packageName, ERROR_AGENT_FAILURE); verify(mObserver).backupFinished(BackupManager.SUCCESS); assertBackupPendingFor(PACKAGE_1); } @Test public void testRunTask_whenTransportGetBackupQuotaThrows_notifiesCorrectly() throws Exception { TransportMock transportMock = setUpInitializedTransport(mTransport); Loading Loading
services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupTask.java +9 −4 Original line number Diff line number Diff line Loading @@ -708,8 +708,6 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { } else { throw TaskException.create(); } } finally { mBlankStateFile.delete(); } checkAgentResult(packageInfo, agentResult); } Loading Loading @@ -1037,8 +1035,13 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { private void cleanUpAgent(@StateTransaction int stateTransaction) { applyStateTransaction(stateTransaction); if (mBackupDataFile != null) { mBackupDataFile.delete(); } mBlankStateFile.delete(); mSavedStateFile = null; mBackupDataFile = null; mNewStateFile = null; tryCloseFileDescriptor(mSavedState, "old state"); tryCloseFileDescriptor(mBackupData, "backup data"); tryCloseFileDescriptor(mNewState, "new state"); Loading @@ -1059,7 +1062,9 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { mNewStateFile.renameTo(mSavedStateFile); break; case StateTransaction.DISCARD_NEW: if (mNewStateFile != null) { mNewStateFile.delete(); } break; case StateTransaction.DISCARD_ALL: mSavedStateFile.delete(); Loading
services/robotests/src/com/android/server/backup/keyvalue/KeyValueBackupTaskTest.java +50 −0 Original line number Diff line number Diff line Loading @@ -725,6 +725,39 @@ public class KeyValueBackupTaskTest { assertBackupPendingFor(PACKAGE_1); } @Test public void testRunTask_whenSecondAgentUnavailable_commitsFirstAgentState() throws Exception { TransportMock transportMock = setUpInitializedTransport(mTransport); AgentMock agentMock = setUpAgent(PACKAGE_1); setUpAgent(PACKAGE_2.unavailable()); agentOnBackupDo( agentMock, (oldState, dataOutput, newState) -> { writeData(dataOutput, "key", "data".getBytes()); writeState(newState, "newState".getBytes()); }); KeyValueBackupTask task = createKeyValueBackupTask(transportMock, PACKAGE_1, PACKAGE_2); runTask(task); assertThat(Files.readAllBytes(getStateFile(mTransport, PACKAGE_1))).isEqualTo( "newState".getBytes()); } @Test public void testRunTask_whenNonIncrementalAndAgentUnavailable() throws Exception { TransportMock transportMock = setUpInitializedTransport(mTransport); setUpAgent(PACKAGE_1.unavailable()); KeyValueBackupTask task = createKeyValueBackupTask(transportMock, true, PACKAGE_1); runTask(task); verify(mBackupManagerService).setWorkSource(null); verify(mObserver).onResult(PACKAGE_1.packageName, ERROR_AGENT_FAILURE); verify(mObserver).backupFinished(BackupManager.SUCCESS); assertBackupPendingFor(PACKAGE_1); } @Test public void testRunTask_whenBindToAgentThrowsSecurityException() throws Exception { TransportMock transportMock = setUpInitializedTransport(mTransport); Loading @@ -742,6 +775,23 @@ public class KeyValueBackupTaskTest { assertBackupPendingFor(PACKAGE_1); } @Test public void testRunTask_whenNonIncrementalAndBindToAgentThrowsSecurityException() throws Exception { TransportMock transportMock = setUpInitializedTransport(mTransport); setUpAgent(PACKAGE_1); doThrow(SecurityException.class) .when(mBackupManagerService) .bindToAgentSynchronous(argThat(applicationInfo(PACKAGE_1)), anyInt()); KeyValueBackupTask task = createKeyValueBackupTask(transportMock, true, PACKAGE_1); runTask(task); verify(mBackupManagerService).setWorkSource(null); verify(mObserver).onResult(PACKAGE_1.packageName, ERROR_AGENT_FAILURE); verify(mObserver).backupFinished(BackupManager.SUCCESS); assertBackupPendingFor(PACKAGE_1); } @Test public void testRunTask_whenTransportGetBackupQuotaThrows_notifiesCorrectly() throws Exception { TransportMock transportMock = setUpInitializedTransport(mTransport); Loading