@Override protected void doHandleResponseTaggingAndFinalSpanName( @NotNull Span span, @Nullable HttpRequest request, @Nullable HttpResponse response, @Nullable Throwable error ) { tagAndNamingStrategy.handleResponseTaggingAndFinalSpanName( span, request, response, error, tagAndNamingAdapter ); } }
@Override public void doHandleResponseTaggingAndFinalSpanName( @NotNull Span span, @Nullable RequestInfo<?> request, @Nullable ResponseInfo<?> response, @Nullable Throwable error ) { tagAndNamingStrategy.handleResponseTaggingAndFinalSpanName( span, request, response, error, tagAndNamingAdapter ); } }
@Override protected void doHandleResponseTaggingAndFinalSpanName( @NotNull Span span, @Nullable HttpRequest request, @Nullable HttpResponse response, @Nullable Throwable error ) { tagAndNamingStrategy.handleResponseTaggingAndFinalSpanName( span, request, response, error, tagAndNamingAdapter ); } }
@Override public void doHandleResponseTaggingAndFinalSpanName( @NotNull Span span, @Nullable RequestInfo<?> request, @Nullable ResponseInfo<?> response, @Nullable Throwable error ) { tagAndNamingStrategy.handleResponseTaggingAndFinalSpanName( span, request, response, error, tagAndNamingAdapter ); } }
@Override public void doHandleResponseTaggingAndFinalSpanName( @NotNull Span span, @Nullable RequestBuilderWrapper request, @Nullable Response response, @Nullable Throwable error ) { tagAndNamingStrategy.handleResponseTaggingAndFinalSpanName( span, request, response, error, tagAndNamingAdapter ); } }
@Override public void process(HttpResponse response, HttpContext context) { // See if there's a subspan passed to us from the request interceptor. Span spanToClose = (Span) context.getAttribute(SPAN_TO_CLOSE_HTTP_CONTEXT_ATTR_KEY); if (spanToClose != null) { // There was a subspan. Finalize and close it. try { // Handle response/error tagging and final span name. // The request should be found in the context attributes - try to extract it from there. // We have no access to any error, so we pass null for the error arg. HttpRequest request = null; Object requestRawObj = context.getAttribute(HttpCoreContext.HTTP_REQUEST); if (requestRawObj instanceof HttpRequest) { request = (HttpRequest) requestRawObj; } tagAndNamingStrategy.handleResponseTaggingAndFinalSpanName( spanToClose, request, response, null, tagAndNamingAdapter ); } finally { // Span.close() contains the logic we want - if the spanToClose was an overall span (new trace) // then tracer.completeRequestSpan() will be called, otherwise it's a subspan and // tracer.completeSubSpan() will be called. spanToClose.close(); } } }
@Override public void run() { Span span = Tracer.getInstance().getCurrentSpan(); //noinspection TryFinallyCanBeTryWithResources try { // Add the tags from the response. tagAndNamingStrategy.handleResponseTaggingAndFinalSpanName( span, request, response, error, tagAndNamingAdapter ); } finally { // Span.close() contains the logic we want - if the spanAroundCall was an overall span // (new trace) then tracer.completeRequestSpan() will be called, otherwise it's // a subspan and tracer.completeSubSpan() will be called. span.close(); } } },
@Override public void run() { Span span = Tracer.getInstance().getCurrentSpan(); //noinspection TryFinallyCanBeTryWithResources try { // Add the tags from the response. tagAndNamingStrategy.handleResponseTaggingAndFinalSpanName( span, request, response, error, tagAndNamingAdapter ); } finally { // Span.close() contains the logic we want - if the spanAroundCall was an overall span // (new trace) then tracer.completeRequestSpan() will be called, otherwise it's // a subspan and tracer.completeSubSpan() will be called. span.close(); } } },
@Override public void run() { Span span = Tracer.getInstance().getCurrentSpan(); try { // Handle response/error tagging and final span name. tagAndNamingStrategy.handleResponseTaggingAndFinalSpanName( span, httpRequest, httpResponse, error, tagAndNamingAdapter ); } finally { // Complete the overall request span. Tracer.getInstance().completeRequestSpan(); } } },
@DataProvider(value = { "SPAN_IS_NULL", "ADAPTER_IS_NULL", }, splitBy = "\\|") @Test @SuppressWarnings("ConstantConditions") public void handleResponseTaggingAndFinalSpanName_does_nothing_in_null_arg_corner_cases( NullArgCornerCaseScenario scenario ) { // given Span spanMock = scenario.spanMock; HttpTagAndSpanNamingAdapter<Object, Object> adapterMock = scenario.adapterMock; // when implSpy.handleResponseTaggingAndFinalSpanName( spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock ); // then verifyZeroInteractions(implSpy); if (spanMock != null) { verifyZeroInteractions(spanMock); } if (adapterMock != null) { verifyZeroInteractions(adapterMock); } verifyZeroInteractions(requestObjectMock, responseObjectMock, errorMock); }
@Test public void handleResponseTaggingAndFinalSpanName_executes_other_two_delegates_when_doExtraWingtipsTagging_throws_exception() { // given doThrow(new RuntimeException("boom")).when(implSpy).doExtraWingtipsTagging( any(Span.class), anyObject(), anyObject(), any(Throwable.class), any(HttpTagAndSpanNamingAdapter.class) ); doNothing().when(implSpy).doHandleResponseAndErrorTagging( any(Span.class), anyObject(), anyObject(), any(Throwable.class), any(HttpTagAndSpanNamingAdapter.class) ); doNothing().when(implSpy).doDetermineAndSetFinalSpanName( any(Span.class), anyObject(), anyObject(), any(Throwable.class), any(HttpTagAndSpanNamingAdapter.class) ); // when implSpy.handleResponseTaggingAndFinalSpanName( spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock ); // then verify(implSpy).doHandleResponseAndErrorTagging( spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock ); verify(implSpy).doDetermineAndSetFinalSpanName( spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock ); verify(implSpy).doExtraWingtipsTagging( spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock ); verifyNoMoreInteractions(implSpy); verifyZeroInteractions(spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock); }
@Test public void handleResponseTaggingAndFinalSpanName_executes_other_two_delegates_when_doHandleResponseAndErrorTagging_throws_exception() { // given doThrow(new RuntimeException("boom")).when(implSpy).doHandleResponseAndErrorTagging( any(Span.class), anyObject(), anyObject(), any(Throwable.class), any(HttpTagAndSpanNamingAdapter.class) ); doNothing().when(implSpy).doDetermineAndSetFinalSpanName( any(Span.class), anyObject(), anyObject(), any(Throwable.class), any(HttpTagAndSpanNamingAdapter.class) ); doNothing().when(implSpy).doExtraWingtipsTagging( any(Span.class), anyObject(), anyObject(), any(Throwable.class), any(HttpTagAndSpanNamingAdapter.class) ); // when implSpy.handleResponseTaggingAndFinalSpanName( spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock ); // then verify(implSpy).doHandleResponseAndErrorTagging( spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock ); verify(implSpy).doDetermineAndSetFinalSpanName( spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock ); verify(implSpy).doExtraWingtipsTagging( spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock ); verifyNoMoreInteractions(implSpy); verifyZeroInteractions(spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock); }
@Test public void handleResponseTaggingAndFinalSpanName_executes_other_two_delegates_when_doDetermineAndSetFinalSpanName_throws_exception() { // given doThrow(new RuntimeException("boom")).when(implSpy).doDetermineAndSetFinalSpanName( any(Span.class), anyObject(), anyObject(), any(Throwable.class), any(HttpTagAndSpanNamingAdapter.class) ); doNothing().when(implSpy).doHandleResponseAndErrorTagging( any(Span.class), anyObject(), anyObject(), any(Throwable.class), any(HttpTagAndSpanNamingAdapter.class) ); doNothing().when(implSpy).doExtraWingtipsTagging( any(Span.class), anyObject(), anyObject(), any(Throwable.class), any(HttpTagAndSpanNamingAdapter.class) ); // when implSpy.handleResponseTaggingAndFinalSpanName( spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock ); // then verify(implSpy).doHandleResponseAndErrorTagging( spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock ); verify(implSpy).doDetermineAndSetFinalSpanName( spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock ); verify(implSpy).doExtraWingtipsTagging( spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock ); verifyNoMoreInteractions(implSpy); verifyZeroInteractions(spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock); }
@Test public void handleResponseTaggingAndFinalSpanName_defers_to_doHandleResponseAndErrorTagging_and_doDetermineAndSetFinalSpanName_and_doExtraWingtipsTagging() { // given doNothing().when(implSpy).doHandleResponseAndErrorTagging( any(Span.class), anyObject(), anyObject(), any(Throwable.class), any(HttpTagAndSpanNamingAdapter.class) ); doNothing().when(implSpy).doDetermineAndSetFinalSpanName( any(Span.class), anyObject(), anyObject(), any(Throwable.class), any(HttpTagAndSpanNamingAdapter.class) ); doNothing().when(implSpy).doExtraWingtipsTagging( any(Span.class), anyObject(), anyObject(), any(Throwable.class), any(HttpTagAndSpanNamingAdapter.class) ); // when implSpy.handleResponseTaggingAndFinalSpanName( spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock ); // then verify(implSpy).doHandleResponseAndErrorTagging( spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock ); verify(implSpy).doDetermineAndSetFinalSpanName( spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock ); verify(implSpy).doExtraWingtipsTagging( spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock ); verifyNoMoreInteractions(implSpy); verifyZeroInteractions(spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock); }
try { tagAndNamingStrategy.handleResponseTaggingAndFinalSpanName( spanAroundCall, request, response, errorForTagging, tagAndNamingAdapter );
try { tagAndNamingStrategy.handleResponseTaggingAndFinalSpanName( spanAroundCall, wrapperRequest, response, errorForTagging, tagAndNamingAdapter );
try { tagAndNamingStrategy.handleResponseTaggingAndFinalSpanName( spanAroundCall, wrapperRequest, response, errorForTagging, tagAndNamingAdapter );
tagAndNamingStrategy.handleResponseTaggingAndFinalSpanName( overallRequestSpan, request, response, errorForTagging, tagAndNamingAdapter );