From b0a8c3dd3b4460b5285f402cb75c19a09e3b9a51 Mon Sep 17 00:00:00 2001 From: Sophio Japharidze Date: Fri, 31 Jan 2025 11:29:06 +0100 Subject: [PATCH] SLCORE-1110 apply PR review comments --- API_CHANGES.md | 15 +++++- .../sonarlint/core/BindingClueProvider.java | 11 ++-- .../core/SonarCloudActiveEnvironment.java | 9 +--- .../sonarlint/core/SonarCloudRegion.java | 21 +++++++- .../embedded/server/RequestHandlerUtils.java | 8 +-- .../ShowFixSuggestionRequestHandler.java | 2 +- .../server/ShowIssueRequestHandler.java | 20 +++++-- .../core/BindingClueProviderTests.java | 16 +++--- .../core/BindingSuggestionProviderTests.java | 2 +- ...elemetryServerAttributesProviderTests.java | 2 +- .../VersionSoonUnsupportedHelperTests.java | 2 +- .../ShowFixSuggestionRequestHandlerTests.java | 17 +++--- .../server/ShowIssueRequestHandlerTests.java | 53 +++++++++---------- ...SonarCloudConnectionConfigurationTest.java | 11 ++-- .../impl/ConnectionRpcServiceDelegate.java | 2 +- .../connection/OrganizationMediumTests.java | 9 ++-- .../FuzzySearchUserOrganizationsParams.java | 12 +++-- .../SonarCloudConnectionParams.java | 5 -- .../SonarCloudConnectionSuggestionDto.java | 5 -- .../test/utils/SonarLintBackendFixture.java | 2 +- 20 files changed, 128 insertions(+), 96 deletions(-) diff --git a/API_CHANGES.md b/API_CHANGES.md index 82c6597e16..46871e3d24 100644 --- a/API_CHANGES.md +++ b/API_CHANGES.md @@ -6,6 +6,8 @@ * Client can implement this method to offer user to change credentials for the connection to fix the problem * For now notification is being sent only for 403 Forbidden HTTP response code since it's corresponds to malformed/wrong token and ignores 401 Unauthorized response code since it's a user permissions problem that has to be addressed on the server * Also once notification sent, backend doesn't attempt to send any requests to server anymore until credentials changed +* Add `region` to `org.sonarsource.sonarlint.core.rpc.protocol.client.connection.SonarCloudConnectionParams` and `org.sonarsource.sonarlint.core.rpc.protocol.client.connection.SonarCloudConnectionSuggestionDto` to support multi-region SQC connection configuration + * Constructor without region parameter is removed * Removed `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient#didRaiseIssue` and associated types. See `raiseIssues` and `raiseHotspots` instead. * Removed `org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcServer#getIssueTrackingService` and associated types. Tracking is managed by the backend. @@ -24,7 +26,18 @@ * `getCleanCodeAttribute` * `getImpacts` * Use `getSeverityMode` instead. -* Add SonarCloud region parameter to `org.sonarsource.sonarlint.core.rpc.protocol.client.connection.SonarCloudConnectionParams` to support multi-region SQC connection configuration + +## New features + +* Add SonarCloud region parameter to + * `org.sonarsource.sonarlint.core.rpc.protocol.client.connection.SonarCloudConnectionParams` + * `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.common.TransientSonarCloudConnectionDto` + * `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.config.SonarCloudConnectionConfigurationDto` + * `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.org.FuzzySearchUserOrganizationsParams` + * `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.org.GetOrganizationParams` + * `org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.org.ListUserOrganizationsParams` + * This is in order to support multi-region SQC connection configuration. Constructors without region parameter are deprecated + # 10.13 diff --git a/backend/core/src/main/java/org/sonarsource/sonarlint/core/BindingClueProvider.java b/backend/core/src/main/java/org/sonarsource/sonarlint/core/BindingClueProvider.java index 49c81cd624..d22fdf096e 100644 --- a/backend/core/src/main/java/org/sonarsource/sonarlint/core/BindingClueProvider.java +++ b/backend/core/src/main/java/org/sonarsource/sonarlint/core/BindingClueProvider.java @@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Locale; import java.util.Objects; import java.util.Properties; import java.util.Set; @@ -234,7 +235,6 @@ private static class BindingProperties { private final String organization; private final String serverUrl; private final boolean isFromSharedConfiguration; - @Nullable private final SonarCloudRegion region; private BindingProperties(@Nullable String projectKey, @Nullable String organization, @Nullable String serverUrl, @Nullable String region, boolean isFromSharedConfiguration) { @@ -244,9 +244,9 @@ private BindingProperties(@Nullable String projectKey, @Nullable String organiza this.isFromSharedConfiguration = isFromSharedConfiguration; SonarCloudRegion configuredRegion; try { - configuredRegion = region != null ? SonarCloudRegion.valueOf(region) : SonarCloudRegion.EU; + configuredRegion = region != null ? SonarCloudRegion.valueOf(region.toUpperCase(Locale.ENGLISH)) : SonarCloudRegion.EU; } catch (IllegalArgumentException e) { - LOG.warn("Unknown region '{}'", region); + LOG.warn("Cannot accept '{}' as a valid SonarQube Cloud region while reading shared Connected Mode settings", region); configuredRegion = SonarCloudRegion.EU; } this.region = configuredRegion; @@ -263,7 +263,8 @@ private BindingClue computeBindingClue(String filename, BindingProperties scanne } if (scannerProps.serverUrl != null) { if (sonarCloudActiveEnvironment.isSonarQubeCloud(scannerProps.serverUrl)) { - return new SonarCloudBindingClue(scannerProps.projectKey, null, scannerProps.region, scannerProps.isFromSharedConfiguration); + var region = sonarCloudActiveEnvironment.getRegionOrThrow(scannerProps.serverUrl); + return new SonarCloudBindingClue(scannerProps.projectKey, null, SonarCloudRegion.valueOf(region.name()), scannerProps.isFromSharedConfiguration); } else { return new SonarQubeBindingClue(scannerProps.projectKey, scannerProps.serverUrl, scannerProps.isFromSharedConfiguration); } @@ -342,7 +343,7 @@ public static class SonarCloudBindingClue implements BindingClue { this.sonarProjectKey = sonarProjectKey; this.organization = organization; this.isFromSharedConfiguration = isFromSharedConfiguration; - this.region = region; + this.region = region != null ? region : SonarCloudRegion.EU; } @Override diff --git a/backend/core/src/main/java/org/sonarsource/sonarlint/core/SonarCloudActiveEnvironment.java b/backend/core/src/main/java/org/sonarsource/sonarlint/core/SonarCloudActiveEnvironment.java index 7e7c9df1a3..13c1955bd5 100644 --- a/backend/core/src/main/java/org/sonarsource/sonarlint/core/SonarCloudActiveEnvironment.java +++ b/backend/core/src/main/java/org/sonarsource/sonarlint/core/SonarCloudActiveEnvironment.java @@ -26,11 +26,6 @@ public class SonarCloudActiveEnvironment { - public static final URI PRODUCTION_EU_URI = URI.create("https://sonarcloud.io"); - public static final URI PRODUCTION_US_URI = URI.create("https://us.sonarcloud.io"); - public static final URI WS_EU_ENDPOINT_URI = URI.create("wss://events-api.sonarcloud.io/"); - public static final URI WS_US_ENDPOINT_URI = URI.create("wss://events-api.us.sonarcloud.io/"); - public static SonarCloudActiveEnvironment prod() { return new SonarCloudActiveEnvironment(); } @@ -38,8 +33,8 @@ public static SonarCloudActiveEnvironment prod() { private final Map uris; public SonarCloudActiveEnvironment() { - var euUris = new SonarQubeCloudUris(PRODUCTION_EU_URI, WS_EU_ENDPOINT_URI); - var usUris = new SonarQubeCloudUris(PRODUCTION_US_URI, WS_US_ENDPOINT_URI); + var euUris = new SonarQubeCloudUris(SonarCloudRegion.EU.getProductionUri(), SonarCloudRegion.EU.getWebSocketUri()); + var usUris = new SonarQubeCloudUris(SonarCloudRegion.US.getProductionUri(), SonarCloudRegion.US.getWebSocketUri()); this.uris = Map.of(SonarCloudRegion.EU, euUris, SonarCloudRegion.US, usUris); } diff --git a/backend/core/src/main/java/org/sonarsource/sonarlint/core/SonarCloudRegion.java b/backend/core/src/main/java/org/sonarsource/sonarlint/core/SonarCloudRegion.java index fc85db03d7..ff9ffcd083 100644 --- a/backend/core/src/main/java/org/sonarsource/sonarlint/core/SonarCloudRegion.java +++ b/backend/core/src/main/java/org/sonarsource/sonarlint/core/SonarCloudRegion.java @@ -19,6 +19,25 @@ */ package org.sonarsource.sonarlint.core; +import java.net.URI; + public enum SonarCloudRegion { - EU, US + EU("https://sonarcloud.io", "wss://events-api.sonarcloud.io/"), + US("https://us.sonarcloud.io", "wss://events-api.us.sonarcloud.io/"); + + private final URI productionUri; + private final URI webSocketUri; + + SonarCloudRegion(String productionUri, String webSocketUri) { + this.productionUri = URI.create(productionUri); + this.webSocketUri = URI.create(webSocketUri); + } + + public URI getProductionUri() { + return productionUri; + } + + public URI getWebSocketUri() { + return webSocketUri; + } } diff --git a/backend/core/src/main/java/org/sonarsource/sonarlint/core/embedded/server/RequestHandlerUtils.java b/backend/core/src/main/java/org/sonarsource/sonarlint/core/embedded/server/RequestHandlerUtils.java index 9fe446ab7f..6841ea7646 100644 --- a/backend/core/src/main/java/org/sonarsource/sonarlint/core/embedded/server/RequestHandlerUtils.java +++ b/backend/core/src/main/java/org/sonarsource/sonarlint/core/embedded/server/RequestHandlerUtils.java @@ -21,7 +21,8 @@ import org.apache.hc.core5.http.ClassicHttpRequest; import org.apache.hc.core5.http.ProtocolException; -import org.sonarsource.sonarlint.core.SonarCloudActiveEnvironment; + +import static org.apache.commons.lang3.StringUtils.removeEnd; public class RequestHandlerUtils { @@ -29,10 +30,9 @@ private RequestHandlerUtils() { // util } - public static String getServerUrlForSonarCloud(ClassicHttpRequest request, SonarCloudActiveEnvironment sonarCloudActiveEnvironment) throws ProtocolException { + public static String getServerUrlForSonarCloud(ClassicHttpRequest request) throws ProtocolException { var originUrl = request.getHeader("Origin").getValue(); // Since the 'isSonarCloud' check passed, we are sure that the region will be there - var region = sonarCloudActiveEnvironment.getRegionOrThrow(originUrl); - return sonarCloudActiveEnvironment.getUri(region).toString(); + return removeEnd(originUrl, "/"); } } diff --git a/backend/core/src/main/java/org/sonarsource/sonarlint/core/embedded/server/ShowFixSuggestionRequestHandler.java b/backend/core/src/main/java/org/sonarsource/sonarlint/core/embedded/server/ShowFixSuggestionRequestHandler.java index 6c41153338..38fd612a65 100644 --- a/backend/core/src/main/java/org/sonarsource/sonarlint/core/embedded/server/ShowFixSuggestionRequestHandler.java +++ b/backend/core/src/main/java/org/sonarsource/sonarlint/core/embedded/server/ShowFixSuggestionRequestHandler.java @@ -213,7 +213,7 @@ ShowFixSuggestionQuery extractQuery(ClassicHttpRequest request, @Nullable String boolean isSonarCloud = isSonarCloud(origin); String serverUrl; if (isSonarCloud) { - serverUrl = getServerUrlForSonarCloud(request, sonarCloudActiveEnvironment); + serverUrl = getServerUrlForSonarCloud(request); } else { serverUrl = params.get("server"); } diff --git a/backend/core/src/main/java/org/sonarsource/sonarlint/core/embedded/server/ShowIssueRequestHandler.java b/backend/core/src/main/java/org/sonarsource/sonarlint/core/embedded/server/ShowIssueRequestHandler.java index 296330bc79..25f7985024 100644 --- a/backend/core/src/main/java/org/sonarsource/sonarlint/core/embedded/server/ShowIssueRequestHandler.java +++ b/backend/core/src/main/java/org/sonarsource/sonarlint/core/embedded/server/ShowIssueRequestHandler.java @@ -41,6 +41,7 @@ import org.apache.hc.core5.net.URIBuilder; import org.sonarsource.sonarlint.core.ConnectionManager; import org.sonarsource.sonarlint.core.SonarCloudActiveEnvironment; +import org.sonarsource.sonarlint.core.SonarCloudRegion; import org.sonarsource.sonarlint.core.commons.progress.SonarLintCancelMonitor; import org.sonarsource.sonarlint.core.file.FilePathTranslation; import org.sonarsource.sonarlint.core.file.PathTranslationService; @@ -132,7 +133,8 @@ private static AssistCreatingConnectionParams createAssistServerConnectionParams var tokenName = query.getTokenName(); var tokenValue = query.getTokenValue(); return query.isSonarCloud ? - new AssistCreatingConnectionParams(new SonarCloudConnectionParams(query.getOrganizationKey(), tokenName, tokenValue)) + new AssistCreatingConnectionParams(new SonarCloudConnectionParams(query.getOrganizationKey(), tokenName, tokenValue, + org.sonarsource.sonarlint.core.rpc.protocol.common.SonarCloudRegion.valueOf(query.getRegion().name()))) : new AssistCreatingConnectionParams(new SonarQubeConnectionParams(query.getServerUrl(), tokenName, tokenValue)); } @@ -208,13 +210,15 @@ ShowIssueQuery extractQuery(ClassicHttpRequest request) throws ProtocolException } boolean isSonarCloud = isSonarCloud(request); String serverUrl; + SonarCloudRegion region = null; if (isSonarCloud) { - serverUrl = getServerUrlForSonarCloud(request, sonarCloudActiveEnvironment); + serverUrl = getServerUrlForSonarCloud(request); + region = sonarCloudActiveEnvironment.getRegionOrThrow(serverUrl); } else { serverUrl = params.get("server"); } return new ShowIssueQuery(serverUrl, params.get("project"), params.get("issue"), params.get("branch"), - params.get("pullRequest"), params.get("tokenName"), params.get("tokenValue"), params.get("organizationKey"), isSonarCloud); + params.get("pullRequest"), params.get("tokenName"), params.get("tokenValue"), params.get("organizationKey"), region, isSonarCloud); } @VisibleForTesting @@ -232,10 +236,12 @@ public static class ShowIssueQuery { private final String tokenValue; @Nullable private final String organizationKey; + @Nullable + private final SonarCloudRegion region; private final boolean isSonarCloud; public ShowIssueQuery(@Nullable String serverUrl, String projectKey, String issueKey, @Nullable String branch, @Nullable String pullRequest, - @Nullable String tokenName, @Nullable String tokenValue, @Nullable String organizationKey, boolean isSonarCloud) { + @Nullable String tokenName, @Nullable String tokenValue, @Nullable String organizationKey, @Nullable SonarCloudRegion region, boolean isSonarCloud) { this.serverUrl = serverUrl; this.projectKey = projectKey; this.issueKey = issueKey; @@ -244,6 +250,7 @@ public ShowIssueQuery(@Nullable String serverUrl, String projectKey, String issu this.tokenName = tokenName; this.tokenValue = tokenValue; this.organizationKey = organizationKey; + this.region = region != null ? region : SonarCloudRegion.EU; this.isSonarCloud = isSonarCloud; } @@ -308,6 +315,11 @@ public String getTokenName() { public String getTokenValue() { return tokenValue; } + + @Nullable + public SonarCloudRegion getRegion() { + return region; + } } } diff --git a/backend/core/src/test/java/org/sonarsource/sonarlint/core/BindingClueProviderTests.java b/backend/core/src/test/java/org/sonarsource/sonarlint/core/BindingClueProviderTests.java index 19f68f8566..7760c0fdca 100644 --- a/backend/core/src/test/java/org/sonarsource/sonarlint/core/BindingClueProviderTests.java +++ b/backend/core/src/test/java/org/sonarsource/sonarlint/core/BindingClueProviderTests.java @@ -105,8 +105,8 @@ void should_detect_sonar_scanner_for_sonarcloud_based_on_url() { mockFindFileByNamesInScope( List.of(buildClientFile("sonar-project.properties", "path/to/sonar-project.properties", "sonar.host.url=https://sonarcloud.io\nsonar.projectKey=" + PROJECT_KEY_1))); - when(connectionRepository.getConnectionById(SC_CONNECTION_ID_1)).thenReturn(new SonarCloudConnectionConfiguration(SonarCloudActiveEnvironment.PRODUCTION_EU_URI, SC_CONNECTION_ID_1, MY_ORG_1, SonarCloudRegion.EU, true)); - when(connectionRepository.getConnectionById(SC_CONNECTION_ID_2)).thenReturn(new SonarCloudConnectionConfiguration(SonarCloudActiveEnvironment.PRODUCTION_EU_URI, SC_CONNECTION_ID_2, MY_ORG_2, SonarCloudRegion.EU, true)); + when(connectionRepository.getConnectionById(SC_CONNECTION_ID_1)).thenReturn(new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), SC_CONNECTION_ID_1, MY_ORG_1, SonarCloudRegion.EU, true)); + when(connectionRepository.getConnectionById(SC_CONNECTION_ID_2)).thenReturn(new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), SC_CONNECTION_ID_2, MY_ORG_2, SonarCloudRegion.EU, true)); var bindingClueWithConnections = underTest.collectBindingCluesWithConnections(CONFIG_SCOPE_ID, Set.of(SC_CONNECTION_ID_1, SC_CONNECTION_ID_2), new SonarLintCancelMonitor()); @@ -121,8 +121,8 @@ void should_detect_sonar_scanner_for_sonarcloud_based_on_url() { void should_detect_sonar_scanner_for_sonarcloud_based_on_organization() { mockFindFileByNamesInScope(List.of(buildClientFile("sonar-project.properties", "path/to/sonar-project.properties", "sonar.organization=" + MY_ORG_2))); - when(connectionRepository.getConnectionById(SC_CONNECTION_ID_1)).thenReturn(new SonarCloudConnectionConfiguration(SonarCloudActiveEnvironment.PRODUCTION_EU_URI, SC_CONNECTION_ID_1, MY_ORG_1, SonarCloudRegion.EU, true)); - when(connectionRepository.getConnectionById(SC_CONNECTION_ID_2)).thenReturn(new SonarCloudConnectionConfiguration(SonarCloudActiveEnvironment.PRODUCTION_EU_URI, SC_CONNECTION_ID_2, MY_ORG_2, SonarCloudRegion.EU, true)); + when(connectionRepository.getConnectionById(SC_CONNECTION_ID_1)).thenReturn(new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), SC_CONNECTION_ID_1, MY_ORG_1, SonarCloudRegion.EU, true)); + when(connectionRepository.getConnectionById(SC_CONNECTION_ID_2)).thenReturn(new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), SC_CONNECTION_ID_2, MY_ORG_2, SonarCloudRegion.EU, true)); var bindingClueWithConnections = underTest.collectBindingCluesWithConnections(CONFIG_SCOPE_ID, Set.of(SC_CONNECTION_ID_1, SC_CONNECTION_ID_2), new SonarLintCancelMonitor()); @@ -137,7 +137,7 @@ void should_detect_sonar_scanner_for_sonarcloud_based_on_organization() { void should_detect_autoscan_for_sonarcloud() { mockFindFileByNamesInScope(List.of(buildClientFile(".sonarcloud.properties", "path/to/.sonarcloud.properties", "sonar.projectKey=" + PROJECT_KEY_1))); - when(connectionRepository.getConnectionById(SC_CONNECTION_ID_1)).thenReturn(new SonarCloudConnectionConfiguration(SonarCloudActiveEnvironment.PRODUCTION_EU_URI, SC_CONNECTION_ID_1, MY_ORG_1, SonarCloudRegion.EU, true)); + when(connectionRepository.getConnectionById(SC_CONNECTION_ID_1)).thenReturn(new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), SC_CONNECTION_ID_1, MY_ORG_1, SonarCloudRegion.EU, true)); when(connectionRepository.getConnectionById(SQ_CONNECTION_ID_1)).thenReturn(new SonarQubeConnectionConfiguration(SQ_CONNECTION_ID_1, "http://mysonarqube.org", true)); var bindingClueWithConnections = underTest.collectBindingCluesWithConnections(CONFIG_SCOPE_ID, Set.of(SC_CONNECTION_ID_1, SQ_CONNECTION_ID_1), new SonarLintCancelMonitor()); @@ -153,7 +153,7 @@ void should_detect_autoscan_for_sonarcloud() { void should_detect_unknown_with_project_key() { mockFindFileByNamesInScope(List.of(buildClientFile("sonar-project.properties", "path/to/sonar-project.properties", "sonar.projectKey=" + PROJECT_KEY_1))); - when(connectionRepository.getConnectionById(SC_CONNECTION_ID_1)).thenReturn(new SonarCloudConnectionConfiguration(SonarCloudActiveEnvironment.PRODUCTION_EU_URI, SC_CONNECTION_ID_1, MY_ORG_1, SonarCloudRegion.EU, true)); + when(connectionRepository.getConnectionById(SC_CONNECTION_ID_1)).thenReturn(new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), SC_CONNECTION_ID_1, MY_ORG_1, SonarCloudRegion.EU, true)); when(connectionRepository.getConnectionById(SQ_CONNECTION_ID_1)).thenReturn(new SonarQubeConnectionConfiguration(SQ_CONNECTION_ID_1, "http://mysonarqube.org", true)); var bindingClueWithConnections = underTest.collectBindingCluesWithConnections(CONFIG_SCOPE_ID, Set.of(SC_CONNECTION_ID_1, SQ_CONNECTION_ID_1), new SonarLintCancelMonitor()); @@ -169,7 +169,7 @@ void should_detect_unknown_with_project_key() { void ignore_scanner_file_without_clue() { mockFindFileByNamesInScope(List.of(buildClientFile("sonar-project.properties", "path/to/sonar-project.properties", "sonar.sources=src"))); - when(connectionRepository.getConnectionById(SC_CONNECTION_ID_1)).thenReturn(new SonarCloudConnectionConfiguration(SonarCloudActiveEnvironment.PRODUCTION_EU_URI, SC_CONNECTION_ID_1, MY_ORG_1, SonarCloudRegion.EU, true)); + when(connectionRepository.getConnectionById(SC_CONNECTION_ID_1)).thenReturn(new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), SC_CONNECTION_ID_1, MY_ORG_1, SonarCloudRegion.EU, true)); when(connectionRepository.getConnectionById(SQ_CONNECTION_ID_1)).thenReturn(new SonarQubeConnectionConfiguration(SQ_CONNECTION_ID_1, "http://mysonarqube.org", true)); var bindingClueWithConnections = underTest.collectBindingCluesWithConnections(CONFIG_SCOPE_ID, Set.of(SC_CONNECTION_ID_1, SQ_CONNECTION_ID_1), new SonarLintCancelMonitor()); @@ -181,7 +181,7 @@ void ignore_scanner_file_without_clue() { void ignore_scanner_file_invalid_content() { mockFindFileByNamesInScope(List.of(buildClientFile("sonar-project.properties", "path/to/sonar-project.properties", "\\usonar.projectKey=" + PROJECT_KEY_1))); - when(connectionRepository.getConnectionById(SC_CONNECTION_ID_1)).thenReturn(new SonarCloudConnectionConfiguration(SonarCloudActiveEnvironment.PRODUCTION_EU_URI, SC_CONNECTION_ID_1, MY_ORG_1, SonarCloudRegion.EU, true)); + when(connectionRepository.getConnectionById(SC_CONNECTION_ID_1)).thenReturn(new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), SC_CONNECTION_ID_1, MY_ORG_1, SonarCloudRegion.EU, true)); when(connectionRepository.getConnectionById(SQ_CONNECTION_ID_1)).thenReturn(new SonarQubeConnectionConfiguration(SQ_CONNECTION_ID_1, "http://mysonarqube.org", true)); var bindingClueWithConnections = underTest.collectBindingCluesWithConnections(CONFIG_SCOPE_ID, Set.of(SC_CONNECTION_ID_1, SQ_CONNECTION_ID_1), new SonarLintCancelMonitor()); diff --git a/backend/core/src/test/java/org/sonarsource/sonarlint/core/BindingSuggestionProviderTests.java b/backend/core/src/test/java/org/sonarsource/sonarlint/core/BindingSuggestionProviderTests.java index e218e53dcf..e2e0fdf187 100644 --- a/backend/core/src/test/java/org/sonarsource/sonarlint/core/BindingSuggestionProviderTests.java +++ b/backend/core/src/test/java/org/sonarsource/sonarlint/core/BindingSuggestionProviderTests.java @@ -64,7 +64,7 @@ class BindingSuggestionProviderTests { public static final String SC_1_ID = "sc1"; public static final String SQ_2_ID = "sq2"; public static final SonarQubeConnectionConfiguration SQ_1 = new SonarQubeConnectionConfiguration(SQ_1_ID, "http://mysonarqube.com", true); - public static final SonarCloudConnectionConfiguration SC_1 = new SonarCloudConnectionConfiguration(SonarCloudActiveEnvironment.PRODUCTION_EU_URI, SC_1_ID, "myorg", SonarCloudRegion.EU, true); + public static final SonarCloudConnectionConfiguration SC_1 = new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), SC_1_ID, "myorg", SonarCloudRegion.EU, true); public static final String CONFIG_SCOPE_ID_1 = "configScope1"; public static final String PROJECT_KEY_1 = "projectKey1"; public static final ServerProject SERVER_PROJECT_1 = serverProject(PROJECT_KEY_1, "Project 1"); diff --git a/backend/core/src/test/java/org/sonarsource/sonarlint/core/TelemetryServerAttributesProviderTests.java b/backend/core/src/test/java/org/sonarsource/sonarlint/core/TelemetryServerAttributesProviderTests.java index b84c961fa3..186565fc44 100644 --- a/backend/core/src/test/java/org/sonarsource/sonarlint/core/TelemetryServerAttributesProviderTests.java +++ b/backend/core/src/test/java/org/sonarsource/sonarlint/core/TelemetryServerAttributesProviderTests.java @@ -53,7 +53,7 @@ void it_should_calculate_connectedMode_usesSC_notDisabledNotifications_telemetry when(configurationRepository.getAllBoundScopes()).thenReturn(Set.of(new BoundScope(configurationScopeId, connectionId, projectKey))); var connectionConfigurationRepository = mock(ConnectionConfigurationRepository.class); - when(connectionConfigurationRepository.getConnectionById(connectionId)).thenReturn(new SonarCloudConnectionConfiguration(SonarCloudActiveEnvironment.PRODUCTION_EU_URI, connectionId, "myTestOrg", SonarCloudRegion.EU, false)); + when(connectionConfigurationRepository.getConnectionById(connectionId)).thenReturn(new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), connectionId, "myTestOrg", SonarCloudRegion.EU, false)); var underTest = new TelemetryServerAttributesProvider(configurationRepository, connectionConfigurationRepository, mock(RulesService.class), mock(RulesRepository.class), mock(NodeJsService.class)); var telemetryLiveAttributes = underTest.getTelemetryServerLiveAttributes(); diff --git a/backend/core/src/test/java/org/sonarsource/sonarlint/core/VersionSoonUnsupportedHelperTests.java b/backend/core/src/test/java/org/sonarsource/sonarlint/core/VersionSoonUnsupportedHelperTests.java index 15aa183271..c8eaed8d8d 100644 --- a/backend/core/src/test/java/org/sonarsource/sonarlint/core/VersionSoonUnsupportedHelperTests.java +++ b/backend/core/src/test/java/org/sonarsource/sonarlint/core/VersionSoonUnsupportedHelperTests.java @@ -63,7 +63,7 @@ class VersionSoonUnsupportedHelperTests { private static final String SC_CONNECTION_ID = "scConnectionId"; private static final SonarQubeConnectionConfiguration SQ_CONNECTION = new SonarQubeConnectionConfiguration(SQ_CONNECTION_ID, "https://mysonarqube.com", true); private static final SonarQubeConnectionConfiguration SQ_CONNECTION_2 = new SonarQubeConnectionConfiguration(SQ_CONNECTION_ID_2, "https://mysonarqube2.com", true); - private static final SonarCloudConnectionConfiguration SC_CONNECTION = new SonarCloudConnectionConfiguration(SonarCloudActiveEnvironment.PRODUCTION_EU_URI, SC_CONNECTION_ID, "https://sonarcloud.com", SonarCloudRegion.EU, true); + private static final SonarCloudConnectionConfiguration SC_CONNECTION = new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), SC_CONNECTION_ID, "https://sonarcloud.com", SonarCloudRegion.EU, true); private final SonarLintRpcClient client = mock(SonarLintRpcClient.class); private final ConnectionManager connectionManager = mock(ConnectionManager.class); diff --git a/backend/core/src/test/java/org/sonarsource/sonarlint/core/embedded/server/ShowFixSuggestionRequestHandlerTests.java b/backend/core/src/test/java/org/sonarsource/sonarlint/core/embedded/server/ShowFixSuggestionRequestHandlerTests.java index a4f6bc5c2d..ac05e2c7b5 100644 --- a/backend/core/src/test/java/org/sonarsource/sonarlint/core/embedded/server/ShowFixSuggestionRequestHandlerTests.java +++ b/backend/core/src/test/java/org/sonarsource/sonarlint/core/embedded/server/ShowFixSuggestionRequestHandlerTests.java @@ -71,7 +71,6 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; -import static org.sonarsource.sonarlint.core.SonarCloudActiveEnvironment.PRODUCTION_EU_URI; class ShowFixSuggestionRequestHandlerTests { @RegisterExtension @@ -109,7 +108,7 @@ void setup() { var clientFs = mock(ClientFileSystemService.class); when(clientFs.getFiles(any())).thenReturn(List.of(clientFile)); var connectionConfiguration = mock(ConnectionConfigurationRepository.class); - when(connectionConfiguration.hasConnectionWithOrigin(PRODUCTION_EU_URI.toString())).thenReturn(true); + when(connectionConfiguration.hasConnectionWithOrigin(SonarCloudRegion.EU.getProductionUri().toString())).thenReturn(true); showFixSuggestionRequestHandler = new ShowFixSuggestionRequestHandler(sonarLintRpcClient, telemetryService, initializeParams, new RequestHandlerBindingAssistant(bindingSuggestionProvider, bindingCandidatesFinder, sonarLintRpcClient, connectionConfigurationRepository, @@ -125,7 +124,7 @@ void should_trigger_telemetry() throws URISyntaxException, HttpException, IOExce "&issue=AX2VL6pgAvx3iwyNtLyr&branch=branch" + "&organizationKey=sample-organization")); when(request.getMethod()).thenReturn(Method.POST.name()); - when(request.getHeader("Origin")).thenReturn(new BasicHeader("Origin", PRODUCTION_EU_URI)); + when(request.getHeader("Origin")).thenReturn(new BasicHeader("Origin", SonarCloudRegion.EU.getProductionUri())); when(request.getEntity()).thenReturn(new StringEntity(""" { "fileEdit": { @@ -160,7 +159,7 @@ void should_extract_query_from_sc_request_without_token() throws HttpException, "?project=org.sonarsource.sonarlint.core%3Asonarlint-core-parent" + "&issue=AX2VL6pgAvx3iwyNtLyr&branch=branch" + "&organizationKey=sample-organization"); - request.addHeader("Origin", PRODUCTION_EU_URI); + request.addHeader("Origin", SonarCloudRegion.EU.getProductionUri()); request.setEntity(new StringEntity(""" { "fileEdit": { @@ -204,7 +203,7 @@ void should_extract_query_from_sc_request_with_token() throws HttpException, IOE "&issue=AX2VL6pgAvx3iwyNtLyr&tokenName=abc" + "&organizationKey=sample-organization" + "&tokenValue=123"); - request.addHeader("Origin", PRODUCTION_EU_URI); + request.addHeader("Origin", SonarCloudRegion.EU.getProductionUri()); request.setEntity(new StringEntity(""" { "fileEdit": { @@ -252,7 +251,7 @@ void should_cancel_flow_when_branch_does_not_match() throws HttpException, IOExc "?project=org.sonarsource.sonarlint.core%3Asonarlint-core-parent" + "&issue=AX2VL6pgAvx3iwyNtLyr&branch=branch" + "&organizationKey=sample-organization"); - request.addHeader("Origin", PRODUCTION_EU_URI); + request.addHeader("Origin", SonarCloudRegion.EU.getProductionUri()); request.setEntity(new StringEntity(""" { "fileEdit": { @@ -274,7 +273,7 @@ void should_cancel_flow_when_branch_does_not_match() throws HttpException, IOExc var context = mock(HttpContext.class); when(connectionConfigurationRepository.findByOrganization(any())).thenReturn(List.of( - new SonarCloudConnectionConfiguration(PRODUCTION_EU_URI, "name", "organizationKey", SonarCloudRegion.EU, false))); + new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), "name", "organizationKey", SonarCloudRegion.EU, false))); when(configurationRepository.getBoundScopesToConnectionAndSonarProject(any(), any())).thenReturn(List.of(new BoundScope("configScope", "connectionId", "projectKey"))); when(sonarLintRpcClient.matchProjectBranch(any())).thenReturn(CompletableFuture.completedFuture(new MatchProjectBranchResponse(false))); @@ -295,7 +294,7 @@ void should_find_main_branch_when_not_provided_and_not_stored() throws HttpExcep "?project=org.sonarsource.sonarlint.core%3Asonarlint-core-parent" + "&issue=AX2VL6pgAvx3iwyNtLyr" + "&organizationKey=sample-organization"); - request.addHeader("Origin", PRODUCTION_EU_URI); + request.addHeader("Origin", SonarCloudRegion.EU.getProductionUri()); request.setEntity(new StringEntity(""" { "fileEdit": { @@ -319,7 +318,7 @@ void should_find_main_branch_when_not_provided_and_not_stored() throws HttpExcep when(clientFile.getUri()).thenReturn(URI.create("file:///src/main/java/Main.java")); when(filePathTranslation.serverToIdePath(any())).thenReturn(Path.of("src/main/java/Main.java")); when(connectionConfigurationRepository.findByOrganization(any())).thenReturn(List.of( - new SonarCloudConnectionConfiguration(PRODUCTION_EU_URI, "name", "organizationKey", SonarCloudRegion.EU, false))); + new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), "name", "organizationKey", SonarCloudRegion.EU, false))); when(configurationRepository.getBoundScopesToConnectionAndSonarProject(any(), any())).thenReturn(List.of(new BoundScope("configScope", "connectionId", "projectKey"))); when(sonarLintRpcClient.matchProjectBranch(any())).thenReturn(CompletableFuture.completedFuture(new MatchProjectBranchResponse(true))); diff --git a/backend/core/src/test/java/org/sonarsource/sonarlint/core/embedded/server/ShowIssueRequestHandlerTests.java b/backend/core/src/test/java/org/sonarsource/sonarlint/core/embedded/server/ShowIssueRequestHandlerTests.java index b5abd55113..2d84e7ef5a 100644 --- a/backend/core/src/test/java/org/sonarsource/sonarlint/core/embedded/server/ShowIssueRequestHandlerTests.java +++ b/backend/core/src/test/java/org/sonarsource/sonarlint/core/embedded/server/ShowIssueRequestHandlerTests.java @@ -83,7 +83,6 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; -import static org.sonarsource.sonarlint.core.SonarCloudActiveEnvironment.PRODUCTION_EU_URI; import static testutils.TestUtils.mockServerApiProvider; class ShowIssueRequestHandlerTests { @@ -128,7 +127,7 @@ void setup() { when(storageService.binding(any())).thenReturn(sonarStorage); when(sonarStorage.branches()).thenReturn(branchesStorage); var connectionConfiguration = mock(ConnectionConfigurationRepository.class); - when(connectionConfiguration.hasConnectionWithOrigin(PRODUCTION_EU_URI.toString())).thenReturn(true); + when(connectionConfiguration.hasConnectionWithOrigin(SonarCloudRegion.EU.getProductionUri().toString())).thenReturn(true); showIssueRequestHandler = spy(new ShowIssueRequestHandler(sonarLintRpcClient, serverApiProvider, telemetryService, new RequestHandlerBindingAssistant(bindingSuggestionProvider, bindingCandidatesFinder, sonarLintRpcClient, @@ -281,7 +280,7 @@ void should_extract_query_from_sc_request_without_token() throws ProtocolExcepti "?project=org.sonarsource.sonarlint.core%3Asonarlint-core-parent" + "&issue=AX2VL6pgAvx3iwyNtLyr" + "&organizationKey=sample-organization"); - request.addHeader("Origin", SonarCloudActiveEnvironment.PRODUCTION_EU_URI); + request.addHeader("Origin", SonarCloudRegion.EU.getProductionUri()); var issueQuery = showIssueRequestHandler.extractQuery(request); assertThat(issueQuery.getServerUrl()).isEqualTo("https://sonarcloud.io"); assertThat(issueQuery.getProjectKey()).isEqualTo("org.sonarsource.sonarlint.core:sonarlint-core-parent"); @@ -299,7 +298,7 @@ void should_extract_query_from_sc_request_with_token() throws ProtocolException "&issue=AX2VL6pgAvx3iwyNtLyr&tokenName=abc" + "&organizationKey=sample-organization" + "&tokenValue=123"); - request.addHeader("Origin", SonarCloudActiveEnvironment.PRODUCTION_EU_URI); + request.addHeader("Origin", SonarCloudRegion.EU.getProductionUri()); var issueQuery = showIssueRequestHandler.extractQuery(request); assertThat(issueQuery.getServerUrl()).isEqualTo("https://sonarcloud.io"); assertThat(issueQuery.getProjectKey()).isEqualTo("org.sonarsource.sonarlint.core:sonarlint-core-parent"); @@ -313,38 +312,38 @@ void should_extract_query_from_sc_request_with_token() throws ProtocolException @Test void should_validate_issue_query_for_sq() { assertThat(new ShowIssueRequestHandler.ShowIssueQuery("serverUrl", "project", "issue", "branch", "pullRequest", null, null, null, - false).isValid()).isTrue(); - assertThat(new ShowIssueRequestHandler.ShowIssueQuery("serverUrl", "project", "issue", "", "pullRequest", null, null, null, false).isValid()).isTrue(); - assertThat(new ShowIssueRequestHandler.ShowIssueQuery("serverUrl", "project", "issue", null, "pullRequest", null, null, null, false).isValid()).isTrue(); + SonarCloudRegion.US, false).isValid()).isTrue(); + assertThat(new ShowIssueRequestHandler.ShowIssueQuery("serverUrl", "project", "issue", "", "pullRequest", null, null, null, SonarCloudRegion.EU, false).isValid()).isTrue(); + assertThat(new ShowIssueRequestHandler.ShowIssueQuery("serverUrl", "project", "issue", null, "pullRequest", null, null, null, SonarCloudRegion.EU, false).isValid()).isTrue(); - assertThat(new ShowIssueRequestHandler.ShowIssueQuery("", "project", "issue", "branch", "pullRequest", null, null, null, false).isValid()).isFalse(); - assertThat(new ShowIssueRequestHandler.ShowIssueQuery("serverUrl", "", "issue", "branch", "pullRequest", null, null, null, false).isValid()).isFalse(); - assertThat(new ShowIssueRequestHandler.ShowIssueQuery("serverUrl", "project", "", "branch", "pullRequest", null, null, null, false).isValid()).isFalse(); - assertThat(new ShowIssueRequestHandler.ShowIssueQuery("serverUrl", "project", "issue", "", "", null, null, null, false).isValid()).isFalse(); - assertThat(new ShowIssueRequestHandler.ShowIssueQuery("serverUrl", "project", "issue", "branch", null, null, null, null, false).isValid()).isTrue(); + assertThat(new ShowIssueRequestHandler.ShowIssueQuery("", "project", "issue", "branch", "pullRequest", null, null, null, SonarCloudRegion.EU, false).isValid()).isFalse(); + assertThat(new ShowIssueRequestHandler.ShowIssueQuery("serverUrl", "", "issue", "branch", "pullRequest", null, null, null, SonarCloudRegion.EU, false).isValid()).isFalse(); + assertThat(new ShowIssueRequestHandler.ShowIssueQuery("serverUrl", "project", "", "branch", "pullRequest", null, null, null, SonarCloudRegion.EU, false).isValid()).isFalse(); + assertThat(new ShowIssueRequestHandler.ShowIssueQuery("serverUrl", "project", "issue", "", "", null, null, null, SonarCloudRegion.EU, false).isValid()).isFalse(); + assertThat(new ShowIssueRequestHandler.ShowIssueQuery("serverUrl", "project", "issue", "branch", null, null, null, null, SonarCloudRegion.EU, false).isValid()).isTrue(); assertThat(new ShowIssueRequestHandler.ShowIssueQuery("serverUrl", "project", "issue", "branch", "pullRequest", "name", null, null, - false).isValid()).isFalse(); + SonarCloudRegion.US, false).isValid()).isFalse(); assertThat(new ShowIssueRequestHandler.ShowIssueQuery("serverUrl", "project", "issue", "branch", "pullRequest", null, "value", null, - false).isValid()).isFalse(); + SonarCloudRegion.US, false).isValid()).isFalse(); assertThat(new ShowIssueRequestHandler.ShowIssueQuery("serverUrl", "project", "issue", "branch", "pullRequest", "name", "", null, - false).isValid()).isFalse(); + SonarCloudRegion.US, false).isValid()).isFalse(); assertThat(new ShowIssueRequestHandler.ShowIssueQuery("serverUrl", "project", "issue", "branch", "pullRequest", "", "value", null, - false).isValid()).isFalse(); + SonarCloudRegion.US, false).isValid()).isFalse(); assertThat(new ShowIssueRequestHandler.ShowIssueQuery("serverUrl", "project", "issue", "branch", "pullRequest", "name", "value", null - , false).isValid()).isTrue(); + , SonarCloudRegion.US, false).isValid()).isTrue(); } @Test void should_validate_issue_query_for_sc() { assertThat(new ShowIssueRequestHandler.ShowIssueQuery(null, "project", "issue", "branch", "pullRequest", "name", "value", - "organizationKey", true).isValid()).isTrue(); + "organizationKey", SonarCloudRegion.US, true).isValid()).isTrue(); assertThat(new ShowIssueRequestHandler.ShowIssueQuery(null, "project", "issue", "", "pullRequest", "name", "value", "organizationKey" - , true).isValid()).isTrue(); + , SonarCloudRegion.US, true).isValid()).isTrue(); assertThat(new ShowIssueRequestHandler.ShowIssueQuery(null, "project", "issue", null, "pullRequest", "name", "value", - "organizationKey", true).isValid()).isTrue(); + "organizationKey", SonarCloudRegion.US, true).isValid()).isTrue(); - assertThat(new ShowIssueRequestHandler.ShowIssueQuery(null, "project", "issue", "branch", "pullRequest", "name", "value", null, true).isValid()).isFalse(); + assertThat(new ShowIssueRequestHandler.ShowIssueQuery(null, "project", "issue", "branch", "pullRequest", "name", "value", null, SonarCloudRegion.EU, true).isValid()).isFalse(); } @Test @@ -362,12 +361,12 @@ void should_cancel_flow_when_branch_does_not_match() throws HttpException, IOExc "&organizationKey=sample-organization" + "&tokenValue=123" + "&branch=branch"); - request.addHeader("Origin", PRODUCTION_EU_URI); + request.addHeader("Origin", SonarCloudRegion.EU.getProductionUri()); var response = mock(ClassicHttpResponse.class); var context = mock(HttpContext.class); when(connectionConfigurationRepository.findByOrganization(any())).thenReturn(List.of( - new SonarCloudConnectionConfiguration(PRODUCTION_EU_URI, "name", "organizationKey", SonarCloudRegion.EU, false))); + new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), "name", "organizationKey", SonarCloudRegion.EU, false))); when(configurationRepository.getBoundScopesToConnectionAndSonarProject(any(), any())).thenReturn(List.of(new BoundScope("configScope" , "connectionId", "projectKey"))); when(sonarLintRpcClient.matchProjectBranch(any())).thenReturn(CompletableFuture.completedFuture(new MatchProjectBranchResponse(false))); @@ -391,12 +390,12 @@ void should_find_main_branch_when_branch_is_not_provided() throws HttpException, "&issue=AX2VL6pgAvx3iwyNtLyr&tokenName=abc" + "&organizationKey=sample-organization" + "&tokenValue=123"); - request.addHeader("Origin", PRODUCTION_EU_URI); + request.addHeader("Origin", SonarCloudRegion.EU.getProductionUri()); var response = mock(ClassicHttpResponse.class); var context = mock(HttpContext.class); when(connectionConfigurationRepository.findByOrganization(any())).thenReturn(List.of( - new SonarCloudConnectionConfiguration(PRODUCTION_EU_URI, "name", "organizationKey", SonarCloudRegion.EU, false))); + new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), "name", "organizationKey", SonarCloudRegion.EU, false))); when(configurationRepository.getBoundScopesToConnectionAndSonarProject(any(), any())).thenReturn(List.of(new BoundScope("configScope" , "connectionId", "projectKey"))); when(sonarLintRpcClient.matchProjectBranch(any())).thenReturn(CompletableFuture.completedFuture(new MatchProjectBranchResponse(true))); @@ -421,12 +420,12 @@ void should_find_main_branch_when_not_provided_and_not_stored() throws HttpExcep "&issue=AX2VL6pgAvx3iwyNtLyr&tokenName=abc" + "&organizationKey=sample-organization" + "&tokenValue=123"); - request.addHeader("Origin", PRODUCTION_EU_URI); + request.addHeader("Origin", SonarCloudRegion.EU.getProductionUri()); var response = mock(ClassicHttpResponse.class); var context = mock(HttpContext.class); when(connectionConfigurationRepository.findByOrganization(any())).thenReturn(List.of( - new SonarCloudConnectionConfiguration(PRODUCTION_EU_URI, "name", "organizationKey", SonarCloudRegion.EU, false))); + new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), "name", "organizationKey", SonarCloudRegion.EU, false))); when(configurationRepository.getBoundScopesToConnectionAndSonarProject(any(), any())).thenReturn(List.of(new BoundScope("configScope" , "connectionId", "projectKey"))); when(sonarLintRpcClient.matchProjectBranch(any())).thenReturn(CompletableFuture.completedFuture(new MatchProjectBranchResponse(true))); diff --git a/backend/core/src/test/java/org/sonarsource/sonarlint/core/repository/connection/SonarCloudConnectionConfigurationTest.java b/backend/core/src/test/java/org/sonarsource/sonarlint/core/repository/connection/SonarCloudConnectionConfigurationTest.java index 263c693ae8..9a994a882f 100644 --- a/backend/core/src/test/java/org/sonarsource/sonarlint/core/repository/connection/SonarCloudConnectionConfigurationTest.java +++ b/backend/core/src/test/java/org/sonarsource/sonarlint/core/repository/connection/SonarCloudConnectionConfigurationTest.java @@ -20,7 +20,6 @@ package org.sonarsource.sonarlint.core.repository.connection; import org.junit.jupiter.api.Test; -import org.sonarsource.sonarlint.core.SonarCloudActiveEnvironment; import org.sonarsource.sonarlint.core.SonarCloudRegion; import static org.assertj.core.api.Assertions.assertThat; @@ -29,13 +28,13 @@ class SonarCloudConnectionConfigurationTest { @Test void testEqualsAndHashCode() { - var underTest = new SonarCloudConnectionConfiguration(SonarCloudActiveEnvironment.PRODUCTION_EU_URI, "id1", "org1", SonarCloudRegion.EU, true); + var underTest = new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), "id1", "org1", SonarCloudRegion.EU, true); assertThat(underTest) - .isEqualTo(new SonarCloudConnectionConfiguration(SonarCloudActiveEnvironment.PRODUCTION_EU_URI, "id1", "org1", SonarCloudRegion.EU, true)) - .isNotEqualTo(new SonarCloudConnectionConfiguration(SonarCloudActiveEnvironment.PRODUCTION_EU_URI, "id2", "org1", SonarCloudRegion.EU, true)) - .isNotEqualTo(new SonarCloudConnectionConfiguration(SonarCloudActiveEnvironment.PRODUCTION_EU_URI, "id1", "org2", SonarCloudRegion.EU, true)) + .isEqualTo(new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), "id1", "org1", SonarCloudRegion.EU, true)) + .isNotEqualTo(new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), "id2", "org1", SonarCloudRegion.EU, true)) + .isNotEqualTo(new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), "id1", "org2", SonarCloudRegion.EU, true)) .isNotEqualTo(new SonarQubeConnectionConfiguration("id1", "http://server1", true)) - .hasSameHashCodeAs(new SonarCloudConnectionConfiguration(SonarCloudActiveEnvironment.PRODUCTION_EU_URI, "id1", "org1", SonarCloudRegion.EU, true)); + .hasSameHashCodeAs(new SonarCloudConnectionConfiguration(SonarCloudRegion.EU.getProductionUri(), "id1", "org1", SonarCloudRegion.EU, true)); } } diff --git a/backend/rpc-impl/src/main/java/org/sonarsource/sonarlint/core/rpc/impl/ConnectionRpcServiceDelegate.java b/backend/rpc-impl/src/main/java/org/sonarsource/sonarlint/core/rpc/impl/ConnectionRpcServiceDelegate.java index b9a17887e7..e2ad1f0a60 100644 --- a/backend/rpc-impl/src/main/java/org/sonarsource/sonarlint/core/rpc/impl/ConnectionRpcServiceDelegate.java +++ b/backend/rpc-impl/src/main/java/org/sonarsource/sonarlint/core/rpc/impl/ConnectionRpcServiceDelegate.java @@ -94,7 +94,7 @@ public CompletableFuture getOrganization(GetOrganizatio @Override public CompletableFuture fuzzySearchUserOrganizations(FuzzySearchUserOrganizationsParams params) { return requestAsync(cancelMonitor -> new FuzzySearchUserOrganizationsResponse(getBean(OrganizationsCache.class) - .fuzzySearchOrganizations(params.getCredentials(), params.getSearchText(), SonarCloudRegion.valueOf(params.getRegion()), cancelMonitor))); + .fuzzySearchOrganizations(params.getCredentials(), params.getSearchText(), SonarCloudRegion.valueOf(params.getRegion().name()), cancelMonitor))); } @Override diff --git a/medium-tests/src/test/java/mediumtest/connection/OrganizationMediumTests.java b/medium-tests/src/test/java/mediumtest/connection/OrganizationMediumTests.java index 498c0ef2e9..295bcc857d 100644 --- a/medium-tests/src/test/java/mediumtest/connection/OrganizationMediumTests.java +++ b/medium-tests/src/test/java/mediumtest/connection/OrganizationMediumTests.java @@ -25,7 +25,6 @@ import java.util.concurrent.ExecutionException; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.extension.RegisterExtension; -import org.sonarsource.sonarlint.core.SonarCloudRegion; import org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.org.FuzzySearchUserOrganizationsParams; import org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.org.GetOrganizationParams; import org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.org.ListUserOrganizationsParams; @@ -160,11 +159,11 @@ void it_should_fuzzy_search_and_cache_organizations_on_sonarcloud(SonarLintTestH .willReturn(aResponse().withStatus(200).withResponseBody(protobufBody(Organizations.SearchWsResponse.newBuilder().build())))); var credentials = Either.forRight(new UsernamePasswordDto("user", "pwd")); - var emptySearch = backend.getConnectionService().fuzzySearchUserOrganizations(new FuzzySearchUserOrganizationsParams(credentials, "", SonarCloudRegion.EU.toString())).join(); + var emptySearch = backend.getConnectionService().fuzzySearchUserOrganizations(new FuzzySearchUserOrganizationsParams(credentials, "", org.sonarsource.sonarlint.core.rpc.protocol.common.SonarCloudRegion.EU)).join(); assertThat(emptySearch.getTopResults()) .isEmpty(); - var searchMy = backend.getConnectionService().fuzzySearchUserOrganizations(new FuzzySearchUserOrganizationsParams(credentials, "My", SonarCloudRegion.EU.toString())).join(); + var searchMy = backend.getConnectionService().fuzzySearchUserOrganizations(new FuzzySearchUserOrganizationsParams(credentials, "My", org.sonarsource.sonarlint.core.rpc.protocol.common.SonarCloudRegion.EU)).join(); assertThat(searchMy.getTopResults()) .extracting(OrganizationDto::getKey, OrganizationDto::getName) .containsExactly( @@ -172,14 +171,14 @@ void it_should_fuzzy_search_and_cache_organizations_on_sonarcloud(SonarLintTestH Assertions.tuple("org-foo1", "My Company Org Foo 1"), Assertions.tuple("org-foo2", "My Company Org Foo 2")); - var searchFooByName = backend.getConnectionService().fuzzySearchUserOrganizations(new FuzzySearchUserOrganizationsParams(credentials, "Foo", SonarCloudRegion.EU.toString())).join(); + var searchFooByName = backend.getConnectionService().fuzzySearchUserOrganizations(new FuzzySearchUserOrganizationsParams(credentials, "Foo", org.sonarsource.sonarlint.core.rpc.protocol.common.SonarCloudRegion.EU)).join(); assertThat(searchFooByName.getTopResults()) .extracting(OrganizationDto::getKey, OrganizationDto::getName) .containsExactly( Assertions.tuple("org-foo1", "My Company Org Foo 1"), Assertions.tuple("org-foo2", "My Company Org Foo 2")); - var searchBarByKey = backend.getConnectionService().fuzzySearchUserOrganizations(new FuzzySearchUserOrganizationsParams(credentials, "org-bar", SonarCloudRegion.EU.toString())).join(); + var searchBarByKey = backend.getConnectionService().fuzzySearchUserOrganizations(new FuzzySearchUserOrganizationsParams(credentials, "org-bar", org.sonarsource.sonarlint.core.rpc.protocol.common.SonarCloudRegion.EU)).join(); assertThat(searchBarByKey.getTopResults()) .extracting(OrganizationDto::getKey, OrganizationDto::getName) .containsExactly( diff --git a/rpc-protocol/src/main/java/org/sonarsource/sonarlint/core/rpc/protocol/backend/connection/org/FuzzySearchUserOrganizationsParams.java b/rpc-protocol/src/main/java/org/sonarsource/sonarlint/core/rpc/protocol/backend/connection/org/FuzzySearchUserOrganizationsParams.java index df5f2075dd..b39863e66e 100644 --- a/rpc-protocol/src/main/java/org/sonarsource/sonarlint/core/rpc/protocol/backend/connection/org/FuzzySearchUserOrganizationsParams.java +++ b/rpc-protocol/src/main/java/org/sonarsource/sonarlint/core/rpc/protocol/backend/connection/org/FuzzySearchUserOrganizationsParams.java @@ -22,6 +22,7 @@ import com.google.gson.annotations.JsonAdapter; import org.sonarsource.sonarlint.core.rpc.protocol.adapter.EitherCredentialsAdapterFactory; import org.sonarsource.sonarlint.core.rpc.protocol.common.Either; +import org.sonarsource.sonarlint.core.rpc.protocol.common.SonarCloudRegion; import org.sonarsource.sonarlint.core.rpc.protocol.common.TokenDto; import org.sonarsource.sonarlint.core.rpc.protocol.common.UsernamePasswordDto; @@ -30,9 +31,14 @@ public class FuzzySearchUserOrganizationsParams { @JsonAdapter(EitherCredentialsAdapterFactory.class) private final Either credentials; private final String searchText; - private final String region; + private final SonarCloudRegion region; - public FuzzySearchUserOrganizationsParams(Either credentials, String searchText, String region) { + @Deprecated(since = "10.14") + public FuzzySearchUserOrganizationsParams(Either credentials, String searchText) { + this(credentials, searchText, SonarCloudRegion.EU); + } + + public FuzzySearchUserOrganizationsParams(Either credentials, String searchText, SonarCloudRegion region) { this.credentials = credentials; this.searchText = searchText; this.region = region; @@ -46,7 +52,7 @@ public String getSearchText() { return searchText; } - public String getRegion() { + public SonarCloudRegion getRegion() { return region; } } diff --git a/rpc-protocol/src/main/java/org/sonarsource/sonarlint/core/rpc/protocol/client/connection/SonarCloudConnectionParams.java b/rpc-protocol/src/main/java/org/sonarsource/sonarlint/core/rpc/protocol/client/connection/SonarCloudConnectionParams.java index fd39834122..ceaeb02948 100644 --- a/rpc-protocol/src/main/java/org/sonarsource/sonarlint/core/rpc/protocol/client/connection/SonarCloudConnectionParams.java +++ b/rpc-protocol/src/main/java/org/sonarsource/sonarlint/core/rpc/protocol/client/connection/SonarCloudConnectionParams.java @@ -29,11 +29,6 @@ public class SonarCloudConnectionParams { private final String tokenValue; private final SonarCloudRegion region; - @Deprecated(since = "10.14") - public SonarCloudConnectionParams(String organizationKey, @Nullable String tokenName, @Nullable String tokenValue) { - this(organizationKey, tokenName, tokenValue, SonarCloudRegion.EU); - } - public SonarCloudConnectionParams(String organizationKey, @Nullable String tokenName, @Nullable String tokenValue, SonarCloudRegion region) { this.organizationKey = organizationKey; this.tokenName = tokenName; diff --git a/rpc-protocol/src/main/java/org/sonarsource/sonarlint/core/rpc/protocol/client/connection/SonarCloudConnectionSuggestionDto.java b/rpc-protocol/src/main/java/org/sonarsource/sonarlint/core/rpc/protocol/client/connection/SonarCloudConnectionSuggestionDto.java index 4728cec002..ddf56aabfe 100644 --- a/rpc-protocol/src/main/java/org/sonarsource/sonarlint/core/rpc/protocol/client/connection/SonarCloudConnectionSuggestionDto.java +++ b/rpc-protocol/src/main/java/org/sonarsource/sonarlint/core/rpc/protocol/client/connection/SonarCloudConnectionSuggestionDto.java @@ -27,11 +27,6 @@ public class SonarCloudConnectionSuggestionDto { private final String projectKey; private final SonarCloudRegion region; - @Deprecated(since = "10.14") - public SonarCloudConnectionSuggestionDto(String organization, String projectKey) { - this(organization, projectKey, SonarCloudRegion.EU); - } - public SonarCloudConnectionSuggestionDto(String organization, String projectKey, SonarCloudRegion region) { this.organization = organization; this.projectKey = projectKey; diff --git a/test-utils/src/main/java/org/sonarsource/sonarlint/core/test/utils/SonarLintBackendFixture.java b/test-utils/src/main/java/org/sonarsource/sonarlint/core/test/utils/SonarLintBackendFixture.java index 911e451479..909ddd9788 100644 --- a/test-utils/src/main/java/org/sonarsource/sonarlint/core/test/utils/SonarLintBackendFixture.java +++ b/test-utils/src/main/java/org/sonarsource/sonarlint/core/test/utils/SonarLintBackendFixture.java @@ -498,7 +498,7 @@ public SonarLintTestRpcServer start(SonarLintRpcClientDelegate client) { SonarCloudAlternativeEnvironmentDto sonarCloudAlternativeEnvironment = null; if (sonarCloudUrl != null || sonarCloudWebSocketsUrl != null) { sonarCloudAlternativeEnvironment = new SonarCloudAlternativeEnvironmentDto( - sonarCloudUrl == null ? SonarCloudActiveEnvironment.PRODUCTION_EU_URI : URI.create(sonarCloudUrl), + sonarCloudUrl == null ? SonarCloudRegion.EU.getProductionUri() : URI.create(sonarCloudUrl), sonarCloudWebSocketsUrl == null ? SonarCloudActiveEnvironment.prod().getWebSocketsEndpointUri(SonarCloudRegion.EU) : URI.create(sonarCloudWebSocketsUrl)); }