@Override public @Nullable String doGetInitialSpanName( @NotNull RequestInfo<?> request ) { return tagAndNamingStrategy.getInitialSpanName(request, tagAndNamingAdapter); }
@Override protected void doHandleRequestTagging(@NotNull Span span, @NotNull HttpRequest request) { tagAndNamingStrategy.handleRequestTagging(span, request, tagAndNamingAdapter); }
@Override protected void doHandleResponseTaggingAndFinalSpanName( @NotNull Span span, @Nullable HttpRequest request, @Nullable HttpResponse response, @Nullable Throwable error ) { tagAndNamingStrategy.handleResponseTaggingAndFinalSpanName( span, request, response, error, tagAndNamingAdapter ); } }
doHandleResponseAndErrorTagging(span, request, response, error, adapter); doDetermineAndSetFinalSpanName(span, request, response, error, adapter); doExtraWingtipsTagging(span, request, response, error, adapter);
Throwable errorForTagging = null; try { tagAndNamingStrategy.handleRequestTagging(spanAroundCall, request, tagAndNamingAdapter); response = propagateHeadersAndExecute(route, request, clientContext, execAware); return response; try { tagAndNamingStrategy.handleResponseTaggingAndFinalSpanName( spanAroundCall, request, response, errorForTagging, tagAndNamingAdapter );
@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 handleRequestTagging_does_nothing_if_delegate_method_throws_exception() { // given doThrow(new RuntimeException("boom")) .when(implSpy).doHandleRequestTagging(any(Span.class), anyObject(), any(HttpTagAndSpanNamingAdapter.class)); // when implSpy.handleRequestTagging(spanMock, requestObjectMock, adapterMock); // then verify(implSpy).doHandleRequestTagging(spanMock, requestObjectMock, adapterMock); verifyNoMoreInteractions(implSpy); verifyZeroInteractions(spanMock, requestObjectMock, adapterMock); }
@Test public void getInitialSpanName_defers_to_doGetInitialSpanName() { // given String delegateMethodResult = UUID.randomUUID().toString(); doReturn(delegateMethodResult) .when(implSpy).doGetInitialSpanName(anyObject(), any(HttpTagAndSpanNamingAdapter.class)); // when String result = implSpy.getInitialSpanName(requestObjectMock, adapterMock); // then assertThat(result).isEqualTo(delegateMethodResult); verify(implSpy).doGetInitialSpanName(requestObjectMock, adapterMock); verifyNoMoreInteractions(implSpy); verifyZeroInteractions(requestObjectMock, adapterMock); }
@Test public void doExtraWingtipsTagging_adds_SPAN_HANDLER_tag_if_adapter_getSpanHandlerTagValue_is_not_blank() { // given String adapterSpanHandlerTagValue = UUID.randomUUID().toString(); doReturn(adapterSpanHandlerTagValue).when(adapterMock).getSpanHandlerTagValue(anyObject(), anyObject()); // when implSpy.doExtraWingtipsTagging(spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock); // then verify(implSpy).putTagIfValueIsNotBlank(spanMock, WingtipsTags.SPAN_HANDLER, adapterSpanHandlerTagValue); verify(spanMock).putTag(WingtipsTags.SPAN_HANDLER, adapterSpanHandlerTagValue); verifyNoMoreInteractions(spanMock); }
@Test public void doDetermineAndSetFinalSpanName_delegates_to_adapter_getFinalSpanName_and_changes_span_name_if_result_is_not_blank() { // given String adapterSpanNameResult = UUID.randomUUID().toString(); doReturn(adapterSpanNameResult).when(adapterMock).getFinalSpanName(anyObject(), anyObject()); Span span = Span.newBuilder("originalSpanName", SpanPurpose.SERVER).build(); assertThat(span.getSpanName()).isNotEqualTo(adapterSpanNameResult); // when implSpy.doDetermineAndSetFinalSpanName(span, requestObjectMock, responseObjectMock, errorMock, adapterMock); // then assertThat(span.getSpanName()).isEqualTo(adapterSpanNameResult); verify(adapterMock).getFinalSpanName(requestObjectMock, responseObjectMock); }
return doGetInitialSpanName(request, adapter);
doHandleRequestTagging(span, request, adapter);
ClientHttpResponse response = null; try { tagAndNamingStrategy.handleRequestTagging(spanAroundCall, wrapperRequest, tagAndNamingAdapter); response = propagateTracingHeadersAndExecuteRequest(wrapperRequest, body, execution); try { tagAndNamingStrategy.handleResponseTaggingAndFinalSpanName( spanAroundCall, wrapperRequest, response, errorForTagging, tagAndNamingAdapter );
@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); }
@Test public void handleRequestTagging_defers_to_doHandleRequestTagging() { // given doNothing().when(implSpy).doHandleRequestTagging( any(Span.class), anyObject(), any(HttpTagAndSpanNamingAdapter.class) ); // when implSpy.handleRequestTagging(spanMock, requestObjectMock, adapterMock); // then verify(implSpy).doHandleRequestTagging(spanMock, requestObjectMock, adapterMock); verifyNoMoreInteractions(implSpy); verifyZeroInteractions(spanMock, requestObjectMock, adapterMock); }
@Test public void getInitialSpanName_returns_null_if_delegate_method_throws_exception() { // given doThrow(new RuntimeException("boom")) .when(implSpy).doGetInitialSpanName(anyObject(), any(HttpTagAndSpanNamingAdapter.class)); // when String result = implSpy.getInitialSpanName(requestObjectMock, adapterMock); // then assertThat(result).isNull(); verify(implSpy).doGetInitialSpanName(requestObjectMock, adapterMock); verifyNoMoreInteractions(implSpy); verifyZeroInteractions(requestObjectMock, adapterMock); }
@DataProvider(value = { "null", "", "[whitespace]" }, splitBy = "\\|") @Test public void doExtraWingtipsTagging_does_NOT_add_SPAN_HANDLER_tag_if_adapter_getSpanHandlerTagValue_IS_blank( String blankAdapterResult ) { // given if ("[whitespace]".equals(blankAdapterResult)) { blankAdapterResult = " \n\r\t "; } doReturn(blankAdapterResult).when(adapterMock).getSpanHandlerTagValue(anyObject(), anyObject()); // when implSpy.doExtraWingtipsTagging(spanMock, requestObjectMock, responseObjectMock, errorMock, adapterMock); // then verify(implSpy).putTagIfValueIsNotBlank(spanMock, WingtipsTags.SPAN_HANDLER, blankAdapterResult); verifyZeroInteractions(spanMock); }
@DataProvider(value = { "null", "", "[whitespace]" }, splitBy = "\\|") @Test public void doDetermineAndSetFinalSpanName_delegates_to_adapter_getFinalSpanName_and_does_NOT_change_span_name_if_result_IS_blank( String blankAdapterResult ) { // given if ("[whitespace]".equals(blankAdapterResult)) { blankAdapterResult = " \n\r\t "; } doReturn(blankAdapterResult).when(adapterMock).getFinalSpanName(anyObject(), anyObject()); String originalSpanName = "originalSpanName"; Span span = Span.newBuilder(originalSpanName, SpanPurpose.SERVER).build(); // when implSpy.doDetermineAndSetFinalSpanName(span, requestObjectMock, responseObjectMock, errorMock, adapterMock); // then assertThat(span.getSpanName()).isEqualTo(originalSpanName); verify(adapterMock).getFinalSpanName(requestObjectMock, responseObjectMock); }
@Test public void doGetInitialSpanName_delegates_to_adapter_getInitialSpanName() { // given String adapterResult = UUID.randomUUID().toString(); doReturn(adapterResult).when(adapterMock).getInitialSpanName(anyObject()); // when String result = implSpy.doGetInitialSpanName(requestObjectMock, adapterMock); // then assertThat(result).isEqualTo(adapterResult); }
ClientHttpResponse response = null; try { tagAndNamingStrategy.handleRequestTagging(spanAroundCall, wrapperRequest, tagAndNamingAdapter); response = propagateTracingHeadersAndExecuteRequest(wrapperRequest, body, execution); try { tagAndNamingStrategy.handleResponseTaggingAndFinalSpanName( spanAroundCall, wrapperRequest, response, errorForTagging, tagAndNamingAdapter );