/** * Handling exceptional situations. * * @param throwable * Throwable */ private void handleThrowable(Throwable throwable) { spanStore.finishSpan(new ThrowableAwareResponseAdapter(throwable.getClass().getSimpleName())); }
@Test public void spanIsNull() { spanStore.storeSpan(null); boolean result = spanStore.finishSpan(); assertThat(result, is(false)); verifyZeroInteractions(span); }
/** * Response complete event. We can finish span here. * * @throws IOException * IOException */ @ProxyMethod public void onResponseComplete() throws IOException { spanStore.finishSpan(new HttpResponseAdapter(this)); if (null != originalListener) { WHttpEventListenerWrapper.ON_RESPONSE_COMPLETE.call(originalListener); } }
/** * Failed method of FutureCallback. * * @param exception * Exception thrown when the request failed. */ @ProxyMethod(parameterTypes = { "java.lang.Exception" }) public void failed(Object exception) { try { SpanStore spanStore = spanStoreAdapter.getSpanStore(); if (spanStore != null) { spanStore.finishSpan(new ThrowableAwareResponseAdapter(exception.getClass().getSimpleName())); } } finally { if (originalCallback != null) { WFutureCallback.failed.callSafe(originalCallback, exception); } } }
@Test public void alreadyFinished() { when(span.isFinished()).thenReturn(true); boolean result = spanStore.finishSpan(); assertThat(result, is(false)); verify(span).isFinished(); verifyNoMoreInteractions(span); }
@Test public void tagsSpanIsNull() { when(adapter.getTags()).thenReturn(Collections.singletonMap("key", "value")); spanStore.storeSpan(null); boolean result = spanStore.finishSpan(adapter); assertThat(result, is(false)); verifyZeroInteractions(span); } }
@Test public void tagsAlreadyFinished() { when(adapter.getTags()).thenReturn(Collections.singletonMap("key", "value")); when(span.isFinished()).thenReturn(true); boolean result = spanStore.finishSpan(adapter); assertThat(result, is(false)); verify(span).isFinished(); verifyNoMoreInteractions(span); }
@Test public void successful() { when(span.isFinished()).thenReturn(false); boolean result = spanStore.finishSpan(); assertThat(result, is(true)); verify(span).finish(); verify(span).isFinished(); verifyNoMoreInteractions(span); }
@Test public void successful() { Object response = new Object(); when(spanStoreAdapter.getSpanStore()).thenReturn(spanStore); proxy.completed(response); verify(spanStoreAdapter).getSpanStore(); verify(spanStore).finishSpan((HttpResponseAdapter) any()); verify(originalCallback).completed(response); verifyNoMoreInteractions(spanStore, spanStoreAdapter, originalCallback); }
@Test public void tagsNullSuccessful() { when(adapter.getTags()).thenReturn(null); when(span.isFinished()).thenReturn(false); boolean result = spanStore.finishSpan(adapter); assertThat(result, is(true)); verify(span).finish(); verify(span).isFinished(); verifyNoMoreInteractions(span); }
/** * Cancelled method for FutureCallback. */ @ProxyMethod() public void cancelled() { try { SpanStore spanStore = spanStoreAdapter.getSpanStore(); if (spanStore != null) { spanStore.finishSpan(new TagsProvidingAdapter() { @Override public Map<String, String> getTags() { return ImmutableMap.of(SpanStoreAdapter.Constants.CANCEL, "true"); } }); } } finally { if (originalCallback != null) { WFutureCallback.cancelled.callSafe(originalCallback); } } }
@Test public void successful() throws Exception { Exception exception = new Exception(); when(spanStoreAdapter.getSpanStore()).thenReturn(spanStore); proxy.failed(exception); verify(spanStoreAdapter).getSpanStore(); verify(spanStore).finishSpan((TagsProvidingAdapter) any()); verify(originalCallback).failed(exception); verifyNoMoreInteractions(spanStore, spanStoreAdapter, originalCallback); }
@Test public void happyPath() throws IOException { IOException ex = new IOException(); proxy.onConnectionFailed(ex); ArgumentCaptor<TagsProvidingAdapter> captor = ArgumentCaptor.forClass(TagsProvidingAdapter.class); verify(spanStore).finishSpan(captor.capture()); TagsProvidingAdapter adapter = captor.getValue(); assertThat(adapter, is(instanceOf(ThrowableAwareResponseAdapter.class))); assertThat(adapter.getTags(), hasEntry(Tags.ERROR.getKey(), String.valueOf(true))); assertThat(adapter.getTags(), hasEntry(ExtraTags.THROWABLE_TYPE, ex.getClass().getSimpleName())); } }
@Test public void tagsSuccessful() { when(adapter.getTags()).thenReturn(Collections.singletonMap("key", "value")); when(span.isFinished()).thenReturn(false); boolean result = spanStore.finishSpan(adapter); assertThat(result, is(true)); verify(span).finish(); verify(span).isFinished(); verify(span).setTag("key", "value"); verifyNoMoreInteractions(span); }
@Test public void happyPath() throws IOException { IOException ex = new IOException(); proxy.onException(ex); ArgumentCaptor<TagsProvidingAdapter> captor = ArgumentCaptor.forClass(TagsProvidingAdapter.class); verify(spanStore).finishSpan(captor.capture()); TagsProvidingAdapter adapter = captor.getValue(); assertThat(adapter, is(instanceOf(ThrowableAwareResponseAdapter.class))); assertThat(adapter.getTags(), hasEntry(Tags.ERROR.getKey(), String.valueOf(true))); assertThat(adapter.getTags(), hasEntry(ExtraTags.THROWABLE_TYPE, ex.getClass().getSimpleName())); } }
@Test public void successful() throws Exception { when(spanStoreAdapter.getSpanStore()).thenReturn(spanStore); proxy.cancelled(); ArgumentCaptor<TagsProvidingAdapter> captor = ArgumentCaptor.forClass(TagsProvidingAdapter.class); verify(spanStoreAdapter).getSpanStore(); verify(spanStore).finishSpan(captor.capture()); verify(originalCallback).cancelled(); verifyNoMoreInteractions(spanStore, spanStoreAdapter, originalCallback); assertThat(captor.getValue().getTags(), hasKey(SpanStoreAdapter.Constants.CANCEL)); }
@Test public void happyPath() throws IOException { int status = 200; proxy.onResponseStatus("version", status, "reason"); // can not be called before status reporting proxy.onResponseComplete(); ArgumentCaptor<TagsProvidingAdapter> captor = ArgumentCaptor.forClass(TagsProvidingAdapter.class); verify(spanStore).finishSpan(captor.capture()); TagsProvidingAdapter adapter = captor.getValue(); assertThat(adapter, is(instanceOf(HttpResponseAdapter.class))); assertThat(adapter.getTags(), hasEntry(Tags.HTTP_STATUS.getKey(), String.valueOf(status))); } }
/** * Completed method for FutureCallback. * * @param response * Response of the request. */ @ProxyMethod(parameterTypes = { "java.lang.Object" }) public void completed(Object response) { try { SpanStore spanStore = spanStoreAdapter.getSpanStore(); if (spanStore != null) { spanStore.finishSpan(new HttpResponseAdapter(new ApacheHttpClientV40HttpResponse(response, CACHE))); } } finally { if (originalCallback != null) { WFutureCallback.completed.callSafe(originalCallback, response); } } }