@Test public void maybeHandleErrorFromNettyInterfaceReturnsNullIfBackstopperMaybeHandleExceptionReturnsNull() throws UnexpectedMajorExceptionHandlingError, UnexpectedMajorErrorHandlingError { doReturn(null).when(adapterSpy).maybeHandleException(any(Throwable.class), any(RequestInfoForLogging.class)); RequestInfo requestInfoMock = mock(RequestInfo.class); assertThat(adapterSpy.maybeHandleError(new Exception(), requestInfoMock), nullValue()); }
@Test(expected = UnexpectedMajorErrorHandlingError.class) public void maybeHandleErrorExplosionThrowsUnexpectedMajorErrorHandlingError() throws UnexpectedMajorExceptionHandlingError, UnexpectedMajorErrorHandlingError { UnexpectedMajorExceptionHandlingError innerExplosion = new UnexpectedMajorExceptionHandlingError("intentional kaboom", new Exception()); doThrow(innerExplosion).when(adapterSpy).maybeHandleException(any(Throwable.class), any(RequestInfoForLogging.class)); RequestInfo requestInfoMock = mock(RequestInfo.class); adapterSpy.maybeHandleError(new Exception(), requestInfoMock); } }
@Test public void maybeHandleErrorFromNettyInterfaceWrapsRequestInfoWithAdapterBeforeContinuing() throws UnexpectedMajorExceptionHandlingError, UnexpectedMajorErrorHandlingError { doReturn(null).when(adapterSpy).maybeHandleException(any(Throwable.class), any(RequestInfoForLogging.class)); RequestInfo requestInfoMock = mock(RequestInfo.class); adapterSpy.maybeHandleError(new Exception(), requestInfoMock); ArgumentCaptor<RequestInfoForLogging> requestInfoForLoggingArgumentCaptor = ArgumentCaptor.forClass(RequestInfoForLogging.class); verify(adapterSpy).maybeHandleException(any(Throwable.class), requestInfoForLoggingArgumentCaptor.capture()); RequestInfoForLogging passedArg = requestInfoForLoggingArgumentCaptor.getValue(); assertThat(passedArg, instanceOf(RequestInfoForLoggingRiposteAdapter.class)); RequestInfo embeddedRequestInfoInWrapper = (RequestInfo) Whitebox.getInternalState(passedArg, "request"); assertThat(embeddedRequestInfoInWrapper, sameInstance(requestInfoMock)); }
@Test public void maybeHandleErrorFromNettyInterfaceReturnsWrapperAroundBackstopperMaybeHandleExceptionReturnValue() throws UnexpectedMajorExceptionHandlingError, UnexpectedMajorErrorHandlingError { ErrorResponseBody errorResponseBodyMock = mock(ErrorResponseBody.class); Map<String, List<String>> headersMap = MapBuilder.<String, List<String>>builder().put("headerName", Arrays.asList("hval1", "hval2")).build(); com.nike.backstopper.handler.ErrorResponseInfo<ErrorResponseBody> backstopperResponse = new ErrorResponseInfo<>(42, errorResponseBodyMock, headersMap); doReturn(backstopperResponse).when(adapterSpy).maybeHandleException(any(Throwable.class), any(RequestInfoForLogging.class)); com.nike.riposte.server.error.handler.ErrorResponseInfo riposteErrorResponseInfo = adapterSpy.maybeHandleError(new Exception(), mock(RequestInfo.class)); assertThat(riposteErrorResponseInfo, instanceOf(ErrorResponseInfoImpl.class)); assertThat(riposteErrorResponseInfo.getErrorHttpStatusCode(), is(backstopperResponse.httpStatusCode)); assertThat(riposteErrorResponseInfo.getErrorResponseBody(), is(errorResponseBodyMock)); assertThat(riposteErrorResponseInfo.getExtraHeadersToAddToResponse(), is(headersMap)); }