@Test public void successful_install_changesSdkStatus_inProgress() { sdkService.addStatusUpdateListener(mockStatusUpdateListener); emulateMockSdkInstallationProcess(MOCK_SDK_PATH); sdkService.install(); 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 failed_install_changesSdkStatus_inProgress() throws Exception { sdkService.addStatusUpdateListener(mockStatusUpdateListener); emulateMockSdkInstallationProcess(MOCK_SDK_PATH); SdkInstaller mockInstaller = mockManagedCloudSdk.newInstaller(); when(mockInstaller.install(any(), any())).thenThrow(new IOException("IO Error")); sdkService.install(); 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)); }
@Test public void failed_install_appEngineException_changesSdkStatus_inProgress() throws Exception { sdkService.addStatusUpdateListener(mockStatusUpdateListener); emulateMockSdkInstallationProcess(MOCK_SDK_PATH); SdkComponentInstaller mockComponentInstaller = mockManagedCloudSdk.newComponentInstaller(); doThrow(new CommandExecutionException(new UnsupportedOperationException())) .when(mockComponentInstaller) .installComponent(any(), any(), any()); sdkService.install(); 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)); }
@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 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 removeListener_does_remove() { sdkService.addStatusUpdateListener(mockStatusUpdateListener); sdkService.removeStatusUpdateListener(mockStatusUpdateListener); emulateMockSdkInstallationProcess(MOCK_SDK_PATH); verifyNoMoreInteractions(mockStatusUpdateListener); }
@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 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)); }
@Test public void actual_install_notifiesListeners_onProcessingStart() { sdkService.addStatusUpdateListener(mockStatusUpdateListener); emulateMockSdkInstallationProcess(MOCK_SDK_PATH); sdkService.install(); // for real new install, 2 invocations - SDK and app-engine-java components. verify(mockStatusUpdateListener, times(2)).onSdkProcessingStarted(); }
@Test public void actual_update_notifiesListeners_onProcessingStart() { sdkService.addStatusUpdateListener(mockStatusUpdateListener); makeMockSdkInstalled(MOCK_SDK_PATH); emulateMockSdkUpdateProcess(); sdkService.update(); verify(mockStatusUpdateListener).onSdkProcessingStarted(); }