/** * {@inheritDoc} */ @Override public Map<String, String> getTags() { // first exception tags Map<String, String> tags = new HashMap<String, String>(2); tags.put(Tags.ERROR.getKey(), String.valueOf(true)); if (StringUtils.isNotEmpty(throwableType)) { tags.put(ExtraTags.THROWABLE_TYPE, throwableType); } // then delegate ones if enabled if (null != delegateAdapter) { tags.putAll(delegateAdapter.getTags()); } return tags; }
/** * Handles the {@link ResponseAdapter}. This method should be called before sending the response * on the server. * * @param span * Span to finish. * @param responseAdapter * {@link ResponseAdapter} providing necessary information. Can not be * <code>null</code>. * @return Finished span (same as given parameter instance). */ public SpanImpl handleResponse(SpanImpl span, ResponseAdapter responseAdapter) { if (null == span) { return null; } // handle tags Map<String, String> tags = responseAdapter.getTags(); if (MapUtils.isNotEmpty(tags)) { for (Map.Entry<String, String> e : tags.entrySet()) { span.setTag(e.getKey(), e.getValue()); } } // finish and return span.finish(); return span; } }
/** * Handles the {@link ResponseAdapter}. This method should be called when the response on the * client is received. * * @param span * Span to finish. * @param responseAdapter * {@link ResponseAdapter} providing necessary information. * @return Finished span (same as given parameter instance). */ public SpanImpl handleResponse(SpanImpl span, ResponseAdapter responseAdapter) { if (null == span) { return null; } // handle tags Map<String, String> tags = responseAdapter.getTags(); if (MapUtils.isNotEmpty(tags)) { for (Map.Entry<String, String> e : tags.entrySet()) { span.setTag(e.getKey(), e.getValue()); } } // finish and return span.finish(); return span; }
@Test public void empty() { ResponseAdapter adapter = sensor.getClientResponseAdapter(object, null, result, false, rsc); Map<String, String> tags = adapter.getTags(); assertThat(tags.size(), is(0)); verifyZeroInteractions(object, result, rsc); }
@Test public void empty() { ResponseAdapter adapter = sensor.getServerResponseAdapter(object, null, result, false, rsc); assertThat(adapter.getTags().size(), is(0)); verifyZeroInteractions(object, result, rsc); }
@Test public void empty() { ResponseAdapter adapter = sensor.getServerResponseAdapter(object, null, result, false, rsc); Map<String, String> tags = adapter.getTags(); assertThat(tags.size(), is(0)); verifyZeroInteractions(object, result, rsc); }
@Test public void statusNullStatusLine() { when(httpResponse.getStatusLine()).thenReturn(null); ResponseAdapter adapter = sensor.getClientResponseAdapter(object, null, httpResponse, false, rsc); Map<String, String> tags = adapter.getTags(); assertThat(tags.size(), is(0)); verifyZeroInteractions(object, rsc); }
@Test public void statusIOException() throws IOException { when(urlConnection.getResponseCode()).thenThrow(new IOException()); when(rsc.getTargetMethodName()).thenReturn("getInputStream"); ResponseAdapter adapter = sensor.getClientResponseAdapter(urlConnection, null, result, false, rsc); Map<String, String> tags = adapter.getTags(); assertThat(tags.size(), is(0)); verify(rsc).getTargetMethodName(); verifyNoMoreInteractions(rsc); verifyZeroInteractions(result); }
@Test public void tagsNull() { when(responseAdapter.getTags()).thenReturn(null); interceptor.handleResponse(span, responseAdapter); verify(span).finish(); verifyNoMoreInteractions(span); verifyZeroInteractions(tracer); }
@Test public void tagsNull() { when(responseAdapter.getTags()).thenReturn(null); interceptor.handleResponse(span, responseAdapter); verify(span).finish(); verifyNoMoreInteractions(span); verifyZeroInteractions(tracer); }
@Test public void exception() { ResponseAdapter adapter = sensor.getClientResponseAdapter(httpRequest, null, new NullPointerException(), true, rsc); Map<String, String> tags = adapter.getTags(); assertThat(tags.size(), is(2)); assertThat(tags, hasEntry(Tags.ERROR.getKey(), String.valueOf(true))); assertThat(tags, hasEntry(ExtraTags.THROWABLE_TYPE, NullPointerException.class.getSimpleName())); verifyZeroInteractions(httpRequest, rsc); }
@Test public void status() { int status = 200; when(httpResponse.getStatus()).thenReturn(status); ResponseAdapter adapter = sensor.getServerResponseAdapter(object, new Object[] { httpRequest, httpResponse }, null, false, rsc); Map<String, String> tags = adapter.getTags(); assertThat(tags.size(), is(1)); assertThat(tags, hasEntry(Tags.HTTP_STATUS.getKey(), String.valueOf(status))); verifyZeroInteractions(object, rsc); }
@Test public void exception() { ResponseAdapter adapter = sensor.getServerResponseAdapter(object, null, new NullPointerException(), true, rsc); Map<String, String> tags = adapter.getTags(); assertThat(tags.size(), is(2)); assertThat(tags, hasEntry(Tags.ERROR.getKey(), String.valueOf(true))); assertThat(tags, hasEntry(ExtraTags.THROWABLE_TYPE, NullPointerException.class.getSimpleName())); verifyZeroInteractions(object, rsc); }
@Test public void status() { int status = 200; when(httpResponse.getRawStatusCode()).thenReturn(status); ResponseAdapter adapter = sensor.getClientResponseAdapter(httpRequest, null, httpResponse, false, rsc); Map<String, String> tags = adapter.getTags(); assertThat(tags.size(), is(1)); assertThat(tags, hasEntry(Tags.HTTP_STATUS.getKey(), String.valueOf(status))); verifyZeroInteractions(httpRequest); verifyNoMoreInteractions(rsc); }
@Test public void exception() { ResponseAdapter adapter = sensor.getServerResponseAdapter(object, null, new NullPointerException(), true, rsc); Map<String, String> tags = adapter.getTags(); assertThat(tags.size(), is(2)); assertThat(tags, hasEntry(Tags.ERROR.getKey(), String.valueOf(true))); assertThat(tags, hasEntry(ExtraTags.THROWABLE_TYPE, NullPointerException.class.getSimpleName())); verifyZeroInteractions(object, rsc); }
@Test public void exception() { ResponseAdapter adapter = sensor.getClientResponseAdapter(object, null, new NullPointerException(), true, rsc); Map<String, String> tags = adapter.getTags(); assertThat(tags.size(), is(2)); assertThat(tags, hasEntry(Tags.ERROR.getKey(), String.valueOf(true))); assertThat(tags, hasEntry(ExtraTags.THROWABLE_TYPE, NullPointerException.class.getSimpleName())); verifyZeroInteractions(object, rsc); }
@Test public void exception() { ResponseAdapter adapter = sensor.getClientResponseAdapter(object, null, new NullPointerException(), true, rsc); Map<String, String> tags = adapter.getTags(); assertThat(tags.size(), is(2)); assertThat(tags, hasEntry(Tags.ERROR.getKey(), String.valueOf(true))); assertThat(tags, hasEntry(ExtraTags.THROWABLE_TYPE, NullPointerException.class.getSimpleName())); verifyZeroInteractions(object, rsc); }
@Test public void status() throws IOException { int status = 200; when(urlConnection.getResponseCode()).thenReturn(status); when(rsc.getTargetMethodName()).thenReturn("getInputStream"); ResponseAdapter adapter = sensor.getClientResponseAdapter(urlConnection, null, result, false, rsc); Map<String, String> tags = adapter.getTags(); assertThat(tags.size(), is(1)); assertThat(tags, hasEntry(Tags.HTTP_STATUS.getKey(), String.valueOf(status))); verify(rsc).getTargetMethodName(); verifyNoMoreInteractions(rsc); verifyZeroInteractions(result); }
@Test public void exception() { int status = 200; when(httpResponse.getStatus()).thenReturn(status); ResponseAdapter adapter = sensor.getServerResponseAdapter(object, new Object[] { httpRequest, httpResponse }, new NullPointerException(), true, rsc); Map<String, String> tags = adapter.getTags(); assertThat(tags.size(), is(3)); assertThat(tags, hasEntry(Tags.ERROR.getKey(), String.valueOf(true))); assertThat(tags, hasEntry(ExtraTags.THROWABLE_TYPE, NullPointerException.class.getSimpleName())); assertThat(tags, hasEntry(Tags.HTTP_STATUS.getKey(), String.valueOf(status))); verifyZeroInteractions(object, rsc); }
@Test public void happyPath() { when(responseAdapter.getTags()).thenReturn(Collections.<String, String> singletonMap(Tags.HTTP_STATUS.getKey(), "200")); SpanImpl result = interceptor.handleResponse(span, responseAdapter); assertThat(result, is(span)); verify(span).setTag(Tags.HTTP_STATUS.getKey(), "200"); verify(span).finish(); verifyNoMoreInteractions(span); verifyZeroInteractions(tracer); }