/** * {@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 spanShouldNotStart() { when(requestAdapter.startClientSpan()).thenReturn(false); SpanImpl result = interceptor.handleRequest(requestAdapter); assertThat(result, is(nullValue())); }
@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 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 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 responseAdapterNull() throws Exception { // ids long platformId = 1l; long methodId = 7l; long sensorId = 13l; long spanId = 17l; // platform when(platformManager.getPlatformId()).thenReturn(platformId); // interceptor Object[] parameters = new String[] { "blah", "bla" }; doReturn(requestAdapter).when(adapterProvider).getClientRequestAdapter(object, parameters, rsc); doReturn(null).when(adapterProvider).getClientResponseAdapter(object, parameters, result, false, rsc); SpanContextImpl context = mock(SpanContextImpl.class); when(context.getId()).thenReturn(spanId); SpanImpl spanImpl = mock(SpanImpl.class); when(spanImpl.context()).thenReturn(context); when(spanImpl.isClient()).thenReturn(true); when(clientInterceptor.handleRequest(requestAdapter)).thenReturn(spanImpl); // 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); verify(adapterProvider).getClientResponseAdapter(object, parameters, result, false, rsc); verifyNoMoreInteractions(adapterProvider, clientInterceptor); verifyZeroInteractions(coreService); }
@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); }
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);
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);
when(spanImpl.context()).thenReturn(context); when(spanImpl.isClient()).thenReturn(true); when(clientInterceptor.handleRequest(requestAdapter)).thenReturn(spanImpl); verify(clientInterceptor).handleRequest(requestAdapter); verify(clientInterceptor).handleResponse(spanImpl, responseAdapter); verify(adapterProvider, times(2)).getClientRequestAdapter(object, parameters, rsc);