use of javax.servlet.AsyncContext in project jetty.project by eclipse.
the class HttpClientStreamTest method testUploadWithConcurrentServerCloseClosesStream.
@Test
public void testUploadWithConcurrentServerCloseClosesStream() throws Exception {
final CountDownLatch serverLatch = new CountDownLatch(1);
start(new AbstractHandler() {
@Override
public void handle(String target, org.eclipse.jetty.server.Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
baseRequest.setHandled(true);
AsyncContext asyncContext = request.startAsync();
asyncContext.setTimeout(0);
serverLatch.countDown();
}
});
final AtomicBoolean commit = new AtomicBoolean();
final CountDownLatch closeLatch = new CountDownLatch(1);
InputStream stream = new InputStream() {
@Override
public int read() throws IOException {
if (commit.get()) {
try {
Assert.assertTrue(serverLatch.await(5, TimeUnit.SECONDS));
connector.stop();
return 0;
} catch (Throwable x) {
throw new IOException(x);
}
} else {
return connector.isStopped() ? -1 : 0;
}
}
@Override
public void close() throws IOException {
super.close();
closeLatch.countDown();
}
};
InputStreamContentProvider provider = new InputStreamContentProvider(stream, 1);
final CountDownLatch completeLatch = new CountDownLatch(1);
client.newRequest("localhost", connector.getLocalPort()).scheme(getScheme()).content(provider).onRequestCommit(request -> commit.set(true)).send(result -> {
Assert.assertTrue(result.isFailed());
completeLatch.countDown();
});
Assert.assertTrue(completeLatch.await(5, TimeUnit.SECONDS));
Assert.assertTrue(closeLatch.await(5, TimeUnit.SECONDS));
}
use of javax.servlet.AsyncContext in project jetty.project by eclipse.
the class HttpClientIdleTimeoutTest method testClientIdleTimeout.
@Test
public void testClientIdleTimeout() throws Exception {
start(new AbstractHandler() {
@Override
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
baseRequest.setHandled(true);
if (target.equals("/timeout")) {
AsyncContext asyncContext = request.startAsync();
asyncContext.setTimeout(0);
}
}
});
client.stop();
client.setIdleTimeout(idleTimeout);
client.start();
final CountDownLatch latch = new CountDownLatch(1);
client.newRequest(newURI()).path("/timeout").send(result -> {
if (result.isFailed())
latch.countDown();
});
Assert.assertTrue(latch.await(2 * idleTimeout, TimeUnit.MILLISECONDS));
// Verify that after the timeout we can make another request.
ContentResponse response = client.newRequest(newURI()).send();
Assert.assertEquals(HttpStatus.OK_200, response.getStatus());
}
use of javax.servlet.AsyncContext in project jetty.project by eclipse.
the class HttpClientIdleTimeoutTest method testRequestIdleTimeout.
@Test
public void testRequestIdleTimeout() throws Exception {
start(new AbstractHandler() {
@Override
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
baseRequest.setHandled(true);
if (target.equals("/timeout")) {
AsyncContext asyncContext = request.startAsync();
asyncContext.setTimeout(0);
}
}
});
final CountDownLatch latch = new CountDownLatch(1);
client.newRequest(newURI()).path("/timeout").idleTimeout(idleTimeout, TimeUnit.MILLISECONDS).send(result -> {
if (result.isFailed())
latch.countDown();
});
Assert.assertTrue(latch.await(2 * idleTimeout, TimeUnit.MILLISECONDS));
// Verify that after the timeout we can make another request.
ContentResponse response = client.newRequest(newURI()).send();
Assert.assertEquals(HttpStatus.OK_200, response.getStatus());
}
use of javax.servlet.AsyncContext in project atmosphere by Atmosphere.
the class AtmosphereRequestImpl method startAsync.
@Override
public AsyncContext startAsync(ServletRequest request, ServletResponse response) {
AsyncContext ac;
if (AtmosphereResource.TRANSPORT.WEBSOCKET == resource().transport()) {
noopsAsyncContextStarted = true;
ac = new NoOpsAsyncContext(request, response);
} else {
ac = b.request.startAsync(request, response);
}
return isCompletionAware() ? new CompletionAwareAsyncContext(ac, (CompletionAware) resource().getResponse()) : ac;
}
use of javax.servlet.AsyncContext in project atmosphere by Atmosphere.
the class AtmosphereResourceTest method verifyTestCompletionAwareForGetAsync.
private void verifyTestCompletionAwareForGetAsync(boolean aware) throws IOException {
if (aware) {
framework.addInitParameter(ApplicationConfig.RESPONSE_COMPLETION_AWARE, "true");
}
AtmosphereRequest request = AtmosphereRequestImpl.newInstance();
AtmosphereResponseImpl response = mock(AtmosphereResponseImpl.class);
AtmosphereResourceImpl res = new AtmosphereResourceImpl();
res.initialize(framework.getAtmosphereConfig(), framework.getBroadcasterFactory().get(), request, response, null, null);
res.transport(AtmosphereResource.TRANSPORT.WEBSOCKET);
request.setAttribute(FrameworkConfig.ATMOSPHERE_RESOURCE, res);
AsyncContext ac = request.getAsyncContext();
verify(response, times(0)).onComplete();
ac.complete();
verify(response, times(aware ? 1 : 0)).onComplete();
}
Aggregations