@BeforeMethod public void setup() { when(requestAdapter.getFormat()).thenReturn(Format.Builtin.TEXT_MAP); when(requestAdapter.getCarrier()).thenReturn(carrier); when(tracer.buildSpan(anyString(), anyString(), anyBoolean())).thenReturn(spanBuilder); when(spanBuilder.start()).thenReturn(span); when(span.context()).thenReturn(context); }
if (!requestAdapter.startClientSpan()) { return null; String referenceType = requestAdapter.getReferenceType(); SpanBuilderImpl builder = tracer.buildSpan(null, referenceType, true); if (null != requestAdapter.getPropagationType()) { builder.withTag(ExtraTags.PROPAGATION_TYPE, requestAdapter.getPropagationType().toString()); Map<String, String> tags = requestAdapter.getTags(); if (MapUtils.isNotEmpty(tags)) { for (Map.Entry<String, String> e : tags.entrySet()) {
@Test public void properties() { ClientRequestAdapter<TextMap> adapter = sensor.getClientRequestAdapter(httpRequest, null, rsc); assertThat(adapter.getPropagationType(), is(PropagationType.HTTP)); assertThat(adapter.getReferenceType(), is(References.CHILD_OF)); assertThat(adapter.getFormat(), is(Format.Builtin.HTTP_HEADERS)); verifyNoMoreInteractions(rsc); }
@Test public void propagationNull() { when(requestAdapter.startClientSpan()).thenReturn(true); when(requestAdapter.getPropagationType()).thenReturn(null); when(requestAdapter.getReferenceType()).thenReturn(References.CHILD_OF); SpanImpl result = interceptor.handleRequest(requestAdapter); assertThat(result, is(span)); verify(tracer).buildSpan(null, References.CHILD_OF, true); verify(tracer).inject(context, Format.Builtin.TEXT_MAP, carrier); verify(spanBuilder).doNotReport(); verify(spanBuilder).withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT); verify(spanBuilder).start(); verify(span).context(); verifyNoMoreInteractions(tracer, spanBuilder, span); verifyZeroInteractions(context); } }
@Test public void urlNull() { when(urlConnection.getURL()).thenReturn(null); ClientRequestAdapter<TextMap> adapter = sensor.getClientRequestAdapter(urlConnection, null, rsc); Map<String, String> tags = adapter.getTags(); assertThat(tags.size(), is(0)); verifyZeroInteractions(rsc); }
@Test public void spanShouldNotStart() { when(requestAdapter.startClientSpan()).thenReturn(false); SpanImpl result = interceptor.handleRequest(requestAdapter); assertThat(result, is(nullValue())); }
@Test public void baggageInjection() { String key = "key"; String value = "value"; ClientRequestAdapter<TextMap> adapter = sensor.getClientRequestAdapter(urlConnection, null, rsc); adapter.getCarrier().put(key, value); verify(urlConnection).setRequestProperty(key, value); verifyZeroInteractions(rsc); }
public void properties() { ClientRequestAdapter<TextMap> adapter = sensor.getClientRequestAdapter(urlConnection, null, rsc); assertThat(adapter.getPropagationType(), is(PropagationType.HTTP)); assertThat(adapter.getReferenceType(), is(References.CHILD_OF)); assertThat(adapter.getFormat(), is(Format.Builtin.HTTP_HEADERS)); verifyZeroInteractions(rsc); }
@Test public void nullRequestLine() { when(httpRequest.getRequestLine()).thenReturn(null); ClientRequestAdapter<TextMap> adapter = sensor.getClientRequestAdapter(object, new Object[] { null, httpRequest }, rsc); Map<String, String> tags = adapter.getTags(); assertThat(tags.size(), is(0)); verifyZeroInteractions(object, rsc); }
@Test public void spanStartingAlreadyConnected() throws Exception { doThrow(IllegalStateException.class).when(urlConnection).setRequestMethod(anyString()); ClientRequestAdapter<TextMap> adapter = sensor.getClientRequestAdapter(urlConnection, null, rsc); assertThat(adapter.startClientSpan(), is(false)); }
@Test public void baggageInjectionHeadersNull() { String key = "key"; String value = "value"; when(httpRequest.getHeaders()).thenReturn(null); ClientRequestAdapter<TextMap> adapter = sensor.getClientRequestAdapter(httpRequest, null, rsc); adapter.getCarrier().put(key, value); verifyNoMoreInteractions(rsc); } }
@Test public void tagsNull() { when(requestAdapter.startClientSpan()).thenReturn(true); when(requestAdapter.getTags()).thenReturn(null); when(requestAdapter.getPropagationType()).thenReturn(PropagationType.HTTP); when(requestAdapter.getReferenceType()).thenReturn(References.CHILD_OF); SpanImpl result = interceptor.handleRequest(requestAdapter); assertThat(result, is(span)); verify(tracer).buildSpan(null, References.CHILD_OF, true); verify(tracer).inject(context, Format.Builtin.TEXT_MAP, carrier); verify(spanBuilder).doNotReport(); verify(spanBuilder).withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT); verify(spanBuilder).withTag(ExtraTags.PROPAGATION_TYPE, PropagationType.HTTP.toString()); verify(spanBuilder).start(); verify(span).context(); verifyNoMoreInteractions(tracer, spanBuilder, span); verifyZeroInteractions(context); }
@Test public void properties() { ClientRequestAdapter<TextMap> adapter = sensor.getClientRequestAdapter(object, new Object[] { null, httpRequest }, rsc); assertThat(adapter.getPropagationType(), is(PropagationType.HTTP)); assertThat(adapter.getReferenceType(), is(References.CHILD_OF)); assertThat(adapter.getFormat(), is(Format.Builtin.HTTP_HEADERS)); verifyZeroInteractions(object, rsc); }
@Test public void urlUriNull() { when(httpRequest.getURI()).thenReturn(null); ClientRequestAdapter<TextMap> adapter = sensor.getClientRequestAdapter(httpRequest, null, rsc); Map<String, String> tags = adapter.getTags(); assertThat(tags.size(), is(0)); verifyNoMoreInteractions(rsc); }
/** * Handles the {@link ClientRequestAdapter}. This method should be called when new client * request is created. * * @param <C> * type of carrier adapter is providing * @param requestAdapter * {@link ClientRequestAdapter} providing necessary information. * @return Created span */ public <C> SpanImpl handleRequest(ClientRequestAdapter<C> requestAdapter) { SpanBuilderImpl builder = handleRequestInternal(requestAdapter); // nothing to do if builder was not created if (null == builder) { return null; } // set no reporting as we will do it ourselves in case on sync requests builder.doNotReport(); // start SpanImpl span = builder.start(); // inject here as the context is created when span is started tracer.inject(span.context(), requestAdapter.getFormat(), requestAdapter.getCarrier()); return span; }
@Test public void spanStarting() { ClientRequestAdapter<TextMap> adapter = sensor.getClientRequestAdapter(object, new Object[] { null, httpRequest }, rsc); assertThat(adapter.startClientSpan(), is(true)); }
@Test public void baggageInjection() throws Exception { String key = "key"; String value = "value"; when(rsc.getParameterTypes()).thenReturn(Collections.singletonList("javax.jms.Message")); ClientRequestAdapter<TextMap> adapter = sensor.getClientRequestAdapter(object, new Object[] { message }, rsc); adapter.getCarrier().put(key, value); verify(message).setStringProperty(key, value); verifyZeroInteractions(object); } }
@Test public void happyPath() { when(requestAdapter.startClientSpan()).thenReturn(true); when(requestAdapter.getTags()).thenReturn(Collections.<String, String> singletonMap(Tags.HTTP_URL.getKey(), "value")); when(requestAdapter.getPropagationType()).thenReturn(PropagationType.HTTP); when(requestAdapter.getReferenceType()).thenReturn(References.CHILD_OF); SpanImpl result = interceptor.handleRequest(requestAdapter); assertThat(result, is(span)); verify(tracer).buildSpan(null, References.CHILD_OF, true); verify(tracer).inject(context, Format.Builtin.TEXT_MAP, carrier); verify(spanBuilder).doNotReport(); verify(spanBuilder).withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT); verify(spanBuilder).withTag(ExtraTags.PROPAGATION_TYPE, PropagationType.HTTP.toString()); verify(spanBuilder).withTag(Tags.HTTP_URL.getKey(), "value"); verify(spanBuilder).start(); verify(span).context(); verifyNoMoreInteractions(tracer, spanBuilder, span); verifyZeroInteractions(context); }
@Test public void properties() { when(rsc.getParameterTypes()).thenReturn(Collections.singletonList("javax.jms.Message")); ClientRequestAdapter<TextMap> adapter = sensor.getClientRequestAdapter(object, new Object[] { message }, rsc); assertThat(adapter.getPropagationType(), is(PropagationType.JMS)); assertThat(adapter.getReferenceType(), is(References.CHILD_OF)); assertThat(adapter.getFormat(), is(Format.Builtin.TEXT_MAP)); verifyZeroInteractions(object); }
@Test public void methodNull() { when(httpRequest.getMethod()).thenReturn(null); ClientRequestAdapter<TextMap> adapter = sensor.getClientRequestAdapter(httpRequest, null, rsc); Map<String, String> tags = adapter.getTags(); assertThat(tags.size(), is(0)); verifyNoMoreInteractions(rsc); }