@Test public void getErrorMessage_returns_root_cause_message_if_error() { Exception rootCause = new IOException("fail to connect"); Exception cause = new IOException("nested", rootCause); WebhookDelivery delivery = newBuilderTemplate() .setError(cause) .build(); assertThat(delivery.getErrorMessage().get()).isEqualTo("fail to connect"); }
@Test public void persist_error_stacktrace() { when(uuidFactory.create()).thenReturn(DELIVERY_UUID); WebhookDelivery delivery = newBuilderTemplate() .setError(new IOException("fail to connect")) .build(); underTest.persist(delivery); WebhookDeliveryDto dto = dbClient.webhookDeliveryDao().selectByUuid(dbSession, DELIVERY_UUID).get(); assertThat(dto.getErrorStacktrace()).contains("java.io.IOException", "fail to connect"); }
@Test public void isSuccess_returns_false_if_failed_to_send_http_request() { WebhookDelivery delivery = newBuilderTemplate() .setError(new IOException("Fail to connect")) .build(); assertThat(delivery.isSuccess()).isFalse(); }
@Override public WebhookDelivery call(Webhook webhook, WebhookPayload payload) { WebhookDelivery.Builder builder = new WebhookDelivery.Builder(); long startedAt = system.now(); builder .setAt(startedAt) .setPayload(payload) .setWebhook(webhook); try { Request request = buildHttpRequest(webhook, payload); try (Response response = execute(request)) { builder.setHttpStatus(response.code()); } } catch (Exception e) { builder.setError(e); } return builder .setDurationInMs((int) (system.now() - startedAt)) .build(); }
@Override public WebhookDelivery call(Webhook webhook, WebhookPayload payload) { WebhookDelivery.Builder builder = new WebhookDelivery.Builder(); long startedAt = system.now(); builder .setAt(startedAt) .setPayload(payload) .setWebhook(webhook); try { HttpUrl url = HttpUrl.parse(webhook.getUrl()); if (url == null) { throw new IllegalArgumentException("Webhook URL is not valid: " + webhook.getUrl()); } builder.setEffectiveUrl(HttpUrlHelper.obfuscateCredentials(webhook.getUrl(), url)); Request request = buildHttpRequest(url, payload); try (Response response = execute(request)) { builder.setHttpStatus(response.code()); } } catch (Exception e) { builder.setError(e); } return builder .setDurationInMs((int) (system.now() - startedAt)) .build(); }
@Override public WebhookDelivery call(Webhook webhook, WebhookPayload payload) { Item item = requireNonNull(deliveries.poll(), "Queue is empty"); countSent.incrementAndGet(); return new WebhookDelivery.Builder() .setAt(item.at) .setHttpStatus(item.httpCode) .setDurationInMs(item.durationMs) .setError(item.throwable) .setPayload(payload) .setWebhook(webhook) .build(); }