aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@sonarsource.com>2016-11-10 21:44:00 +0100
committerSimon Brandhof <simon.brandhof@sonarsource.com>2016-11-14 12:18:51 +0100
commit7910adc3515b2bcfae1ba0437a67973e1490f260 (patch)
tree102d177a9fac7385a95be194033809b1515b888e
parentd632e60a039b286296774705ce81f3a7a4949b84 (diff)
downloadsonarqube-7910adc3515b2bcfae1ba0437a67973e1490f260.tar.gz
sonarqube-7910adc3515b2bcfae1ba0437a67973e1490f260.zip
SONAR-8351 fix support of malformed URL
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/webhook/WebhookCallerImpl.java28
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/webhook/WebhookCallerImplTest.java18
2 files changed, 34 insertions, 12 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/webhook/WebhookCallerImpl.java b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/webhook/WebhookCallerImpl.java
index 58fbf1e257c..da2a9a017b9 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/webhook/WebhookCallerImpl.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/webhook/WebhookCallerImpl.java
@@ -19,7 +19,6 @@
*/
package org.sonar.server.computation.task.projectanalysis.webhook;
-import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
@@ -44,25 +43,32 @@ public class WebhookCallerImpl implements WebhookCaller {
@Override
public WebhookDelivery call(Webhook webhook, WebhookPayload payload) {
- Request.Builder request = new Request.Builder();
- request.url(webhook.getUrl());
- request.header(PROJECT_KEY_HEADER, payload.getProjectKey());
- RequestBody body = RequestBody.create(JSON, payload.toJson());
- request.post(body);
-
WebhookDelivery.Builder builder = new WebhookDelivery.Builder();
long startedAt = system.now();
builder
.setAt(startedAt)
.setPayload(payload)
.setWebhook(webhook);
- try (Response response = okHttpClient.newCall(request.build()).execute()) {
- builder.setHttpStatus(response.code());
- builder.setDurationInMs((int)(system.now() - startedAt));
- } catch (IOException e) {
+
+ try {
+ Request request = buildHttpRequest(webhook, payload);
+ try (Response response = okHttpClient.newCall(request).execute()) {
+ builder.setHttpStatus(response.code());
+ builder.setDurationInMs((int) (system.now() - startedAt));
+ }
+ } catch (Exception e) {
builder.setError(e);
}
return builder.build();
}
+ private static Request buildHttpRequest(Webhook webhook, WebhookPayload payload) {
+ Request.Builder request = new Request.Builder();
+ request.url(webhook.getUrl());
+ request.header(PROJECT_KEY_HEADER, payload.getProjectKey());
+ RequestBody body = RequestBody.create(JSON, payload.toJson());
+ request.post(body);
+ return request.build();
+ }
+
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/webhook/WebhookCallerImplTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/webhook/WebhookCallerImplTest.java
index ccaa5885ecd..ef4dd6d53ad 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/webhook/WebhookCallerImplTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/webhook/WebhookCallerImplTest.java
@@ -72,7 +72,7 @@ public class WebhookCallerImplTest {
}
@Test
- public void send_does_not_throw_exception_on_errors() throws Exception {
+ public void silently_catch_error_when_external_server_does_not_answer() throws Exception {
Webhook webhook = new Webhook(PROJECT_UUID, CE_TASK_UUID, "my-webhook", server.url("/ping").toString());
WebhookPayload payload = new WebhookPayload("P1", "{the payload}");
@@ -87,6 +87,22 @@ public class WebhookCallerImplTest {
assertThat(delivery.getPayload()).isSameAs(payload);
}
+ @Test
+ public void silently_catch_error_when_url_is_incorrect() throws Exception {
+ Webhook webhook = new Webhook(PROJECT_UUID, CE_TASK_UUID, "my-webhook", "this_is_not_an_url");
+ WebhookPayload payload = new WebhookPayload("P1", "{the payload}");
+
+ WebhookDelivery delivery = newSender().call(webhook, payload);
+
+ assertThat(delivery.getHttpStatus()).isEmpty();
+ assertThat(delivery.getDurationInMs()).isEmpty();
+ assertThat(delivery.getError().get()).isInstanceOf(IllegalArgumentException.class);
+ assertThat(delivery.getErrorMessage().get()).isEqualTo("unexpected url: this_is_not_an_url");
+ assertThat(delivery.getAt()).isEqualTo(NOW);
+ assertThat(delivery.getWebhook()).isSameAs(webhook);
+ assertThat(delivery.getPayload()).isSameAs(payload);
+ }
+
private WebhookCaller newSender() {
SonarRuntime runtime = SonarRuntimeImpl.forSonarQube(Version.parse("6.2"), SonarQubeSide.SERVER);
return new WebhookCallerImpl(system, new OkHttpClientProvider().provide(new MapSettings(), runtime));