@Test public void spanShouldNotStart() { when(requestAdapter.startClientSpan()).thenReturn(false); SpanImpl result = interceptor.handleAsyncRequest(requestAdapter); assertThat(result, is(nullValue())); verify(requestAdapter).startClientSpan(); verifyNoMoreInteractions(requestAdapter); verifyZeroInteractions(tracer); }
/** * {@inheritDoc} */ @Override public void beforeBody(long methodId, long sensorTypeId, Object object, Object[] parameters, RegisteredSensorConfig rsc) { if (!REF_MARKER.isMarkerSet()) { // get requestAdapter and handle ClientRequestAdapter<?> adapter = clientAdapterProvider.getClientRequestAdapter(object, parameters, rsc); if (null != adapter) { SpanImpl span = clientInterceptor.handleRequest(adapter); if (null != span) { spanStack.set(span); if (LOG.isDebugEnabled()) { LOG.debug("Remote client hook before body span " + span); } } } } REF_MARKER.markCall(); }
@Test public void noRequestHandled() { SpanImpl result = interceptor.handleResponse(null, responseAdapter); assertThat(result, is(nullValue())); verifyZeroInteractions(tracer, span); }
when(spanImpl.context()).thenReturn(context); when(spanImpl.isClient()).thenReturn(true); when(clientInterceptor.handleRequest(requestAdapter)).thenReturn(spanImpl); when(clientInterceptor.handleResponse(spanImpl, responseAdapter)).thenReturn(spanImpl); verify(clientInterceptor).handleRequest(requestAdapter); verify(clientInterceptor).handleResponse(spanImpl, responseAdapter); verify(adapterProvider).getClientRequestAdapter(object, parameters, rsc); verify(adapterProvider).getClientResponseAdapter(object, parameters, result, exception, 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; }
when(spanImpl.context()).thenReturn(context); when(spanImpl.isClient()).thenReturn(true); when(clientInterceptor.handleRequest(requestAdapter)).thenReturn(spanImpl); when(clientInterceptor.handleResponse(spanImpl, responseAdapter)).thenReturn(spanImpl); verify(clientInterceptor).handleRequest(requestAdapter); verify(clientInterceptor).handleResponse(spanImpl, responseAdapter); verify(adapterProvider, times(2)).getClientRequestAdapter(object, parameters, rsc); verify(adapterProvider, times(2)).getClientResponseAdapter(object, parameters, result, false, 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 handleAsyncRequest(AsyncClientRequestAdapter<C> requestAdapter) { SpanBuilderImpl builder = handleRequestInternal(requestAdapter); // nothing to do if builder was not created if (null == builder) { return null; } // just build the span and store it for later start SpanImpl span = builder.build(); SpanStore spanStore = new SpanStore(); spanStore.storeSpan(span); requestAdapter.getSpanStoreAdapter().setSpanStore(spanStore); // inject here as the context is created when span is started tracer.inject(span.context(), requestAdapter.getFormat(), requestAdapter.getCarrier()); return span; }
when(spanImpl.context()).thenReturn(context); when(spanImpl.isClient()).thenReturn(true); when(clientInterceptor.handleRequest(requestAdapter)).thenReturn(spanImpl); when(clientInterceptor.handleResponse(spanImpl, responseAdapter)).thenReturn(spanImpl); verify(clientInterceptor).handleRequest(requestAdapter); verify(clientInterceptor).handleResponse(spanImpl, responseAdapter); verify(adapterProvider).getClientRequestAdapter(object, parameters, rsc); verify(adapterProvider).getClientResponseAdapter(object, parameters, result, false, rsc);
@Test public void spanNull() throws Exception { // ids long methodId = 7l; long sensorId = 13l; // interceptor Object[] parameters = new String[] { "blah", "bla" }; doReturn(requestAdapter).when(adapterProvider).getAsyncClientRequestAdapter(object, parameters, rsc); when(clientInterceptor.handleAsyncRequest(requestAdapter)).thenReturn(null); // execute calls hook.beforeBody(methodId, sensorId, object, parameters, rsc); hook.firstAfterBody(methodId, sensorId, object, parameters, result, false, rsc); hook.secondAfterBody(coreService, methodId, sensorId, object, parameters, result, false, rsc); // verify timer, interceptor and adapters verify(clientInterceptor).handleAsyncRequest(requestAdapter); verify(adapterProvider).getAsyncClientRequestAdapter(object, parameters, rsc); verifyNoMoreInteractions(adapterProvider, clientInterceptor); verifyZeroInteractions(coreService, asyncContextListener); }
@Test public void spanShouldNotStart() { when(requestAdapter.startClientSpan()).thenReturn(false); SpanImpl result = interceptor.handleRequest(requestAdapter); assertThat(result, is(nullValue())); }
@Test public void tagsNull() { when(responseAdapter.getTags()).thenReturn(null); interceptor.handleResponse(span, responseAdapter); verify(span).finish(); verifyNoMoreInteractions(span); verifyZeroInteractions(tracer); }
/** * {@inheritDoc} */ @Override public void beforeBody(long methodId, long sensorTypeId, Object object, Object[] parameters, RegisteredSensorConfig rsc) { if (!REF_MARKER.isMarkerSet()) { // get requestAdapter and handle AsyncClientRequestAdapter<?> adapter = asyncClientAdapterProvider.getAsyncClientRequestAdapter(object, parameters, rsc); if (null != adapter) { SpanImpl span = clientInterceptor.handleAsyncRequest(adapter); if (null != span) { span.setTag(ExtraTags.INSPECTT_METHOD_ID, methodId); span.setTag(ExtraTags.INSPECTT_SENSOR_ID, sensorTypeId); asyncSpanContextListener.asyncSpanContextCreated(span.context()); if (LOG.isDebugEnabled()) { LOG.debug("Remote async client hook before body span " + span); } } } } REF_MARKER.markCall(); }
@Test public void spanNull() throws Exception { // ids long platformId = 1l; long methodId = 7l; long sensorId = 13l; // platform when(platformManager.getPlatformId()).thenReturn(platformId); // interceptor Object[] parameters = new String[] { "blah", "bla" }; doReturn(requestAdapter).when(adapterProvider).getClientRequestAdapter(object, parameters, rsc); doReturn(responseAdapter).when(adapterProvider).getClientResponseAdapter(object, parameters, result, false, rsc); when(clientInterceptor.handleRequest(requestAdapter)).thenReturn(null); // execute calls hook.beforeBody(methodId, sensorId, object, parameters, rsc); hook.firstAfterBody(methodId, sensorId, object, parameters, result, false, rsc); hook.secondAfterBody(coreService, methodId, sensorId, object, parameters, result, false, rsc); // verify timer, interceptor and adapters verify(clientInterceptor).handleRequest(requestAdapter); verify(adapterProvider).getClientRequestAdapter(object, parameters, rsc); verifyNoMoreInteractions(adapterProvider, clientInterceptor, coreService); verifyZeroInteractions(coreService); }
@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); }
@Test public void propagationNull() { when(requestAdapter.startClientSpan()).thenReturn(true); when(requestAdapter.getPropagationType()).thenReturn(null); when(requestAdapter.getReferenceType()).thenReturn(References.FOLLOWS_FROM); SpanImpl result = interceptor.handleAsyncRequest(requestAdapter); assertThat(result, is(span)); verify(tracer).buildSpan(null, References.FOLLOWS_FROM, true); verify(tracer).inject(context, Format.Builtin.TEXT_MAP, carrier); verify(spanBuilder).withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT); verify(spanBuilder).build(); verify(span).context(); ArgumentCaptor<SpanStore> spanStoreCaptor = ArgumentCaptor.forClass(SpanStore.class); verify(spanStoreAdapter).setSpanStore(spanStoreCaptor.capture()); assertThat(spanStoreCaptor.getValue().getSpan(), is(span)); verifyNoMoreInteractions(tracer, spanBuilder, span); verifyZeroInteractions(context); } }
@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); } }
clientInterceptor.handleResponse(span, adapter); spanStack.remove();
@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.FOLLOWS_FROM); SpanImpl result = interceptor.handleAsyncRequest(requestAdapter); assertThat(result, is(span)); verify(tracer).buildSpan(null, References.FOLLOWS_FROM, true); verify(tracer).inject(context, Format.Builtin.TEXT_MAP, carrier); verify(spanBuilder).withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_CLIENT); verify(spanBuilder).withTag(ExtraTags.PROPAGATION_TYPE, PropagationType.HTTP.toString()); verify(spanBuilder).build(); verify(span).context(); ArgumentCaptor<SpanStore> spanStoreCaptor = ArgumentCaptor.forClass(SpanStore.class); verify(spanStoreAdapter).setSpanStore(spanStoreCaptor.capture()); assertThat(spanStoreCaptor.getValue().getSpan(), is(span)); verifyNoMoreInteractions(tracer, spanBuilder, span); verifyZeroInteractions(context); }
@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 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.FOLLOWS_FROM); SpanImpl result = interceptor.handleAsyncRequest(requestAdapter); assertThat(result, is(span)); verify(tracer).buildSpan(null, References.FOLLOWS_FROM, true); verify(tracer).inject(context, Format.Builtin.TEXT_MAP, carrier); 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).build(); verify(span).context(); ArgumentCaptor<SpanStore> spanStoreCaptor = ArgumentCaptor.forClass(SpanStore.class); verify(spanStoreAdapter).setSpanStore(spanStoreCaptor.capture()); assertThat(spanStoreCaptor.getValue().getSpan(), is(span)); verifyNoMoreInteractions(tracer, spanBuilder, span); verifyZeroInteractions(context); }