use of org.apache.druid.java.util.common.Either in project druid by druid-io.
the class ObjectOrErrorResponseHandlerTest method testExceptionAfterOk.
@Test
public void testExceptionAfterOk() throws Exception {
HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
response.setChunked(false);
response.setContent(new BigEndianHeapChannelBuffer("abcd".getBytes(StringUtils.UTF8_STRING)));
final ObjectOrErrorResponseHandler<InputStreamFullResponseHolder, InputStreamFullResponseHolder> responseHandler = new ObjectOrErrorResponseHandler<>(new InputStreamFullResponseHandler());
ClientResponse<Either<StringFullResponseHolder, InputStreamFullResponseHolder>> clientResp = responseHandler.handleResponse(response, null);
Exception ex = new RuntimeException("dummy!");
responseHandler.exceptionCaught(clientResp, ex);
// Exception after HTTP OK still is handled by the "OK handler"
// (The handler that starts the request gets to finish it.)
Assert.assertTrue(clientResp.isFinished());
Assert.assertTrue(clientResp.getObj().isValue());
final InputStream responseStream = clientResp.getObj().valueOrThrow().getContent();
final IOException e = Assert.assertThrows(IOException.class, () -> IOUtils.toString(responseStream, StandardCharsets.UTF_8));
Assert.assertEquals("java.lang.RuntimeException: dummy!", e.getMessage());
}
use of org.apache.druid.java.util.common.Either in project druid by druid-io.
the class ObjectOrErrorResponseHandlerTest method testOk.
@Test
public void testOk() throws Exception {
HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
response.setChunked(false);
response.setContent(new BigEndianHeapChannelBuffer("abcd".getBytes(StringUtils.UTF8_STRING)));
final ObjectOrErrorResponseHandler<InputStreamFullResponseHolder, InputStreamFullResponseHolder> responseHandler = new ObjectOrErrorResponseHandler<>(new InputStreamFullResponseHandler());
ClientResponse<Either<StringFullResponseHolder, InputStreamFullResponseHolder>> clientResp = responseHandler.handleResponse(response, null);
DefaultHttpChunk chunk = new DefaultHttpChunk(new BigEndianHeapChannelBuffer("efg".getBytes(StringUtils.UTF8_STRING)));
clientResp = responseHandler.handleChunk(clientResp, chunk, 0);
clientResp = responseHandler.done(clientResp);
Assert.assertTrue(clientResp.isFinished());
Assert.assertEquals("abcdefg", IOUtils.toString(clientResp.getObj().valueOrThrow().getContent(), StandardCharsets.UTF_8));
}
use of org.apache.druid.java.util.common.Either in project druid by druid-io.
the class ObjectOrErrorResponseHandlerTest method testServerError.
@Test
public void testServerError() throws Exception {
HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.INTERNAL_SERVER_ERROR);
response.setChunked(false);
response.setContent(new BigEndianHeapChannelBuffer("abcd".getBytes(StringUtils.UTF8_STRING)));
final ObjectOrErrorResponseHandler<InputStreamFullResponseHolder, InputStreamFullResponseHolder> responseHandler = new ObjectOrErrorResponseHandler<>(new InputStreamFullResponseHandler());
ClientResponse<Either<StringFullResponseHolder, InputStreamFullResponseHolder>> clientResp = responseHandler.handleResponse(response, null);
DefaultHttpChunk chunk = new DefaultHttpChunk(new BigEndianHeapChannelBuffer("efg".getBytes(StringUtils.UTF8_STRING)));
clientResp = responseHandler.handleChunk(clientResp, chunk, 0);
clientResp = responseHandler.done(clientResp);
// 5xx HTTP code is handled by the error handler.
Assert.assertTrue(clientResp.isFinished());
Assert.assertTrue(clientResp.getObj().isError());
Assert.assertEquals(HttpResponseStatus.INTERNAL_SERVER_ERROR.getCode(), clientResp.getObj().error().getResponse().getStatus().getCode());
Assert.assertEquals("abcdefg", clientResp.getObj().error().getContent());
}
Aggregations