Search in sources :

Example 96 with Span

use of com.nike.wingtips.Span in project riposte by Nike-Inc.

the class RiposteHandlerInternalUtilTest method determineOverallRequestSpanName_works_as_expected.

@UseDataProvider("determineOverallRequestSpanNameScenarioDataProvider")
@Test
public void determineOverallRequestSpanName_works_as_expected(DetermineSpanNameScenario scenario) {
    // given
    ServerSpanNamingAndTaggingStrategy<Span> namingStrategy = new DummyServerSpanNamingAndTaggingStrategy(scenario.strategySpanName);
    doReturn(scenario.fallbackSpanName).when(implSpy).determineFallbackOverallRequestSpanName(any());
    RequestInfo<?> requestInfoMock = mock(RequestInfo.class);
    if (scenario.riposteRequestInfoIsNull) {
        requestInfoMock = null;
    }
    HttpRequest httpRequest = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/some/uri");
    String expectedResult = (scenario.expectStrategyResult) ? scenario.strategySpanName : scenario.fallbackSpanName;
    // when
    String result = implSpy.determineOverallRequestSpanName(httpRequest, requestInfoMock, namingStrategy);
    // then
    Assertions.assertThat(result).isEqualTo(expectedResult);
    if (scenario.expectStrategyResult) {
        verify(implSpy, never()).determineFallbackOverallRequestSpanName(any());
    } else {
        verify(implSpy).determineFallbackOverallRequestSpanName(httpRequest);
    }
}
Also used : DefaultHttpRequest(io.netty.handler.codec.http.DefaultHttpRequest) HttpRequest(io.netty.handler.codec.http.HttpRequest) DefaultHttpRequest(io.netty.handler.codec.http.DefaultHttpRequest) Span(com.nike.wingtips.Span) Test(org.junit.Test) UseDataProvider(com.tngtech.java.junit.dataprovider.UseDataProvider)

Example 97 with Span

use of com.nike.wingtips.Span in project riposte by Nike-Inc.

the class RiposteHandlerInternalUtilTest method getOverallRequestSpan_works_as_expected.

@DataProvider(value = { "true", "false" })
@Test
public void getOverallRequestSpan_works_as_expected(boolean stateIsNull) {
    // given
    Span stateOverallRequestSpanMock = mock(Span.class);
    HttpProcessingState stateMock = (stateIsNull) ? null : mock(HttpProcessingState.class);
    if (!stateIsNull) {
        doReturn(stateOverallRequestSpanMock).when(stateMock).getOverallRequestSpan();
    }
    // when
    Span result = implSpy.getOverallRequestSpan(stateMock);
    // then
    if (stateIsNull) {
        assertThat(result).isNull();
    } else {
        assertThat(result).isSameAs(stateOverallRequestSpanMock);
        verify(stateMock).getOverallRequestSpan();
    }
}
Also used : HttpProcessingState(com.nike.riposte.server.http.HttpProcessingState) Span(com.nike.wingtips.Span) DataProvider(com.tngtech.java.junit.dataprovider.DataProvider) UseDataProvider(com.tngtech.java.junit.dataprovider.UseDataProvider) Test(org.junit.Test)

Example 98 with Span

use of com.nike.wingtips.Span in project riposte by Nike-Inc.

the class ServerTest method getOrGenerateWingtipsDistributedTracingConfig_works_as_expected_for_wingtips_span_type.

@DataProvider(value = { "true", "false" })
@Test
public void getOrGenerateWingtipsDistributedTracingConfig_works_as_expected_for_wingtips_span_type(boolean nullDtConfig) {
    // given
    DistributedTracingConfig<Span> dtConfig = (nullDtConfig) ? null : new DistributedTracingConfigImpl<>(mock(ServerSpanNamingAndTaggingStrategy.class), mock(ProxyRouterSpanNamingAndTaggingStrategy.class), Span.class);
    DistributedTracingConfig<Span> expectedResult = (dtConfig == null) ? DefaultRiposteDistributedTracingConfigImpl.getDefaultInstance() : dtConfig;
    ServerConfig serverConfigMock = mock(ServerConfig.class);
    doReturn(dtConfig).when(serverConfigMock).distributedTracingConfig();
    Server server = new Server(serverConfigMock);
    // when
    DistributedTracingConfig<Span> result = server.getOrGenerateWingtipsDistributedTracingConfig(serverConfigMock);
    // then
    assertThat(result).isSameAs(expectedResult);
    verify(serverConfigMock).distributedTracingConfig();
}
Also used : ServerConfig(com.nike.riposte.server.config.ServerConfig) Span(com.nike.wingtips.Span) DataProvider(com.tngtech.java.junit.dataprovider.DataProvider) Test(org.junit.Test)

Example 99 with Span

use of com.nike.wingtips.Span in project riposte by Nike-Inc.

the class HttpChannelInitializerTest method initChannel_adds_NonblockingEndpointExecutionHandler_after_RoutingHandler_and_RequestContentDeserializerHandler_and_RequestContentValidationHandler_and_uses_longRunningTaskExecutor_and_defaultCompletableFutureTimeoutMillis.

@Test
public void initChannel_adds_NonblockingEndpointExecutionHandler_after_RoutingHandler_and_RequestContentDeserializerHandler_and_RequestContentValidationHandler_and_uses_longRunningTaskExecutor_and_defaultCompletableFutureTimeoutMillis() {
    // given
    HttpChannelInitializer hci = basicHttpChannelInitializerNoUtilityHandlers();
    Whitebox.setInternalState(hci, "validationService", mock(RequestValidator.class));
    Executor expectedLongRunningTaskExecutor = extractField(hci, "longRunningTaskExecutor");
    long expectedDefaultCompletableFutureTimeoutMillis = extractField(hci, "defaultCompletableFutureTimeoutMillis");
    DistributedTracingConfig<Span> distributedTracingConfigMock = mock(DistributedTracingConfig.class);
    ServerSpanNamingAndTaggingStrategy<Span> expectedServerSpanNamingAndTaggingStrategy = mock(ServerSpanNamingAndTaggingStrategy.class);
    Whitebox.setInternalState(hci, "distributedTracingConfig", distributedTracingConfigMock);
    doReturn(expectedServerSpanNamingAndTaggingStrategy).when(distributedTracingConfigMock).getServerSpanNamingAndTaggingStrategy();
    // when
    hci.initChannel(socketChannelMock);
    // then
    ArgumentCaptor<ChannelHandler> channelHandlerArgumentCaptor = ArgumentCaptor.forClass(ChannelHandler.class);
    verify(channelPipelineMock, atLeastOnce()).addLast(anyString(), channelHandlerArgumentCaptor.capture());
    List<ChannelHandler> handlers = channelHandlerArgumentCaptor.getAllValues();
    Pair<Integer, RoutingHandler> routingHandler = findChannelHandler(handlers, RoutingHandler.class);
    Pair<Integer, RequestContentDeserializerHandler> requestContentDeserializerHandler = findChannelHandler(handlers, RequestContentDeserializerHandler.class);
    Pair<Integer, RequestContentValidationHandler> requestContentValidationHandler = findChannelHandler(handlers, RequestContentValidationHandler.class);
    Pair<Integer, NonblockingEndpointExecutionHandler> nonblockingEndpointExecutionHandler = findChannelHandler(handlers, NonblockingEndpointExecutionHandler.class);
    assertThat(routingHandler, notNullValue());
    assertThat(requestContentDeserializerHandler, notNullValue());
    assertThat(requestContentValidationHandler, notNullValue());
    assertThat(nonblockingEndpointExecutionHandler, notNullValue());
    assertThat(nonblockingEndpointExecutionHandler.getLeft(), is(greaterThan(routingHandler.getLeft())));
    assertThat(nonblockingEndpointExecutionHandler.getLeft(), is(greaterThan(requestContentDeserializerHandler.getLeft())));
    assertThat(nonblockingEndpointExecutionHandler.getLeft(), is(greaterThan(requestContentValidationHandler.getLeft())));
    // and then
    Executor actualLongRunningTaskExecutor = (Executor) Whitebox.getInternalState(nonblockingEndpointExecutionHandler.getRight(), "longRunningTaskExecutor");
    long actualDefaultCompletableFutureTimeoutMillis = (long) Whitebox.getInternalState(nonblockingEndpointExecutionHandler.getRight(), "defaultCompletableFutureTimeoutMillis");
    ServerSpanNamingAndTaggingStrategy<Span> actualTaggingStrategy = (ServerSpanNamingAndTaggingStrategy<Span>) Whitebox.getInternalState(nonblockingEndpointExecutionHandler.getRight(), "spanTaggingStrategy");
    assertThat(actualLongRunningTaskExecutor, is(expectedLongRunningTaskExecutor));
    assertThat(actualDefaultCompletableFutureTimeoutMillis, is(expectedDefaultCompletableFutureTimeoutMillis));
    assertThat(actualTaggingStrategy, is(expectedServerSpanNamingAndTaggingStrategy));
}
Also used : RequestContentValidationHandler(com.nike.riposte.server.handler.RequestContentValidationHandler) RequestContentDeserializerHandler(com.nike.riposte.server.handler.RequestContentDeserializerHandler) ServerSpanNamingAndTaggingStrategy(com.nike.riposte.server.config.distributedtracing.ServerSpanNamingAndTaggingStrategy) ChannelHandler(io.netty.channel.ChannelHandler) Span(com.nike.wingtips.Span) ThreadPoolExecutor(java.util.concurrent.ThreadPoolExecutor) Executor(java.util.concurrent.Executor) RequestValidator(com.nike.riposte.server.error.validation.RequestValidator) RoutingHandler(com.nike.riposte.server.handler.RoutingHandler) NonblockingEndpointExecutionHandler(com.nike.riposte.server.handler.NonblockingEndpointExecutionHandler) Test(org.junit.Test)

Example 100 with Span

use of com.nike.wingtips.Span in project riposte by Nike-Inc.

the class HttpChannelInitializerTest method initChannel_adds_RequestStateCleanerHandler_immediately_after_HttpServerCodec_and_ProcessFinalResponseOutputHandler.

@Test
public void initChannel_adds_RequestStateCleanerHandler_immediately_after_HttpServerCodec_and_ProcessFinalResponseOutputHandler() {
    // given
    HttpChannelInitializer hci = basicHttpChannelInitializerNoUtilityHandlers();
    MetricsListener expectedMetricsListener = mock(MetricsListener.class);
    long expectedIncompleteCallTimeoutMillis = 424242;
    DistributedTracingConfig<Span> distributedTracingConfigMock = mock(DistributedTracingConfig.class);
    Whitebox.setInternalState(hci, "metricsListener", expectedMetricsListener);
    Whitebox.setInternalState(hci, "incompleteHttpCallTimeoutMillis", expectedIncompleteCallTimeoutMillis);
    Whitebox.setInternalState(hci, "distributedTracingConfig", distributedTracingConfigMock);
    // when
    hci.initChannel(socketChannelMock);
    // then
    ArgumentCaptor<ChannelHandler> channelHandlerArgumentCaptor = ArgumentCaptor.forClass(ChannelHandler.class);
    verify(channelPipelineMock, atLeastOnce()).addLast(anyString(), channelHandlerArgumentCaptor.capture());
    List<ChannelHandler> handlers = channelHandlerArgumentCaptor.getAllValues();
    Pair<Integer, HttpServerCodec> httpServerCodecHandler = findChannelHandler(handlers, HttpServerCodec.class);
    Pair<Integer, ProcessFinalResponseOutputHandler> processFinalResponseOutputHandler = findChannelHandler(handlers, ProcessFinalResponseOutputHandler.class);
    Pair<Integer, RequestStateCleanerHandler> requestStateCleanerHandler = findChannelHandler(handlers, RequestStateCleanerHandler.class);
    assertThat(httpServerCodecHandler, notNullValue());
    assertThat(processFinalResponseOutputHandler, notNullValue());
    assertThat(requestStateCleanerHandler, notNullValue());
    assertThat(processFinalResponseOutputHandler.getLeft(), is(httpServerCodecHandler.getLeft() + 1));
    assertThat(requestStateCleanerHandler.getLeft(), is(httpServerCodecHandler.getLeft() + 2));
    RequestStateCleanerHandler handler = requestStateCleanerHandler.getRight();
    assertThat(Whitebox.getInternalState(handler, "metricsListener"), is(expectedMetricsListener));
    assertThat(Whitebox.getInternalState(handler, "incompleteHttpCallTimeoutMillis"), is(expectedIncompleteCallTimeoutMillis));
    assertThat(Whitebox.getInternalState(handler, "distributedTracingConfig"), is(distributedTracingConfigMock));
}
Also used : ChannelHandler(io.netty.channel.ChannelHandler) Span(com.nike.wingtips.Span) RequestStateCleanerHandler(com.nike.riposte.server.handler.RequestStateCleanerHandler) MetricsListener(com.nike.riposte.metrics.MetricsListener) HttpServerCodec(io.netty.handler.codec.http.HttpServerCodec) ProcessFinalResponseOutputHandler(com.nike.riposte.server.handler.ProcessFinalResponseOutputHandler) Test(org.junit.Test)

Aggregations

Span (com.nike.wingtips.Span)103 Test (org.junit.Test)73 DataProvider (com.tngtech.java.junit.dataprovider.DataProvider)41 Map (java.util.Map)26 Deque (java.util.Deque)24 Assertions.catchThrowable (org.assertj.core.api.Assertions.catchThrowable)20 CompletableFuture (java.util.concurrent.CompletableFuture)18 HttpProcessingState (com.nike.riposte.server.http.HttpProcessingState)13 ArgumentMatchers.anyString (org.mockito.ArgumentMatchers.anyString)12 HashMap (java.util.HashMap)10 HttpRequest (io.netty.handler.codec.http.HttpRequest)9 Before (org.junit.Before)9 RequestInfo (com.nike.riposte.server.http.RequestInfo)8 Tracer (com.nike.wingtips.Tracer)8 HttpTagAndSpanNamingAdapter (com.nike.wingtips.tags.HttpTagAndSpanNamingAdapter)7 ChannelFuture (io.netty.channel.ChannelFuture)7 ChannelHandler (io.netty.channel.ChannelHandler)7 ChannelHandlerContext (io.netty.channel.ChannelHandlerContext)7 HttpResponse (io.netty.handler.codec.http.HttpResponse)7 LastHttpContent (io.netty.handler.codec.http.LastHttpContent)7