use of com.amazonaws.xray.entities.Cause in project aws-xray-sdk-java by aws.
the class AWSXRayServletFilterTest method testServletCatchesErrors.
@Test
public void testServletCatchesErrors() throws IOException, ServletException {
AWSXRayServletFilter servletFilter = new AWSXRayServletFilter("fail");
HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getRequestURL()).thenReturn(new StringBuffer("test_url"));
when(request.getMethod()).thenReturn("TEST_METHOD");
when(request.isAsyncStarted()).thenReturn(false);
HttpServletResponse response = mock(HttpServletResponse.class);
FilterChain chain = mock(FilterChain.class);
Error ourError = new StackOverflowError("Test");
Mockito.doThrow(ourError).when(chain).doFilter(Mockito.any(), Mockito.any());
assertThatThrownBy(() -> servletFilter.doFilter(request, response, chain)).isEqualTo(ourError);
ArgumentCaptor<Segment> emittedSegment = ArgumentCaptor.forClass(Segment.class);
verify(AWSXRay.getGlobalRecorder().getEmitter(), Mockito.times(1)).sendSegment(emittedSegment.capture());
Segment segment = emittedSegment.getValue();
Cause cause = segment.getCause();
Assert.assertEquals(1, cause.getExceptions().size());
Throwable storedThrowable = cause.getExceptions().get(0).getThrowable();
Assert.assertEquals(ourError, storedThrowable);
}
use of com.amazonaws.xray.entities.Cause in project aws-xray-sdk-java by aws.
the class AWSXRayServletFilterTest method testServletCatchesExceptions.
@Test
public void testServletCatchesExceptions() throws IOException, ServletException {
AWSXRayServletFilter servletFilter = new AWSXRayServletFilter("fail");
HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getRequestURL()).thenReturn(new StringBuffer("test_url"));
when(request.getMethod()).thenReturn("TEST_METHOD");
when(request.isAsyncStarted()).thenReturn(false);
HttpServletResponse response = mock(HttpServletResponse.class);
FilterChain chain = mock(FilterChain.class);
Exception ourException = new RuntimeException("Test");
Mockito.doThrow(ourException).when(chain).doFilter(Mockito.any(), Mockito.any());
assertThatThrownBy(() -> servletFilter.doFilter(request, response, chain)).isEqualTo(ourException);
ArgumentCaptor<Segment> emittedSegment = ArgumentCaptor.forClass(Segment.class);
verify(AWSXRay.getGlobalRecorder().getEmitter(), Mockito.times(1)).sendSegment(emittedSegment.capture());
Segment segment = emittedSegment.getValue();
Cause cause = segment.getCause();
Assert.assertEquals(1, cause.getExceptions().size());
Throwable storedThrowable = cause.getExceptions().get(0).getThrowable();
Assert.assertEquals(ourException, storedThrowable);
}
use of com.amazonaws.xray.entities.Cause in project aws-xray-sdk-java by aws.
the class TracingInterceptorTest method testAsyncThrottledException.
@Test
public void testAsyncThrottledException() {
SdkAsyncHttpClient mockClient = mockSdkAsyncHttpClient(generateLambdaInvokeResponse(429));
LambdaAsyncClient client = LambdaAsyncClient.builder().httpClient(mockClient).endpointOverride(URI.create("http://example.com")).region(Region.of("us-west-42")).credentialsProvider(StaticCredentialsProvider.create(AwsSessionCredentials.create("key", "secret", "session"))).overrideConfiguration(ClientOverrideConfiguration.builder().addExecutionInterceptor(new TracingInterceptor()).build()).build();
Segment segment = AWSXRay.getCurrentSegment();
try {
client.invoke(InvokeRequest.builder().functionName("testFunctionName").build()).get();
} catch (Exception e) {
// ignore exceptions
} finally {
Assert.assertEquals(1, segment.getSubsegments().size());
Subsegment subsegment = segment.getSubsegments().get(0);
Map<String, Object> awsStats = subsegment.getAws();
@SuppressWarnings("unchecked") Map<String, Object> httpResponseStats = (Map<String, Object>) subsegment.getHttp().get("response");
Cause cause = subsegment.getCause();
Assert.assertEquals("Invoke", awsStats.get("operation"));
Assert.assertEquals("testFunctionName", awsStats.get("function_name"));
Assert.assertEquals("1111-2222-3333-4444", awsStats.get("request_id"));
Assert.assertEquals("extended", awsStats.get("id_2"));
Assert.assertEquals("us-west-42", awsStats.get("region"));
Assert.assertEquals(2L, httpResponseStats.get("content_length"));
Assert.assertEquals(429, httpResponseStats.get("status"));
Assert.assertEquals(true, subsegment.isError());
Assert.assertEquals(true, subsegment.isThrottle());
Assert.assertEquals(false, subsegment.isFault());
Assert.assertEquals(1, cause.getExceptions().size());
Assert.assertEquals(true, cause.getExceptions().get(0).isRemote());
}
}
Aggregations