@Test public void cancelled_update_keepsSdkStatus_available() throws Exception { makeMockSdkInstalled(MOCK_SDK_PATH); emulateMockSdkUpdateProcess(); SdkUpdater mockUpdater = mockManagedCloudSdk.newUpdater(); doThrow(new CancellationException()).when(mockUpdater).update(any(), any()); sdkService.addStatusUpdateListener(mockStatusUpdateListener); sdkService.update(); ArgumentCaptor<SdkStatus> statusCaptor = ArgumentCaptor.forClass(SdkStatus.class); verify(mockStatusUpdateListener, times(2)).onSdkStatusChange(any(), statusCaptor.capture()); assertThat(statusCaptor.getAllValues()) .isEqualTo(Arrays.asList(SdkStatus.INSTALLING, SdkStatus.READY)); }
@Test public void successful_update_changesSdkStatus_inProgress() { makeMockSdkInstalled(MOCK_SDK_PATH); emulateMockSdkUpdateProcess(); sdkService.addStatusUpdateListener(mockStatusUpdateListener); sdkService.update(); ArgumentCaptor<SdkStatus> statusCaptor = ArgumentCaptor.forClass(SdkStatus.class); verify(mockStatusUpdateListener, times(2)).onSdkStatusChange(any(), statusCaptor.capture()); assertThat(statusCaptor.getAllValues()) .isEqualTo(Arrays.asList(SdkStatus.INSTALLING, SdkStatus.READY)); }
@Test public void interrupted_update_keepsSdkStatus_available() throws Exception { makeMockSdkInstalled(MOCK_SDK_PATH); emulateMockSdkUpdateProcess(); SdkUpdater mockUpdater = mockManagedCloudSdk.newUpdater(); doThrow(new InterruptedException()).when(mockUpdater).update(any(), any()); sdkService.addStatusUpdateListener(mockStatusUpdateListener); sdkService.update(); ArgumentCaptor<SdkStatus> statusCaptor = ArgumentCaptor.forClass(SdkStatus.class); verify(mockStatusUpdateListener, times(2)).onSdkStatusChange(any(), statusCaptor.capture()); assertThat(statusCaptor.getAllValues()) .isEqualTo(Arrays.asList(SdkStatus.INSTALLING, SdkStatus.READY)); }
@Test public void upToDate_sdk_passes_valid_jobSuccessResult() throws ManagedSdkVerificationException { makeMockSdkInstalled(MOCK_SDK_PATH); when(mockManagedCloudSdk.isUpToDate()).thenReturn(true); sdkService.update(); verify(mockUiPresenter) .notifyManagedSdkJobSuccess(ManagedSdkJobType.UPDATE, ManagedSdkJobResult.UP_TO_DATE); }
CloudSdkService cloudSdkService = CloudSdkService.getInstance(); if (cloudSdkService instanceof ManagedCloudSdkService) { ((ManagedCloudSdkService) cloudSdkService).update();
@Test public void cancelled_update_showsNotification() throws Exception { makeMockSdkInstalled(MOCK_SDK_PATH); emulateMockSdkUpdateProcess(); SdkUpdater mockUpdater = mockManagedCloudSdk.newUpdater(); doThrow(new CancellationException()).when(mockUpdater).update(any(), any()); sdkService.update(); verify(mockUiPresenter).notifyManagedSdkJobCancellation(ManagedSdkJobType.UPDATE); }
@Test public void failed_update_validSdk_sdkStatus_available() throws Exception { makeMockSdkInstalled(MOCK_SDK_PATH); emulateMockSdkUpdateProcess(); SdkUpdater mockUpdater = mockManagedCloudSdk.newUpdater(); doThrow(new CommandExitException(-1, "")).when(mockUpdater).update(any(), any()); sdkService.addStatusUpdateListener(mockStatusUpdateListener); sdkService.update(); ArgumentCaptor<SdkStatus> statusCaptor = ArgumentCaptor.forClass(SdkStatus.class); verify(mockStatusUpdateListener, times(2)).onSdkStatusChange(any(), statusCaptor.capture()); assertThat(statusCaptor.getAllValues()) .isEqualTo(Arrays.asList(SdkStatus.INSTALLING, SdkStatus.READY)); }
@Test public void update_notCalled_when_sdk_upToDate() { when(mockSdkService.isUpToDate()).thenReturn(true); managedCloudSdkUpdateService.activate(); // managed SDK is UI thread only, ApplicationManager.getApplication() .invokeAndWait(() -> verify(mockSdkService, never()).update()); }
@Test public void failed_update_invalidSdk_makesSdkStatus_notAvailable() throws Exception { makeMockSdkInstalled(MOCK_SDK_PATH); emulateMockSdkUpdateProcess(); SdkUpdater mockUpdater = mockManagedCloudSdk.newUpdater(); doThrow(new CommandExitException(-1, "")).when(mockUpdater).update(any(), any()); // initially SDK is installed, then update breaks SDK when(mockManagedCloudSdk.isInstalled()).thenReturn(true).thenReturn(false); sdkService.addStatusUpdateListener(mockStatusUpdateListener); sdkService.update(); ArgumentCaptor<SdkStatus> statusCaptor = ArgumentCaptor.forClass(SdkStatus.class); verify(mockStatusUpdateListener, times(2)).onSdkStatusChange(any(), statusCaptor.capture()); assertThat(statusCaptor.getAllValues()) .isEqualTo(Arrays.asList(SdkStatus.INSTALLING, SdkStatus.NOT_AVAILABLE)); }
((ManagedCloudSdkService) afterNotificationCloudSdkService).update();
@Test public void update_called_when_sdk_notUpToDate() { when(mockSdkService.isUpToDate()).thenReturn(false); managedCloudSdkUpdateService.activate(); // managed SDK is UI thread only, ApplicationManager.getApplication().invokeAndWait(() -> verify(mockSdkService).update()); }
@Test public void successful_update_showsNotification() { makeMockSdkInstalled(MOCK_SDK_PATH); emulateMockSdkUpdateProcess(); sdkService.update(); verify(mockUiPresenter) .notifyManagedSdkJobSuccess(ManagedSdkJobType.UPDATE, ManagedSdkJobResult.PROCESSED); }
.isUpToDate(); Runnable updateProcess = () -> sdkService.update(); Thread updateProcessThread = new Thread(updateProcess, "test-update-blocking-thread"); updateProcessThread.start();
@Test public void actual_update_notifiesListeners_onProcessingStart() { sdkService.addStatusUpdateListener(mockStatusUpdateListener); makeMockSdkInstalled(MOCK_SDK_PATH); emulateMockSdkUpdateProcess(); sdkService.update(); verify(mockStatusUpdateListener).onSdkProcessingStarted(); }
@Test public void failed_update_writes_lastUpdateTime() throws Exception { makeMockSdkInstalled(MOCK_SDK_PATH); emulateMockSdkUpdateProcess(); SdkUpdater mockUpdater = mockManagedCloudSdk.newUpdater(); doThrow(new CommandExitException(-1, "")).when(mockUpdater).update(any(), any()); // supply custom clock to check update time has been properly set in settings. Clock mockClock = mock(Clock.class); when(mockUpdateService.getClock()).thenReturn(mockClock); long updateTime = 1000L; when(mockClock.millis()).thenReturn(updateTime); doCallRealMethod().when(mockUpdateService).notifySdkUpdateCompleted(); sdkService.update(); verify(mockUpdateService).notifySdkUpdateCompleted(); assertThat( CloudSdkServiceUserSettings.getInstance().getLastAutomaticUpdateTimestamp().isPresent()) .isTrue(); assertThat(CloudSdkServiceUserSettings.getInstance().getLastAutomaticUpdateTimestamp().get()) .isEqualTo(updateTime); }