protected void setupResponseInfoBasedOnErrorResponseInfo(ResponseInfo<ErrorResponseBody> responseInfo, ErrorResponseInfo errorInfo) { responseInfo.setContentForFullResponse(errorInfo.getErrorResponseBody()); responseInfo.setHttpStatusCode(errorInfo.getErrorHttpStatusCode()); Map<String, List<String>> extraHeaders = errorInfo.getExtraHeadersToAddToResponse(); if (extraHeaders != null) { for (Map.Entry<String, List<String>> headerEntry : extraHeaders.entrySet()) { responseInfo.getHeaders().add(headerEntry.getKey(), headerEntry.getValue()); } } }
protected void setupResponseInfoBasedOnErrorResponseInfo(ResponseInfo<ErrorResponseBody> responseInfo, ErrorResponseInfo errorInfo) { responseInfo.setContentForFullResponse(errorInfo.getErrorResponseBody()); responseInfo.setHttpStatusCode(errorInfo.getErrorHttpStatusCode()); Map<String, List<String>> extraHeaders = errorInfo.getExtraHeadersToAddToResponse(); if (extraHeaders != null) { for (Map.Entry<String, List<String>> headerEntry : extraHeaders.entrySet()) { responseInfo.getHeaders().add(headerEntry.getKey(), headerEntry.getValue()); } } }
@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)); }
@Test public void handleErrorFromNettyInterfaceReturnsWrapperAroundBackstopperHandleExceptionReturnValue() { 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).handleException(any(Throwable.class), any(RequestInfoForLogging.class)); com.nike.riposte.server.error.handler.ErrorResponseInfo riposteErrorResponseInfo = adapterSpy.handleError(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)); }
@Test public void setupResponseInfoBasedOnErrorResponseInfo_sets_response_content_and_httpStatusCode_and_adds_extra_headers() { // given ResponseInfo<ErrorResponseBody> responseInfo = new FullResponseInfo<>(); ErrorResponseBody errorResponseBodyMock = mock(ErrorResponseBody.class); int httpStatusCode = 42; Map<String, List<String>> extraHeaders = new HashMap<>(); extraHeaders.put("key1", Arrays.asList("foo", "bar")); extraHeaders.put("key2", Arrays.asList("baz")); ErrorResponseInfo errorInfoMock = mock(ErrorResponseInfo.class); doReturn(errorResponseBodyMock).when(errorInfoMock).getErrorResponseBody(); doReturn(httpStatusCode).when(errorInfoMock).getErrorHttpStatusCode(); doReturn(extraHeaders).when(errorInfoMock).getExtraHeadersToAddToResponse(); // when handler.setupResponseInfoBasedOnErrorResponseInfo(responseInfo, errorInfoMock); // then assertThat(responseInfo.getContentForFullResponse(), is(errorResponseBodyMock)); assertThat(responseInfo.getHttpStatusCode(), is(httpStatusCode)); int numIndividualValuesInHeaderMap = extraHeaders.entrySet().stream().map(entry -> entry.getValue()).mapToInt(list -> list.size()).sum(); assertThat(responseInfo.getHeaders().entries().size(), is(numIndividualValuesInHeaderMap)); extraHeaders.entrySet().stream().forEach(expectedEntry -> assertThat(responseInfo.getHeaders().getAll(expectedEntry.getKey()), is(expectedEntry.getValue()))); }
@Test public void setupResponseInfoBasedOnErrorResponseInfo_sets_response_content_and_httpStatusCode_and_ignores_extra_headers_if_extra_headers_is_null() { // given ResponseInfo<ErrorResponseBody> responseInfo = new FullResponseInfo<>(); ErrorResponseBody errorResponseBodyMock = mock(ErrorResponseBody.class); int httpStatusCode = 42; ErrorResponseInfo errorInfoMock = mock(ErrorResponseInfo.class); doReturn(errorResponseBodyMock).when(errorInfoMock).getErrorResponseBody(); doReturn(httpStatusCode).when(errorInfoMock).getErrorHttpStatusCode(); doReturn(null).when(errorInfoMock).getExtraHeadersToAddToResponse(); // when handler.setupResponseInfoBasedOnErrorResponseInfo(responseInfo, errorInfoMock); // then assertThat(responseInfo.getContentForFullResponse(), is(errorResponseBodyMock)); assertThat(responseInfo.getHttpStatusCode(), is(httpStatusCode)); assertThat(responseInfo.getHeaders().entries().size(), is(0)); }