use of com.nike.wingtips.Span in project riposte by Nike-Inc.
the class AsyncCompletionHandlerWithTracingAndMdcSupportTest method onCompleted_deals_with_trace_info_as_expected.
@DataProvider(value = { "null", "false", "true" })
@Test
public void onCompleted_deals_with_trace_info_as_expected(Boolean setupForSubspan) throws Throwable {
// given
Pair<Deque<Span>, Map<String, String>> traceInfo = generateTraceInfo(setupForSubspan);
Whitebox.setInternalState(handlerSpy, "distributedTraceStackToUse", traceInfo.getLeft());
Whitebox.setInternalState(handlerSpy, "mdcContextToUse", traceInfo.getRight());
Span expectedSpanBeforeCompletion = (traceInfo.getLeft() == null) ? null : traceInfo.getLeft().peek();
Span expectedSpanAfterCompletion = (TRUE.equals(setupForSubspan)) ? traceInfo.getLeft().peekLast() : null;
Pair<ObjectHolder<Span>, ObjectHolder<Span>> actualBeforeAndAfterSpanHolders = setupBeforeAndAfterSpanCaptureForOnCompleted();
// when
handlerSpy.onCompleted(responseMock);
// then
verify(circuitBreakerManualTaskMock).handleEvent(responseMock);
verify(responseHandlerFunctionMock).handleResponse(responseMock);
assertThat(actualBeforeAndAfterSpanHolders.getLeft().objSet).isTrue();
assertThat(actualBeforeAndAfterSpanHolders.getRight().objSet).isTrue();
assertThat(actualBeforeAndAfterSpanHolders.getLeft().obj).isEqualTo(expectedSpanBeforeCompletion);
assertThat(actualBeforeAndAfterSpanHolders.getRight().obj).isEqualTo(expectedSpanAfterCompletion);
}
use of com.nike.wingtips.Span in project riposte by Nike-Inc.
the class AsyncCompletionHandlerWithTracingAndMdcSupportTest method onThrowable_deals_with_trace_info_as_expected.
@DataProvider(value = { "null", "false", "true" })
@Test
public void onThrowable_deals_with_trace_info_as_expected(Boolean setupForSubspan) throws Throwable {
// given
Exception ex = new Exception("kaboom");
CompletableFuture<String> cfMock = mock(CompletableFuture.class);
Whitebox.setInternalState(handlerSpy, "completableFutureResponse", cfMock);
doReturn(false).when(cfMock).isDone();
Pair<Deque<Span>, Map<String, String>> traceInfo = generateTraceInfo(setupForSubspan);
Whitebox.setInternalState(handlerSpy, "distributedTraceStackToUse", traceInfo.getLeft());
Whitebox.setInternalState(handlerSpy, "mdcContextToUse", traceInfo.getRight());
Span expectedSpanBeforeCompletion = (traceInfo.getLeft() == null) ? null : traceInfo.getLeft().peek();
Span expectedSpanAfterCompletion = (TRUE.equals(setupForSubspan)) ? traceInfo.getLeft().peekLast() : null;
Pair<ObjectHolder<Span>, ObjectHolder<Span>> actualBeforeAndAfterSpanHolders = setupBeforeAndAfterSpanCaptureForOnThrowable(cfMock);
// when
handlerSpy.onThrowable(ex);
// then
verify(circuitBreakerManualTaskMock).handleException(ex);
verify(cfMock).completeExceptionally(ex);
assertThat(actualBeforeAndAfterSpanHolders.getLeft().objSet).isTrue();
assertThat(actualBeforeAndAfterSpanHolders.getRight().objSet).isTrue();
assertThat(actualBeforeAndAfterSpanHolders.getLeft().obj).isEqualTo(expectedSpanBeforeCompletion);
assertThat(actualBeforeAndAfterSpanHolders.getRight().obj).isEqualTo(expectedSpanAfterCompletion);
}
use of com.nike.wingtips.Span in project riposte by Nike-Inc.
the class AsyncCompletionHandlerWithTracingAndMdcSupportTest method getTraceForCall_works_as_expected.
@DataProvider(value = { "NULL", "EMPTY", "HAS_EXISTING_SPAN" }, splitBy = "\\|")
@Test
public void getTraceForCall_works_as_expected(ExistingSpanStackState existingSpanStackState) {
// given
Deque<Span> spanStack;
Span expectedResult;
switch(existingSpanStackState) {
case NULL:
spanStack = null;
expectedResult = null;
break;
case EMPTY:
spanStack = new LinkedList<>();
expectedResult = null;
break;
case HAS_EXISTING_SPAN:
spanStack = handlerSpy.distributedTraceStackToUse;
assertThat(spanStack).isNotEmpty();
expectedResult = spanStack.peek();
break;
default:
throw new IllegalArgumentException("Unhandled state: " + existingSpanStackState.name());
}
Whitebox.setInternalState(handlerSpy, "distributedTraceStackToUse", spanStack);
// when
Span spanForCall = handlerSpy.getSpanForCall();
// then
assertThat(spanForCall).isEqualTo(expectedResult);
}
use of com.nike.wingtips.Span in project riposte by Nike-Inc.
the class AsyncHttpClientHelperTest method executeAsyncHttpRequest_with_ctx_extracts_mdc_and_tracing_info_from_ctx_and_delegates_to_kitchen_sink_execute_method.
@Test
public void executeAsyncHttpRequest_with_ctx_extracts_mdc_and_tracing_info_from_ctx_and_delegates_to_kitchen_sink_execute_method() {
// given
RequestBuilderWrapper rbwMock = mock(RequestBuilderWrapper.class);
AsyncResponseHandler responseHandlerMock = mock(AsyncResponseHandler.class);
CompletableFuture cfMock = mock(CompletableFuture.class);
doReturn(cfMock).when(helperSpy).executeAsyncHttpRequest(any(RequestBuilderWrapper.class), any(AsyncResponseHandler.class), any(Deque.class), any(Map.class));
Map<String, String> mdcMock = mock(Map.class);
Deque<Span> spanStackMock = mock(Deque.class);
state.setLoggerMdcContextMap(mdcMock);
state.setDistributedTraceStack(spanStackMock);
// when
CompletableFuture result = helperSpy.executeAsyncHttpRequest(rbwMock, responseHandlerMock, ctxMock);
// then
verify(helperSpy).executeAsyncHttpRequest(rbwMock, responseHandlerMock, spanStackMock, mdcMock);
assertThat(result).isSameAs(cfMock);
verify(rbwMock).setCtx(ctxMock);
}
use of com.nike.wingtips.Span in project riposte by Nike-Inc.
the class AsyncHttpClientHelperTest method basic_executeAsyncHttpRequest_extracts_mdc_and_tracing_info_from_current_thread_and_delegates_to_kitchen_sink_execute_method.
@Test
public void basic_executeAsyncHttpRequest_extracts_mdc_and_tracing_info_from_current_thread_and_delegates_to_kitchen_sink_execute_method() {
// given
RequestBuilderWrapper rbw = mock(RequestBuilderWrapper.class);
AsyncResponseHandler responseHandler = mock(AsyncResponseHandler.class);
CompletableFuture cfMock = mock(CompletableFuture.class);
doReturn(cfMock).when(helperSpy).executeAsyncHttpRequest(any(RequestBuilderWrapper.class), any(AsyncResponseHandler.class), any(Deque.class), any(Map.class));
Tracer.getInstance().startRequestWithRootSpan("foo");
Deque<Span> expectedSpanStack = Tracer.getInstance().getCurrentSpanStackCopy();
Map<String, String> expectedMdc = MDC.getCopyOfContextMap();
// when
CompletableFuture result = helperSpy.executeAsyncHttpRequest(rbw, responseHandler);
// then
verify(helperSpy).executeAsyncHttpRequest(rbw, responseHandler, expectedSpanStack, expectedMdc);
assertThat(result).isSameAs(cfMock);
}
Aggregations