@Test public void testValidateCloudSdk_cloudSdkNotFound() throws CloudSdkNotFoundException, CloudSdkOutOfDateException, CloudSdkVersionFileException { doThrow(CloudSdkNotFoundException.class).when(mockSdk).validateCloudSdk(); Set<CloudSdkValidationResult> results = sdkValidator.validateCloudSdk(); assertEquals(1, results.size()); assertEquals(CloudSdkValidationResult.CLOUD_SDK_NOT_FOUND, results.iterator().next()); assertFalse(sdkValidator.isValidCloudSdk()); }
@Test public void testValidateCloudSdk_versionOutOfDate() throws CloudSdkNotFoundException, CloudSdkOutOfDateException, CloudSdkVersionFileException { doThrow(CloudSdkOutOfDateException.class).when(mockSdk).validateCloudSdk(); Set<CloudSdkValidationResult> results = sdkValidator.validateCloudSdk(); assertEquals(1, results.size()); assertEquals(CloudSdkValidationResult.CLOUD_SDK_NOT_MINIMUM_VERSION, results.iterator().next()); assertFalse(sdkValidator.isValidCloudSdk()); }
@Test public void testValidateCloudSdk_versionParseError() throws CloudSdkVersionFileException { doThrow(CloudSdkVersionFileException.class).when(mockSdk).getVersion(); Set<CloudSdkValidationResult> results = sdkValidator.validateCloudSdk(); assertEquals(1, results.size()); assertEquals(CloudSdkValidationResult.CLOUD_SDK_VERSION_FILE_ERROR, results.iterator().next()); assertFalse(sdkValidator.isValidCloudSdk()); }
@Test public void testValidateCloudSdk_goodString() { Set<CloudSdkValidationResult> results = sdkValidator.validateCloudSdk("/good/path"); assertEquals(0, results.size()); assertTrue(sdkValidator.isValidCloudSdk("/good/path")); }
@Test public void testValidateCloudSdk_valid() { Set<CloudSdkValidationResult> results = sdkValidator.validateCloudSdk(); assertEquals(0, results.size()); assertTrue(sdkValidator.isValidCloudSdk()); }
@Test public void testValidateCloudSdk_specialChars() { if (System.getProperty("os.name").contains("Windows")) { Set<CloudSdkValidationResult> results = sdkValidator.validateCloudSdk(" /path"); assertEquals(1, results.size()); assertEquals(CloudSdkValidationResult.MALFORMED_PATH, results.iterator().next()); assertFalse(sdkValidator.isValidCloudSdk(" /path")); results = sdkValidator.validateCloudSdk("/path "); assertEquals(1, results.size()); assertEquals(CloudSdkValidationResult.MALFORMED_PATH, results.iterator().next()); assertFalse(sdkValidator.isValidCloudSdk("/path ")); results = sdkValidator.validateCloudSdk("/path/with/<special"); assertEquals(1, results.size()); assertEquals(CloudSdkValidationResult.MALFORMED_PATH, results.iterator().next()); assertFalse(sdkValidator.isValidCloudSdk("/path/with/<special")); } }
@Test public void testCheckSdk_nullSdk() { when(cloudSdkValidator.isValidCloudSdk(null)).thenReturn(false); panel.checkSdk(null); verify(panel, times(1)).showWarning(eq(MISSING_SDK_DIR_WARNING)); verify(panel, times(0)).hideWarning(); }
@Test public void testCheckSdk_emptySdk() { when(cloudSdkValidator.isValidCloudSdk("")).thenReturn(false); panel.checkSdk(""); verify(panel, times(1)).showWarning(eq(MISSING_SDK_DIR_WARNING)); verify(panel, times(0)).hideWarning(); }
@Test public void testCheckSdk_invalidSdk() { setValidateCloudSdkResponse(CloudSdkValidationResult.CLOUD_SDK_NOT_FOUND); when(cloudSdkValidator.isValidCloudSdk("/non/empty/path")).thenReturn(false); panel.checkSdk("/non/empty/path"); verify(panel, times(1)).showWarning(eq(INVALID_SDK_DIR_WARNING)); verify(panel, times(0)).hideWarning(); }
@Test public void testCheckSdk_validSdk() { when(cloudSdkValidator.isValidCloudSdk("/non/empty/path")).thenReturn(true); setValidateCloudSdkResponse(); panel.checkSdk("/non/empty/path"); verify(panel, times(0)).showWarning(any(String.class)); verify(panel, times(1)).hideWarning(); }
@Test public void testCheckSdk_unsupportedSdk() { setValidateCloudSdkResponse(CloudSdkValidationResult.CLOUD_SDK_NOT_MINIMUM_VERSION); when(cloudSdkValidator.isValidCloudSdk("/non/empty/path")).thenReturn(false); panel.checkSdk("/non/empty/path"); verify(panel, times(1)) .showWarning(eq(CloudSdkValidationResult.CLOUD_SDK_NOT_MINIMUM_VERSION.getMessage())); verify(panel, times(0)).hideWarning(); }
@Test public void testCheckSdk_multipleValidationResults() { setValidateCloudSdkResponse( CloudSdkValidationResult.CLOUD_SDK_NOT_MINIMUM_VERSION, CloudSdkValidationResult.CLOUD_SDK_NOT_FOUND); when(cloudSdkValidator.isValidCloudSdk("/non/empty/path")).thenReturn(false); String expectedMessage = INVALID_SDK_DIR_WARNING + "<p>" + CloudSdkValidationResult.CLOUD_SDK_NOT_MINIMUM_VERSION.getMessage() + "</p>"; panel.checkSdk("/non/empty/path"); verify(panel, times(1)).showWarning(eq(expectedMessage)); verify(panel, times(0)).hideWarning(); }
@VisibleForTesting void showCloudSdkNotification(String notificationMessage, NotificationType notificationType) { if (!CloudSdkValidator.getInstance().isValidCloudSdk()) { Notification invalidSdkWarning = new Notification( new PropertiesFileFlagReader().getFlagString("notifications.plugin.groupdisplayid"), CloudSdkMessageBundle.message("cloudsdk.notification.title"), notificationMessage, notificationType); // add a link to SDK settings for a quick fix if this is a fatal error. if (notificationType == NotificationType.ERROR) { invalidSdkWarning.addAction( new AnAction( CloudSdkMessageBundle.message("appengine.deployment.error.sdk.settings.action")) { @Override public void actionPerformed(AnActionEvent e) { ShowSettingsUtil.getInstance() .showSettingsDialog( null /* IDE-wide settings, no project needed. */, CloudSdkConfigurable.class); // expire if action has been called to avoid error hanging out forever. invalidSdkWarning.expire(); } }); } Notifications.Bus.notify(invalidSdkWarning); } }
@Override public void checkConfiguration() throws RuntimeConfigurationException { if (artifactPointer == null || artifactPointer.getArtifact() == null) { throw new RuntimeConfigurationError( AppEngineMessageBundle.message("appengine.run.server.artifact.missing")); } // do not check SDK if it supports dynamic install - the deployment runner will block itself // until installation is done. CloudSdkService cloudSdkService = CloudSdkService.getInstance(); SdkStatus sdkStatus = cloudSdkService.getStatus(); if (sdkStatus != SdkStatus.READY && !cloudSdkService.isInstallSupported()) { if (!CloudSdkValidator.getInstance().isValidCloudSdk()) { throw new RuntimeConfigurationError( AppEngineMessageBundle.message("appengine.run.server.sdk.misconfigured.panel.message")); } } if (ProjectRootManager.getInstance(commonModel.getProject()).getProjectSdk() == null) { throw new RuntimeConfigurationError( AppEngineMessageBundle.getString("appengine.run.server.nojdk")); } }