Search in sources :

Example 36 with Span

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);
}
Also used : Deque(java.util.Deque) HashMap(java.util.HashMap) Map(java.util.Map) Span(com.nike.wingtips.Span) DataProvider(com.tngtech.java.junit.dataprovider.DataProvider) Test(org.junit.Test)

Example 37 with Span

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);
}
Also used : Deque(java.util.Deque) HashMap(java.util.HashMap) Map(java.util.Map) Span(com.nike.wingtips.Span) DataProvider(com.tngtech.java.junit.dataprovider.DataProvider) Test(org.junit.Test)

Example 38 with Span

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);
}
Also used : Span(com.nike.wingtips.Span) DataProvider(com.tngtech.java.junit.dataprovider.DataProvider) Test(org.junit.Test)

Example 39 with Span

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);
}
Also used : CompletableFuture(java.util.concurrent.CompletableFuture) Matchers.anyString(org.mockito.Matchers.anyString) Deque(java.util.Deque) Map(java.util.Map) Span(com.nike.wingtips.Span) Test(org.junit.Test)

Example 40 with Span

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);
}
Also used : CompletableFuture(java.util.concurrent.CompletableFuture) Matchers.anyString(org.mockito.Matchers.anyString) Deque(java.util.Deque) Map(java.util.Map) Span(com.nike.wingtips.Span) Test(org.junit.Test)

Aggregations

Span (com.nike.wingtips.Span)46 Test (org.junit.Test)38 DataProvider (com.tngtech.java.junit.dataprovider.DataProvider)21 Map (java.util.Map)14 Deque (java.util.Deque)13 Assertions.catchThrowable (org.assertj.core.api.Assertions.catchThrowable)9 CompletableFuture (java.util.concurrent.CompletableFuture)7 HashMap (java.util.HashMap)6 HttpProcessingState (com.nike.riposte.server.http.HttpProcessingState)5 Tracer (com.nike.wingtips.Tracer)4 ChannelFuture (io.netty.channel.ChannelFuture)4 LinkedList (java.util.LinkedList)4 CircuitBreaker (com.nike.fastbreak.CircuitBreaker)3 PipelineContinuationBehavior (com.nike.riposte.server.handler.base.PipelineContinuationBehavior)3 RequestInfo (com.nike.riposte.server.http.RequestInfo)3 ChannelHandlerContext (io.netty.channel.ChannelHandlerContext)3 Matchers.anyString (org.mockito.Matchers.anyString)3 WrapperException (com.nike.backstopper.exception.WrapperException)2 Pair (com.nike.internal.util.Pair)2 DownstreamIdleChannelTimeoutHandler (com.nike.riposte.client.asynchttp.netty.downstreampipeline.DownstreamIdleChannelTimeoutHandler)2