PerformInitializeTaskTest.java revision fe4ae0c5b1bc3b31adc4cc2c5a0197e29e97b6bc
179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino/* 279155590e67a30f520677d9d22e215365d595a73Bernardo Rufino * Copyright (C) 2017 The Android Open Source Project 379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino * 479155590e67a30f520677d9d22e215365d595a73Bernardo Rufino * Licensed under the Apache License, Version 2.0 (the "License"); 579155590e67a30f520677d9d22e215365d595a73Bernardo Rufino * you may not use this file except in compliance with the License. 679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino * You may obtain a copy of the License at 779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino * 879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino * http://www.apache.org/licenses/LICENSE-2.0 979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino * 1079155590e67a30f520677d9d22e215365d595a73Bernardo Rufino * Unless required by applicable law or agreed to in writing, software 1179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino * distributed under the License is distributed on an "AS IS" BASIS, 1279155590e67a30f520677d9d22e215365d595a73Bernardo Rufino * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino * See the License for the specific language governing permissions and 1479155590e67a30f520677d9d22e215365d595a73Bernardo Rufino * limitations under the License 1579155590e67a30f520677d9d22e215365d595a73Bernardo Rufino */ 1679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 1779155590e67a30f520677d9d22e215365d595a73Bernardo Rufinopackage com.android.server.backup.internal; 1879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 1979155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport static android.app.backup.BackupTransport.TRANSPORT_ERROR; 2079155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport static android.app.backup.BackupTransport.TRANSPORT_OK; 2179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 2241349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufinoimport static com.android.server.backup.testing.TransportData.backupTransport; 2341349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufinoimport static com.android.server.backup.testing.TransportData.d2dTransport; 2441349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufinoimport static com.android.server.backup.testing.TransportData.localTransport; 2541349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufinoimport static com.android.server.backup.testing.TransportTestUtils.setUpTransports; 26fa51853ae56ed74a0c854c01851cb1435453005fBernardo Rufino 2779155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport static com.google.common.truth.Truth.assertThat; 2879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 2979155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport static org.mockito.ArgumentMatchers.any; 3079155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport static org.mockito.ArgumentMatchers.anyInt; 3179155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport static org.mockito.ArgumentMatchers.anyLong; 3279155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport static org.mockito.ArgumentMatchers.eq; 3379155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport static org.mockito.Mockito.never; 3479155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport static org.mockito.Mockito.verify; 3579155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport static org.mockito.Mockito.when; 3679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 3779155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport android.app.AlarmManager; 3879155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport android.app.Application; 3979155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport android.app.PendingIntent; 4079155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport android.app.backup.IBackupObserver; 4179155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport android.os.DeadObjectException; 4279155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport android.platform.test.annotations.Presubmit; 4379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 4479155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport com.android.internal.backup.IBackupTransport; 45fe4ae0c5b1bc3b31adc4cc2c5a0197e29e97b6bcMichal Karpinskiimport com.android.server.backup.BackupManagerService; 4679155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport com.android.server.backup.TransportManager; 47fa51853ae56ed74a0c854c01851cb1435453005fBernardo Rufinoimport com.android.server.backup.testing.TransportTestUtils; 4841349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufinoimport com.android.server.backup.testing.TransportData; 4941349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufinoimport com.android.server.backup.testing.TransportTestUtils.TransportMock; 5079155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport com.android.server.backup.transport.TransportClient; 5179155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport com.android.server.testing.FrameworkRobolectricTestRunner; 5279155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport com.android.server.testing.SystemLoaderClasses; 5379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 5479155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport org.junit.Before; 5579155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport org.junit.Test; 5679155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport org.junit.runner.RunWith; 5779155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport org.mockito.Mock; 5879155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport org.mockito.MockitoAnnotations; 5979155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport org.robolectric.RuntimeEnvironment; 6079155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport org.robolectric.annotation.Config; 6179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 6279155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport java.io.File; 6341349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufinoimport java.util.Arrays; 6441349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufinoimport java.util.Iterator; 6579155590e67a30f520677d9d22e215365d595a73Bernardo Rufinoimport java.util.List; 6641349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufinoimport java.util.stream.Stream; 6779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 6879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino@RunWith(FrameworkRobolectricTestRunner.class) 6979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino@Config(manifest = Config.NONE, sdk = 26) 70fe4ae0c5b1bc3b31adc4cc2c5a0197e29e97b6bcMichal Karpinski@SystemLoaderClasses({ 71fe4ae0c5b1bc3b31adc4cc2c5a0197e29e97b6bcMichal Karpinski BackupManagerService.class, 72fe4ae0c5b1bc3b31adc4cc2c5a0197e29e97b6bcMichal Karpinski PerformInitializeTaskTest.class, 73fe4ae0c5b1bc3b31adc4cc2c5a0197e29e97b6bcMichal Karpinski TransportManager.class 74fe4ae0c5b1bc3b31adc4cc2c5a0197e29e97b6bcMichal Karpinski}) 7579155590e67a30f520677d9d22e215365d595a73Bernardo Rufino@Presubmit 7679155590e67a30f520677d9d22e215365d595a73Bernardo Rufinopublic class PerformInitializeTaskTest { 77fe4ae0c5b1bc3b31adc4cc2c5a0197e29e97b6bcMichal Karpinski @Mock private BackupManagerService mBackupManagerService; 7879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Mock private TransportManager mTransportManager; 7979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Mock private OnTaskFinishedListener mListener; 8041349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino @Mock private IBackupTransport mTransportBinder; 8179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Mock private IBackupObserver mObserver; 8279155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Mock private AlarmManager mAlarmManager; 8379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Mock private PendingIntent mRunInitIntent; 8479155590e67a30f520677d9d22e215365d595a73Bernardo Rufino private File mBaseStateDir; 8541349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino private TransportData mTransport; 8641349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino private String mTransportName; 8779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 8879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Before 8979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino public void setUp() throws Exception { 9079155590e67a30f520677d9d22e215365d595a73Bernardo Rufino MockitoAnnotations.initMocks(this); 9179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 9241349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino mTransport = backupTransport(); 9341349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino mTransportName = mTransport.transportName; 9441349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino 9579155590e67a30f520677d9d22e215365d595a73Bernardo Rufino Application context = RuntimeEnvironment.application; 9679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino mBaseStateDir = new File(context.getCacheDir(), "base_state_dir"); 9779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino assertThat(mBaseStateDir.mkdir()).isTrue(); 9879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 9979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino when(mBackupManagerService.getAlarmManager()).thenReturn(mAlarmManager); 10079155590e67a30f520677d9d22e215365d595a73Bernardo Rufino when(mBackupManagerService.getRunInitIntent()).thenReturn(mRunInitIntent); 10179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 10279155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 10379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Test 10479155590e67a30f520677d9d22e215365d595a73Bernardo Rufino public void testRun_callsTransportCorrectly() throws Exception { 10541349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino setUpTransport(mTransport); 10641349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino configureTransport(mTransportBinder, TRANSPORT_OK, TRANSPORT_OK); 10741349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); 10879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 10979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino performInitializeTask.run(); 11079155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 11141349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino verify(mTransportBinder).initializeDevice(); 11241349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino verify(mTransportBinder).finishBackup(); 11379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 11479155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 11579155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Test 11679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino public void testRun_callsBackupManagerCorrectly() throws Exception { 11741349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino setUpTransport(mTransport); 11841349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino configureTransport(mTransportBinder, TRANSPORT_OK, TRANSPORT_OK); 11941349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); 12079155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 12179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino performInitializeTask.run(); 12279155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 12379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mBackupManagerService) 12441349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino .recordInitPending(false, mTransportName, mTransport.transportDirName); 12579155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mBackupManagerService) 12641349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino .resetBackupState(eq(new File(mBaseStateDir, mTransport.transportDirName))); 12779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 12879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 12979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Test 13079155590e67a30f520677d9d22e215365d595a73Bernardo Rufino public void testRun_callsObserverAndListenerCorrectly() throws Exception { 13141349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino setUpTransport(mTransport); 13241349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino configureTransport(mTransportBinder, TRANSPORT_OK, TRANSPORT_OK); 13341349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); 13479155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 13579155590e67a30f520677d9d22e215365d595a73Bernardo Rufino performInitializeTask.run(); 13679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 13741349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino verify(mObserver).onResult(eq(mTransportName), eq(TRANSPORT_OK)); 13879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mObserver).backupFinished(eq(TRANSPORT_OK)); 13979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mListener).onFinished(any()); 14079155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 14179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 14279155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Test 14379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino public void testRun_whenInitializeDeviceFails() throws Exception { 14441349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino setUpTransport(mTransport); 14541349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino configureTransport(mTransportBinder, TRANSPORT_ERROR, 0); 14641349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); 14779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 14879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino performInitializeTask.run(); 14979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 15041349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino verify(mTransportBinder).initializeDevice(); 15141349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino verify(mTransportBinder, never()).finishBackup(); 15279155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mBackupManagerService) 15341349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino .recordInitPending(true, mTransportName, mTransport.transportDirName); 15479155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 15579155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 15679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Test 15779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino public void testRun_whenInitializeDeviceFails_callsObserverAndListenerCorrectly() 15879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino throws Exception { 15941349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino setUpTransport(mTransport); 16041349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino configureTransport(mTransportBinder, TRANSPORT_ERROR, 0); 16141349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); 16279155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 16379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino performInitializeTask.run(); 16479155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 16541349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino verify(mObserver).onResult(eq(mTransportName), eq(TRANSPORT_ERROR)); 16679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mObserver).backupFinished(eq(TRANSPORT_ERROR)); 16779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mListener).onFinished(any()); 16879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 16979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 17079155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Test 17179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino public void testRun_whenInitializeDeviceFails_schedulesAlarm() throws Exception { 17241349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino setUpTransport(mTransport); 17341349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino configureTransport(mTransportBinder, TRANSPORT_ERROR, 0); 17441349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); 17579155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 17679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino performInitializeTask.run(); 17779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 17879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mAlarmManager).set(anyInt(), anyLong(), eq(mRunInitIntent)); 17979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 18079155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 18179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Test 18279155590e67a30f520677d9d22e215365d595a73Bernardo Rufino public void testRun_whenFinishBackupFails() throws Exception { 18341349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino setUpTransport(mTransport); 18441349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino configureTransport(mTransportBinder, TRANSPORT_OK, TRANSPORT_ERROR); 18541349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); 18679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 18779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino performInitializeTask.run(); 18879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 18941349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino verify(mTransportBinder).initializeDevice(); 19041349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino verify(mTransportBinder).finishBackup(); 19179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mBackupManagerService) 19241349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino .recordInitPending(true, mTransportName, mTransport.transportDirName); 19379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 19479155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 19579155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Test 19679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino public void testRun_whenFinishBackupFails_callsObserverAndListenerCorrectly() throws Exception { 19741349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino setUpTransport(mTransport); 19841349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino configureTransport(mTransportBinder, TRANSPORT_OK, TRANSPORT_ERROR); 19941349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); 20079155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 20179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino performInitializeTask.run(); 20279155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 20341349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino verify(mObserver).onResult(eq(mTransportName), eq(TRANSPORT_ERROR)); 20479155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mObserver).backupFinished(eq(TRANSPORT_ERROR)); 20579155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mListener).onFinished(any()); 20679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 20779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 20879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Test 20979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino public void testRun_whenFinishBackupFails_schedulesAlarm() throws Exception { 21041349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino setUpTransport(mTransport); 21141349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino configureTransport(mTransportBinder, TRANSPORT_OK, TRANSPORT_ERROR); 21241349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); 21379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 21479155590e67a30f520677d9d22e215365d595a73Bernardo Rufino performInitializeTask.run(); 21579155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 21679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mAlarmManager).set(anyInt(), anyLong(), eq(mRunInitIntent)); 21779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 21879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 21979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Test 22079155590e67a30f520677d9d22e215365d595a73Bernardo Rufino public void testRun_whenOnlyOneTransportFails() throws Exception { 22141349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino TransportData transport1 = backupTransport(); 22241349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino TransportData transport2 = d2dTransport(); 22341349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino List<TransportMock> transportMocks = 22441349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino setUpTransports(mTransportManager, transport1, transport2); 22541349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino configureTransport(transportMocks.get(0).transport, TRANSPORT_ERROR, 0); 22641349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino configureTransport(transportMocks.get(1).transport, TRANSPORT_OK, TRANSPORT_OK); 22779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino PerformInitializeTask performInitializeTask = 22841349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino createPerformInitializeTask(transport1.transportName, transport2.transportName); 22979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 23079155590e67a30f520677d9d22e215365d595a73Bernardo Rufino performInitializeTask.run(); 23179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 23241349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino verify(transportMocks.get(1).transport).initializeDevice(); 23341349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino verify(mObserver).onResult(eq(transport1.transportName), eq(TRANSPORT_ERROR)); 23441349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino verify(mObserver).onResult(eq(transport2.transportName), eq(TRANSPORT_OK)); 23579155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mObserver).backupFinished(eq(TRANSPORT_ERROR)); 23679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 23779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 23879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Test 23979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino public void testRun_withMultipleTransports() throws Exception { 24041349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino List<TransportMock> transportMocks = 24141349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino setUpTransports( 24241349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino mTransportManager, backupTransport(), d2dTransport(), localTransport()); 24341349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino configureTransport(transportMocks.get(0).transport, TRANSPORT_OK, TRANSPORT_OK); 24441349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino configureTransport(transportMocks.get(1).transport, TRANSPORT_OK, TRANSPORT_OK); 24541349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino configureTransport(transportMocks.get(2).transport, TRANSPORT_OK, TRANSPORT_OK); 24641349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino String[] transportNames = 24741349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino Stream.of(new TransportData[] {backupTransport(), d2dTransport(), localTransport()}) 24841349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino .map(t -> t.transportName) 24941349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino .toArray(String[]::new); 25041349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino PerformInitializeTask performInitializeTask = createPerformInitializeTask(transportNames); 25179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 25279155590e67a30f520677d9d22e215365d595a73Bernardo Rufino performInitializeTask.run(); 25379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 25441349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino Iterator<TransportData> transportsIterator = 25541349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino Arrays.asList( 25641349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino new TransportData[] { 25741349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino backupTransport(), d2dTransport(), localTransport() 25841349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino }) 25941349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino .iterator(); 26041349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino for (TransportMock transportMock : transportMocks) { 26141349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino TransportData transport = transportsIterator.next(); 26279155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mTransportManager).getTransportClient(eq(transport.transportName), any()); 26379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mTransportManager) 26441349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino .disposeOfTransportClient(eq(transportMock.transportClient), any()); 26579155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 26679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 26779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 26879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Test 26979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino public void testRun_whenOnlyOneTransportFails_disposesAllTransports() throws Exception { 27041349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino TransportData transport1 = backupTransport(); 27141349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino TransportData transport2 = d2dTransport(); 27241349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino List<TransportMock> transportMocks = 27341349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino setUpTransports(mTransportManager, transport1, transport2); 27441349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino configureTransport(transportMocks.get(0).transport, TRANSPORT_ERROR, 0); 27541349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino configureTransport(transportMocks.get(1).transport, TRANSPORT_OK, TRANSPORT_OK); 27679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino PerformInitializeTask performInitializeTask = 27741349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino createPerformInitializeTask(transport1.transportName, transport2.transportName); 27879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 27979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino performInitializeTask.run(); 28079155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 28179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mTransportManager) 28241349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino .disposeOfTransportClient(eq(transportMocks.get(0).transportClient), any()); 28379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mTransportManager) 28441349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino .disposeOfTransportClient(eq(transportMocks.get(1).transportClient), any()); 28579155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 28679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 28779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Test 28879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino public void testRun_whenTransportNotRegistered() throws Exception { 28941349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino setUpTransports(mTransportManager, mTransport.unregistered()); 29041349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); 29179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 29279155590e67a30f520677d9d22e215365d595a73Bernardo Rufino performInitializeTask.run(); 29379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 29479155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mTransportManager, never()).disposeOfTransportClient(any(), any()); 29579155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mObserver, never()).onResult(any(), anyInt()); 29679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mObserver).backupFinished(eq(TRANSPORT_OK)); 29779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 29879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 29979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Test 30079155590e67a30f520677d9d22e215365d595a73Bernardo Rufino public void testRun_whenOnlyOneTransportNotRegistered() throws Exception { 30141349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino TransportData transport1 = backupTransport().unregistered(); 30241349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino TransportData transport2 = d2dTransport(); 30341349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino List<TransportMock> transportMocks = 30441349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino setUpTransports(mTransportManager, transport1, transport2); 30541349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino String registeredTransportName = transport2.transportName; 30641349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino IBackupTransport registeredTransport = transportMocks.get(1).transport; 30741349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino TransportClient registeredTransportClient = transportMocks.get(1).transportClient; 30879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino PerformInitializeTask performInitializeTask = 30941349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino createPerformInitializeTask(transport1.transportName, transport2.transportName); 31079155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 31179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino performInitializeTask.run(); 31279155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 31379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(registeredTransport).initializeDevice(); 31479155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mTransportManager).disposeOfTransportClient(eq(registeredTransportClient), any()); 31579155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mObserver).onResult(eq(registeredTransportName), eq(TRANSPORT_OK)); 31679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 31779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 31879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Test 31979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino public void testRun_whenTransportNotAvailable() throws Exception { 32041349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino TransportMock transportMock = setUpTransport(mTransport.unavailable()); 32141349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); 32279155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 32379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino performInitializeTask.run(); 32479155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 32541349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino verify(mTransportManager) 32641349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino .disposeOfTransportClient(eq(transportMock.transportClient), any()); 32779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mObserver).backupFinished(eq(TRANSPORT_ERROR)); 32879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mListener).onFinished(any()); 32979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 33079155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 33179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino @Test 33279155590e67a30f520677d9d22e215365d595a73Bernardo Rufino public void testRun_whenTransportThrowsDeadObjectException() throws Exception { 33341349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino TransportMock transportMock = setUpTransport(mTransport); 33441349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino IBackupTransport transport = transportMock.transport; 33541349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino TransportClient transportClient = transportMock.transportClient; 33641349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino when(transport.initializeDevice()).thenThrow(DeadObjectException.class); 33741349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); 33879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 33979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino performInitializeTask.run(); 34079155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 34179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mTransportManager).disposeOfTransportClient(eq(transportClient), any()); 34279155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mObserver).backupFinished(eq(TRANSPORT_ERROR)); 34379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino verify(mListener).onFinished(any()); 34479155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 34579155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 34679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino private PerformInitializeTask createPerformInitializeTask(String... transportNames) { 34779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino return new PerformInitializeTask( 34879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino mBackupManagerService, 34979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino mTransportManager, 35079155590e67a30f520677d9d22e215365d595a73Bernardo Rufino transportNames, 35179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino mObserver, 35279155590e67a30f520677d9d22e215365d595a73Bernardo Rufino mListener, 35379155590e67a30f520677d9d22e215365d595a73Bernardo Rufino mBaseStateDir); 35479155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 35579155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 35679155590e67a30f520677d9d22e215365d595a73Bernardo Rufino private void configureTransport( 35779155590e67a30f520677d9d22e215365d595a73Bernardo Rufino IBackupTransport transportMock, int initializeDeviceStatus, int finishBackupStatus) 35879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino throws Exception { 35979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino when(transportMock.initializeDevice()).thenReturn(initializeDeviceStatus); 36079155590e67a30f520677d9d22e215365d595a73Bernardo Rufino when(transportMock.finishBackup()).thenReturn(finishBackupStatus); 36179155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 36279155590e67a30f520677d9d22e215365d595a73Bernardo Rufino 36341349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino private TransportMock setUpTransport(TransportData transport) throws Exception { 36441349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino TransportMock transportMock = 36541349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino TransportTestUtils.setUpTransport(mTransportManager, transport); 36641349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino mTransportBinder = transportMock.transport; 36741349c02a8867b956ff48752c2d3dffc124fc0fcBernardo Rufino return transportMock; 36879155590e67a30f520677d9d22e215365d595a73Bernardo Rufino } 36979155590e67a30f520677d9d22e215365d595a73Bernardo Rufino} 370