use of org.asynchttpclient.handler.BodyDeferringAsyncHandler.BodyDeferringInputStream in project async-http-client by AsyncHttpClient.
the class BodyDeferringAsyncHandlerTest method deferredInputStreamTrickWithCloseConnectionAndRetry.
@Test(expectedExceptions = UnsupportedOperationException.class)
public void deferredInputStreamTrickWithCloseConnectionAndRetry() throws Throwable {
try (AsyncHttpClient client = asyncHttpClient(config().setMaxRequestRetry(1).setRequestTimeout(10000).build())) {
BoundRequestBuilder r = client.prepareGet(getTargetUrl()).addHeader("X-CLOSE-CONNECTION", Boolean.TRUE.toString());
PipedOutputStream pos = new PipedOutputStream();
PipedInputStream pis = new PipedInputStream(pos);
BodyDeferringAsyncHandler bdah = new BodyDeferringAsyncHandler(pos);
Future<Response> f = r.execute(bdah);
BodyDeferringInputStream is = new BodyDeferringInputStream(f, bdah, pis);
Response resp = is.getAsapResponse();
assertNotNull(resp);
assertEquals(resp.getStatusCode(), HttpServletResponse.SC_OK);
assertEquals(resp.getHeader(CONTENT_LENGTH), String.valueOf(CONTENT_LENGTH_VALUE));
// "consume" the body, but our code needs input stream
CountingOutputStream cos = new CountingOutputStream();
try {
try {
copy(is, cos);
} finally {
is.close();
cos.close();
}
} catch (IOException e) {
throw e.getCause();
}
}
}
use of org.asynchttpclient.handler.BodyDeferringAsyncHandler.BodyDeferringInputStream in project async-http-client by AsyncHttpClient.
the class BodyDeferringAsyncHandlerTest method deferredInputStreamTrickWithFailure.
@Test(expectedExceptions = RemotelyClosedException.class)
public void deferredInputStreamTrickWithFailure() throws Throwable {
try (AsyncHttpClient client = asyncHttpClient(getAsyncHttpClientConfig())) {
BoundRequestBuilder r = client.prepareGet(getTargetUrl()).addHeader("X-FAIL-TRANSFER", Boolean.TRUE.toString());
PipedOutputStream pos = new PipedOutputStream();
PipedInputStream pis = new PipedInputStream(pos);
BodyDeferringAsyncHandler bdah = new BodyDeferringAsyncHandler(pos);
Future<Response> f = r.execute(bdah);
BodyDeferringInputStream is = new BodyDeferringInputStream(f, bdah, pis);
Response resp = is.getAsapResponse();
assertNotNull(resp);
assertEquals(resp.getStatusCode(), HttpServletResponse.SC_OK);
assertEquals(resp.getHeader(CONTENT_LENGTH), String.valueOf(CONTENT_LENGTH_VALUE));
// "consume" the body, but our code needs input stream
CountingOutputStream cos = new CountingOutputStream();
try {
try {
copy(is, cos);
} finally {
is.close();
cos.close();
}
} catch (IOException e) {
throw e.getCause();
}
}
}
use of org.asynchttpclient.handler.BodyDeferringAsyncHandler.BodyDeferringInputStream in project async-http-client by AsyncHttpClient.
the class BodyDeferringAsyncHandlerTest method testPipedStreams.
@Test
public void testPipedStreams() throws Exception {
try (AsyncHttpClient client = asyncHttpClient(getAsyncHttpClientConfig())) {
PipedOutputStream pout = new PipedOutputStream();
try (PipedInputStream pin = new PipedInputStream(pout)) {
BodyDeferringAsyncHandler handler = new BodyDeferringAsyncHandler(pout);
ListenableFuture<Response> respFut = client.prepareGet(getTargetUrl()).execute(handler);
Response resp = handler.getResponse();
if (resp.getStatusCode() == 200) {
try (BodyDeferringInputStream is = new BodyDeferringInputStream(respFut, handler, pin)) {
String body = IOUtils.toString(is, StandardCharsets.UTF_8);
assertTrue(body.contains("ABCDEF"));
}
} else {
throw new IOException("HTTP error " + resp.getStatusCode());
}
}
}
}
use of org.asynchttpclient.handler.BodyDeferringAsyncHandler.BodyDeferringInputStream in project async-http-client by AsyncHttpClient.
the class BodyDeferringAsyncHandlerTest method deferredInputStreamTrick.
@Test
public void deferredInputStreamTrick() throws IOException, InterruptedException {
try (AsyncHttpClient client = asyncHttpClient(getAsyncHttpClientConfig())) {
BoundRequestBuilder r = client.prepareGet(getTargetUrl());
PipedOutputStream pos = new PipedOutputStream();
PipedInputStream pis = new PipedInputStream(pos);
BodyDeferringAsyncHandler bdah = new BodyDeferringAsyncHandler(pos);
Future<Response> f = r.execute(bdah);
BodyDeferringInputStream is = new BodyDeferringInputStream(f, bdah, pis);
Response resp = is.getAsapResponse();
assertNotNull(resp);
assertEquals(resp.getStatusCode(), HttpServletResponse.SC_OK);
assertEquals(resp.getHeader(CONTENT_LENGTH), String.valueOf(CONTENT_LENGTH_VALUE));
// "consume" the body, but our code needs input stream
CountingOutputStream cos = new CountingOutputStream();
try {
copy(is, cos);
} finally {
is.close();
cos.close();
}
// now we don't need to be polite, since consuming and closing
// BodyDeferringInputStream does all.
// it all should be here now
assertEquals(cos.getByteCount(), CONTENT_LENGTH_VALUE);
}
}
Aggregations