}
@Test
public void exception() throws Exception {
final ODataContext context = mockContext(ODataHttpMethod.GET);
final ODataResponse wrappedResponse = mockResponse(HttpStatusCodes.BAD_REQUEST, null, null);
ODataMessageException exception = mock(ODataMessageException.class);
when(exception.getMessageReference()).thenReturn(ODataMessageException.COMMON);
RuntimeException innerException = mock(RuntimeException.class);
when(innerException.getLocalizedMessage()).thenReturn("error");
final StackTraceElement[] stackTrace = new StackTraceElement[] {
new StackTraceElement("innerClass", "innerMethod", "innerFile", 99),
new StackTraceElement("class", "method", "file", 42),
new StackTraceElement("outerClass", "outerMethod", "outerFile", 11) };
when(innerException.getStackTrace()).thenReturn(stackTrace);
when(exception.getCause()).thenReturn(innerException);
when(exception.getStackTrace()).thenReturn(Arrays.copyOfRange(stackTrace, 1, 3));
ODataResponse response = new ODataDebugResponseWrapper(context, wrappedResponse, mock(UriInfo.class), exception,
ODataDebugResponseWrapper.ODATA_DEBUG_JSON).wrapResponse();
String entity = StringHelper.inputStreamToString((InputStream) response.getEntity());
assertEquals(EXPECTED
.replace(Integer.toString(HttpStatusCodes.OK.getStatusCode()),
Integer.toString(HttpStatusCodes.BAD_REQUEST.getStatusCode()))
.replace(HttpStatusCodes.OK.getInfo(), HttpStatusCodes.BAD_REQUEST.getInfo())
.replace("null}}", "null,"
+ "\"stacktrace\":{\"exceptions\":[{\"class\":\"" + exception.getClass().getName() + "\","
+ "\"message\":\"Common exception\","
+ "\"invocation\":{\"class\":\"class\",\"method\":\"method\",\"line\":42}},"
+ "{\"class\":\"" + innerException.getClass().getName() + "\",\"message\":\"error\","
+ "\"invocation\":{\"class\":\"innerClass\",\"method\":\"innerMethod\",\"line\":99}}],"
+ "\"stacktrace\":[{\"class\":\"class\",\"method\":\"method\",\"line\":42},"
+ "{\"class\":\"outerClass\",\"method\":\"outerMethod\",\"line\":11}]}}}"),
entity);
response = new ODataDebugResponseWrapper(context, wrappedResponse, mock(UriInfo.class), exception,
ODataDebugResponseWrapper.ODATA_DEBUG_HTML).wrapResponse();
entity = StringHelper.inputStreamToString((InputStream) response.getEntity());
assertTrue(entity.contains("Common exception"));
assertTrue(entity.contains("42"));
assertTrue(entity.contains("innerMethod"));
assertTrue(entity.contains("outerMethod"));
}