/** * {@inheritDoc} */ @Override public void beforeBody(long methodId, long sensorTypeId, Object object, Object[] parameters, RegisteredSensorConfig rsc) { if (!REF_MARKER.isMarkerSet()) { // get requestAdapter and handle ServerRequestAdapter<?> adapter = serverAdapterProvider.getServerRequestAdapter(object, parameters, rsc); SpanImpl span = serverInterceptor.handleRequest(adapter); if (null != span) { spanStack.set(span); if (LOG.isDebugEnabled()) { LOG.debug("Remote server hook before body span " + span); } } } REF_MARKER.markCall(); }
@Test public void noRequestHandled() { SpanImpl result = interceptor.handleResponse(null, responseAdapter); assertThat(result, is(nullValue())); }
when(spanImpl.context()).thenReturn(context); when(spanImpl.isClient()).thenReturn(false); when(serverInterceptor.handleRequest(requestAdapter)).thenReturn(spanImpl); when(serverInterceptor.handleResponse(spanImpl, responseAdapter)).thenReturn(spanImpl); verify(serverInterceptor).handleRequest(requestAdapter); verify(serverInterceptor).handleResponse(spanImpl, responseAdapter); verify(adapterProvider).getServerRequestAdapter(object, parameters, rsc); verify(adapterProvider).getServerResponseAdapter(object, parameters, result, exception, rsc);
when(spanImpl.context()).thenReturn(context); when(spanImpl.isClient()).thenReturn(false); when(serverInterceptor.handleRequest(requestAdapter)).thenReturn(spanImpl); when(serverInterceptor.handleResponse(spanImpl, responseAdapter)).thenReturn(spanImpl); verify(serverInterceptor).handleRequest(requestAdapter); verify(serverInterceptor).handleResponse(spanImpl, responseAdapter); verify(adapterProvider).getServerRequestAdapter(object, parameters, rsc); verify(adapterProvider).getServerResponseAdapter(object, parameters, result, false, rsc);
@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).getServerRequestAdapter(object, parameters, rsc); doReturn(responseAdapter).when(adapterProvider).getServerResponseAdapter(object, parameters, result, false, rsc); when(serverInterceptor.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(serverInterceptor).handleRequest(requestAdapter); verify(adapterProvider).getServerRequestAdapter(object, parameters, rsc); verifyNoMoreInteractions(adapterProvider, serverInterceptor, coreService); verifyZeroInteractions(coreService); }
@Test public void tagsNull() { when(responseAdapter.getTags()).thenReturn(null); interceptor.handleResponse(span, responseAdapter); verify(span).finish(); verifyNoMoreInteractions(span); verifyZeroInteractions(tracer); }
@Test public void propagationNull() { when(requestAdapter.getReferenceType()).thenReturn("reference"); when(requestAdapter.getPropagationType()).thenReturn(null); when(tracer.extract(Format.Builtin.TEXT_MAP, carrier)).thenReturn(context); when(spanContextStore.getSpanContext()).thenReturn(null); SpanImpl result = interceptor.handleRequest(requestAdapter); assertThat(result, is(span)); verify(tracer).buildSpan(); verify(tracer).extract(Format.Builtin.TEXT_MAP, carrier); verify(spanBuilder).addReference("reference", context); verify(spanBuilder).addReference(References.FOLLOWS_FROM, null); verify(spanBuilder).doNotReport(); verify(spanBuilder).withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_SERVER); verify(spanBuilder).start(); verify(spanContextStore).setSpanContext(result.context()); verify(spanContextStore).getSpanContext(); verify(span, times(2)).context(); // one in test itself verifyNoMoreInteractions(tracer, spanBuilder, span, spanContextStore); verifyZeroInteractions(context, context2); }
@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 noTracePassed() { when(requestAdapter.getReferenceType()).thenReturn("reference"); when(tracer.extract(Format.Builtin.TEXT_MAP, carrier)).thenReturn(null); when(spanContextStore.getSpanContext()).thenReturn(null); SpanImpl result = interceptor.handleRequest(requestAdapter); assertThat(result, is(span)); verify(tracer).buildSpan(); verify(tracer).extract(Format.Builtin.TEXT_MAP, carrier); verify(spanBuilder).addReference("reference", (SpanContextImpl) null); verify(spanBuilder).addReference(References.FOLLOWS_FROM, null); verify(spanBuilder).doNotReport(); verify(spanBuilder).withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_SERVER); verify(spanBuilder).start(); verify(spanContextStore).setSpanContext(result.context()); verify(spanContextStore).getSpanContext(); verify(span, times(2)).context(); // one in test itself verifyNoMoreInteractions(tracer, spanBuilder, span, spanContextStore); verifyZeroInteractions(context, context2); }
/** * {@inheritDoc} */ @Override public void secondAfterBody(ICoreService coreService, long methodId, long sensorTypeId, Object object, Object[] parameters, Object result, boolean exception, RegisteredSensorConfig rsc) {// NOCHK:8-params // check if in the right(first) invocation if (REF_MARKER.isMarkerSet() && REF_MARKER.matchesFirst()) { // call ended, remove the marker. REF_MARKER.remove(); // extract span from thread local SpanImpl span = spanStack.get(); spanStack.remove(); if (null != span) { // get requestAdapter and handle ResponseAdapter responseAdapter = serverAdapterProvider.getServerResponseAdapter(object, parameters, result, exception, rsc); serverInterceptor.handleResponse(span, responseAdapter); if (LOG.isDebugEnabled()) { LOG.debug("Remote server hook after body span " + span); } AbstractSpan transformedSpan = SpanTransformer.transformSpan(span); transformedSpan.setPlatformIdent(platformManager.getPlatformId()); transformedSpan.setMethodIdent(methodId); transformedSpan.setSensorTypeIdent(sensorTypeId); // add to core service (use span id as prefix) coreService.addDefaultData(transformedSpan); } } }
@Test public void tagsNull() { when(requestAdapter.getTags()).thenReturn(null); when(requestAdapter.getReferenceType()).thenReturn("reference"); when(requestAdapter.getPropagationType()).thenReturn(PropagationType.HTTP); when(tracer.extract(Format.Builtin.TEXT_MAP, carrier)).thenReturn(context); when(spanContextStore.getSpanContext()).thenReturn(null); SpanImpl result = interceptor.handleRequest(requestAdapter); assertThat(result, is(span)); verify(tracer).buildSpan(); verify(tracer).extract(Format.Builtin.TEXT_MAP, carrier); verify(spanBuilder).addReference("reference", context); verify(spanBuilder).addReference(References.FOLLOWS_FROM, null); verify(spanBuilder).doNotReport(); verify(spanBuilder).withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_SERVER); verify(spanBuilder).withTag(ExtraTags.PROPAGATION_TYPE, PropagationType.HTTP.toString()); verify(spanBuilder).start(); verify(spanContextStore).setSpanContext(result.context()); verify(spanContextStore).getSpanContext(); verify(span, times(2)).context(); // one in test itself verifyNoMoreInteractions(tracer, spanBuilder, span, spanContextStore); verifyZeroInteractions(context, context2); }
@Test public void contextFromStoreReferred() { when(requestAdapter.getReferenceType()).thenReturn("reference"); when(tracer.extract(Format.Builtin.TEXT_MAP, carrier)).thenReturn(null); when(tracer.extract(Format.Builtin.TEXT_MAP, carrier)).thenReturn(null); when(spanContextStore.getSpanContext()).thenReturn(context2); SpanImpl result = interceptor.handleRequest(requestAdapter); assertThat(result, is(span)); verify(tracer).buildSpan(); verify(tracer).extract(Format.Builtin.TEXT_MAP, carrier); verify(spanBuilder).addReference("reference", (SpanContextImpl) null); verify(spanBuilder).addReference(References.FOLLOWS_FROM, context2); verify(spanBuilder).doNotReport(); verify(spanBuilder).withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_SERVER); verify(spanBuilder).start(); verify(spanContextStore).setSpanContext(result.context()); verify(spanContextStore).getSpanContext(); verify(span, times(2)).context(); // one in test itself verifyNoMoreInteractions(tracer, spanBuilder, span, spanContextStore); verifyZeroInteractions(context, context2); } }
@Test public void happyPath() { when(requestAdapter.getReferenceType()).thenReturn("reference"); when(requestAdapter.getPropagationType()).thenReturn(PropagationType.HTTP); when(requestAdapter.getTags()).thenReturn(Collections.<String, String> singletonMap(Tags.HTTP_URL.getKey(), "value")); when(tracer.extract(Format.Builtin.TEXT_MAP, carrier)).thenReturn(context); when(spanContextStore.getSpanContext()).thenReturn(context2); SpanImpl result = interceptor.handleRequest(requestAdapter); assertThat(result, is(span)); verify(tracer).buildSpan(); verify(tracer).extract(Format.Builtin.TEXT_MAP, carrier); verify(spanBuilder).addReference("reference", context); verify(spanBuilder).addReference(References.FOLLOWS_FROM, context2); verify(spanBuilder).doNotReport(); verify(spanBuilder).withTag(Tags.SPAN_KIND.getKey(), Tags.SPAN_KIND_SERVER); verify(spanBuilder).withTag(ExtraTags.PROPAGATION_TYPE, PropagationType.HTTP.toString()); verify(spanBuilder).withTag(Tags.HTTP_URL.getKey(), "value"); verify(spanBuilder).start(); verify(spanContextStore).setSpanContext(result.context()); verify(spanContextStore).getSpanContext(); verify(span, times(2)).context(); // one in test itself verifyNoMoreInteractions(tracer, spanBuilder, span, spanContextStore); verifyZeroInteractions(context, context2); }