/** * Adds any extra tags that Wingtips wants to add that aren't normally a part of specific tag strategies like * Zipkin or OpenTracing. * * <p>By default this will add the {@link WingtipsTags#SPAN_HANDLER} tag with the value that comes from * {@link HttpTagAndSpanNamingAdapter#getSpanHandlerTagValue(Object, Object)}. * * <p>This method does the actual extra-wingtips-tagging work for the public-facing {@link * #handleResponseTaggingAndFinalSpanName(Span, Object, Object, Throwable, HttpTagAndSpanNamingAdapter)}. * * @param span The span to tag - will never be null. * @param request The request object - this may be null. * @param response The response object - this may be null. * @param error The error that prevented the request/response from completing normally, or null if no such error * occurred. * @param adapter The adapter to handle the request and response - will never be null. */ @SuppressWarnings("unused") protected void doExtraWingtipsTagging( @NotNull Span span, @Nullable REQ request, @Nullable RES response, @Nullable Throwable error, @NotNull HttpTagAndSpanNamingAdapter<REQ, RES> adapter ) { putTagIfValueIsNotBlank(span, WingtipsTags.SPAN_HANDLER, adapter.getSpanHandlerTagValue(request, response)); }
@Test public void putTagIfValueIsNotBlank_calls_span_putTag_as_expected_for_tagValue_toString_when_result_is_not_blank() { // given Object tagValueMock = mock(Object.class); String tagValueToStringResult = "tag_value-" + UUID.randomUUID().toString(); doReturn(tagValueToStringResult).when(tagValueMock).toString(); String tagKey = "tag_key-" + UUID.randomUUID().toString(); // when implSpy.putTagIfValueIsNotBlank(spanMock, tagKey, tagValueMock); // then verify(spanMock).putTag(tagKey, tagValueToStringResult); }
@DataProvider(value = { "null", "", "[whitespace]" }, splitBy = "\\|") @Test public void putTagIfValueIsNotBlank_does_nothing_when_tagValue_toString_IS_blank( String blankTagValueToStringResult ) { // given if ("[whitespace]".equals(blankTagValueToStringResult)) { blankTagValueToStringResult = " \n\r\t "; } Object tagValueMock = mock(Object.class); doReturn(blankTagValueToStringResult).when(tagValueMock).toString(); String tagKey = "tag_key-" + UUID.randomUUID().toString(); // when implSpy.putTagIfValueIsNotBlank(spanMock, tagKey, tagValueMock); // then verify(spanMock, never()).putTag(anyString(), anyString()); }
@DataProvider(value = { "true | false | false", "false | true | false", "false | false | true" }, splitBy = "\\|") @Test public void putTagIfValueIsNotBlank_does_nothing_when_any_arg_is_null( boolean spanIsNull, boolean tagKeyIsNull, boolean tagValueIsNull ) { // given Span span = (spanIsNull) ? null : spanMock; String tagKey = (tagKeyIsNull) ? null : UUID.randomUUID().toString(); String tagValue = (tagValueIsNull) ? null : UUID.randomUUID().toString(); // when implSpy.putTagIfValueIsNotBlank(span, tagKey, tagValue); // then verify(spanMock, never()).putTag(anyString(), anyString()); }
@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); }
@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); }