diff options
author | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2016-05-04 12:05:35 +0200 |
---|---|---|
committer | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2016-05-06 11:14:12 +0200 |
commit | 0205bb8857ec30aa907b1efad1355740cc91dc0f (patch) | |
tree | f9adde3220a224d2e976d829893a48a0ebad0e2d /sonar-ws | |
parent | 3833b03095b0af4e81977c7fd75d7623df4f878d (diff) | |
download | sonarqube-0205bb8857ec30aa907b1efad1355740cc91dc0f.tar.gz sonarqube-0205bb8857ec30aa907b1efad1355740cc91dc0f.zip |
SONAR-7535 ws-client throws functional exception when the server URL is malformed
Diffstat (limited to 'sonar-ws')
-rw-r--r-- | sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java | 1 | ||||
-rw-r--r-- | sonar-ws/src/test/java/org/sonarqube/ws/client/HttpConnectorTest.java | 44 |
2 files changed, 30 insertions, 15 deletions
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java index f66bcd6330c..faa1d4e19e3 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/HttpConnector.java @@ -67,6 +67,7 @@ public class HttpConnector implements WsConnector { private HttpConnector(Builder builder, JavaVersion javaVersion) { this.baseUrl = HttpUrl.parse(builder.url.endsWith("/") ? builder.url : format("%s/", builder.url)); + checkArgument(this.baseUrl!=null, "Malformed URL: '%s'", builder.url); this.userAgent = builder.userAgent; if (isNullOrEmpty(builder.login)) { diff --git a/sonar-ws/src/test/java/org/sonarqube/ws/client/HttpConnectorTest.java b/sonar-ws/src/test/java/org/sonarqube/ws/client/HttpConnectorTest.java index 767978108a7..3df29b05672 100644 --- a/sonar-ws/src/test/java/org/sonarqube/ws/client/HttpConnectorTest.java +++ b/sonar-ws/src/test/java/org/sonarqube/ws/client/HttpConnectorTest.java @@ -32,6 +32,7 @@ import org.apache.commons.lang.StringUtils; import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; import org.junit.rules.TemporaryFolder; import org.sonarqube.ws.MediaTypes; @@ -40,16 +41,21 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import static org.sonarqube.ws.client.HttpConnector.newBuilder; public class HttpConnectorTest { @Rule public TemporaryFolder temp = new TemporaryFolder(); + @Rule + public ExpectedException expectedException = ExpectedException.none(); HttpConnector.JavaVersion javaVersion = mock(HttpConnector.JavaVersion.class); MockWebServer server; String serverUrl; + HttpConnector underTest; + @Before public void setUp() throws Exception { server = new MockWebServer(); @@ -60,7 +66,7 @@ public class HttpConnectorTest { @Test public void test_default_settings() throws Exception { answerHelloWorld(); - HttpConnector underTest = HttpConnector.newBuilder().url(serverUrl).build(); + underTest = HttpConnector.newBuilder().url(serverUrl).build(); assertThat(underTest.baseUrl()).isEqualTo(serverUrl); GetRequest request = new GetRequest("api/issues/search").setMediaType(MediaTypes.PROTOBUF); WsResponse response = underTest.call(request); @@ -87,7 +93,7 @@ public class HttpConnectorTest { @Test public void use_basic_authentication() throws Exception { answerHelloWorld(); - HttpConnector underTest = HttpConnector.newBuilder() + underTest = HttpConnector.newBuilder() .url(serverUrl) .credentials("theLogin", "thePassword") .build(); @@ -102,7 +108,7 @@ public class HttpConnectorTest { @Test public void use_basic_authentication_with_null_password() throws Exception { answerHelloWorld(); - HttpConnector underTest = HttpConnector.newBuilder() + underTest = HttpConnector.newBuilder() .url(serverUrl) .credentials("theLogin", null) .build(); @@ -121,7 +127,7 @@ public class HttpConnectorTest { @Test public void use_access_token() throws Exception { answerHelloWorld(); - HttpConnector underTest = HttpConnector.newBuilder() + underTest = HttpConnector.newBuilder() .url(serverUrl) .token("theToken") .build(); @@ -136,7 +142,7 @@ public class HttpConnectorTest { @Test public void use_proxy_authentication() throws Exception { answerHelloWorld(); - HttpConnector underTest = HttpConnector.newBuilder() + underTest = HttpConnector.newBuilder() .url(serverUrl) .proxyCredentials("theProxyLogin", "theProxyPassword") .build(); @@ -150,7 +156,7 @@ public class HttpConnectorTest { @Test public void override_timeouts() { - HttpConnector underTest = HttpConnector.newBuilder() + underTest = HttpConnector.newBuilder() .url(serverUrl) .readTimeoutMilliseconds(42) .connectTimeoutMilliseconds(74) @@ -163,7 +169,7 @@ public class HttpConnectorTest { @Test public void send_user_agent() throws Exception { answerHelloWorld(); - HttpConnector underTest = HttpConnector.newBuilder() + underTest = HttpConnector.newBuilder() .url(serverUrl) .userAgent("Maven Plugin/2.3") .build(); @@ -176,7 +182,7 @@ public class HttpConnectorTest { @Test public void fail_if_unknown_implementation_of_request() { - HttpConnector underTest = HttpConnector.newBuilder().url(serverUrl).build(); + underTest = HttpConnector.newBuilder().url(serverUrl).build(); try { underTest.call(mock(WsRequest.class)); fail(); @@ -186,13 +192,21 @@ public class HttpConnectorTest { } @Test + public void fail_if_malformed_URL() { + expectedException.expect(IllegalArgumentException.class); + expectedException.expectMessage("Malformed URL: 'wrong URL'"); + + underTest = newBuilder().url("wrong URL").build(); + } + + @Test public void send_post_request() throws Exception { answerHelloWorld(); PostRequest request = new PostRequest("api/issues/search") .setParam("severity", "MAJOR") .setMediaType(MediaTypes.PROTOBUF); - HttpConnector underTest = HttpConnector.newBuilder().url(serverUrl).build(); + underTest = HttpConnector.newBuilder().url(serverUrl).build(); WsResponse response = underTest.call(request); // verify response @@ -215,7 +229,7 @@ public class HttpConnectorTest { .setPart("report", new PostRequest.Part(MediaTypes.TXT, reportFile)) .setMediaType(MediaTypes.PROTOBUF); - HttpConnector underTest = HttpConnector.newBuilder().url(serverUrl).build(); + underTest = HttpConnector.newBuilder().url(serverUrl).build(); WsResponse response = underTest.call(request); assertThat(response.hasContent()).isTrue(); @@ -233,7 +247,7 @@ public class HttpConnectorTest { public void http_error() throws Exception { server.enqueue(new MockResponse().setResponseCode(404)); PostRequest request = new PostRequest("api/issues/search"); - HttpConnector underTest = HttpConnector.newBuilder().url(serverUrl).build(); + underTest = HttpConnector.newBuilder().url(serverUrl).build(); WsResponse wsResponse = underTest.call(request); assertThat(wsResponse.code()).isEqualTo(404); @@ -242,7 +256,7 @@ public class HttpConnectorTest { @Test public void support_base_url_ending_with_slash() throws Exception { assertThat(serverUrl).endsWith("/"); - HttpConnector underTest = HttpConnector.newBuilder().url(StringUtils.removeEnd(serverUrl, "/")).build(); + underTest = HttpConnector.newBuilder().url(StringUtils.removeEnd(serverUrl, "/")).build(); GetRequest request = new GetRequest("api/issues/search"); answerHelloWorld(); @@ -255,7 +269,7 @@ public class HttpConnectorTest { public void support_base_url_with_context() { // just to be sure assertThat(serverUrl).endsWith("/"); - HttpConnector underTest = HttpConnector.newBuilder().url(serverUrl + "sonar").build(); + underTest = HttpConnector.newBuilder().url(serverUrl + "sonar").build(); GetRequest request = new GetRequest("api/issues/search"); answerHelloWorld(); @@ -269,7 +283,7 @@ public class HttpConnectorTest { @Test public void support_tls_1_2_on_java7() { when(javaVersion.isJava7()).thenReturn(true); - HttpConnector underTest = HttpConnector.newBuilder().url(serverUrl).build(javaVersion); + underTest = HttpConnector.newBuilder().url(serverUrl).build(javaVersion); assertTlsAndClearTextSpecifications(underTest); // enable TLS 1.0, 1.1 and 1.2 @@ -279,7 +293,7 @@ public class HttpConnectorTest { @Test public void support_tls_versions_of_java8() { when(javaVersion.isJava7()).thenReturn(false); - HttpConnector underTest = HttpConnector.newBuilder().url(serverUrl).build(javaVersion); + underTest = HttpConnector.newBuilder().url(serverUrl).build(javaVersion); assertTlsAndClearTextSpecifications(underTest); assertThat(underTest.okHttpClient().getSslSocketFactory()).isInstanceOf(SSLSocketFactory.getDefault().getClass()); |