aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-ws
diff options
context:
space:
mode:
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2016-05-04 12:05:35 +0200
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2016-05-06 11:14:12 +0200
commit0205bb8857ec30aa907b1efad1355740cc91dc0f (patch)
treef9adde3220a224d2e976d829893a48a0ebad0e2d /sonar-ws
parent3833b03095b0af4e81977c7fd75d7623df4f878d (diff)
downloadsonarqube-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.java1
-rw-r--r--sonar-ws/src/test/java/org/sonarqube/ws/client/HttpConnectorTest.java44
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());