use of org.eclipse.jetty.client.util.BufferingResponseListener in project dropwizard by dropwizard.
the class AbstractHttp2Test method performManyAsyncRequests.
protected void performManyAsyncRequests(HttpClient client, String url) throws InterruptedException {
final int amount = 100;
final CountDownLatch latch = new CountDownLatch(amount);
for (int i = 0; i < amount; i++) {
client.newRequest(url).send(new BufferingResponseListener() {
@Override
public void onComplete(Result result) {
assertThat(result.getResponse().getVersion()).isEqualTo(HttpVersion.HTTP_2);
assertThat(result.getResponse().getStatus()).isEqualTo(200);
assertThat(getContentAsString(Charsets.UTF_8)).isEqualTo(FakeApplication.HELLO_WORLD);
latch.countDown();
}
});
}
assertThat(latch.await(30, TimeUnit.SECONDS)).isTrue();
}
use of org.eclipse.jetty.client.util.BufferingResponseListener in project jetty.project by eclipse.
the class AsyncIOServletTest method testAsyncIntercepted.
@Test
public void testAsyncIntercepted() throws Exception {
start(new HttpServlet() {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.err.println("Service " + request);
final HttpInput httpInput = ((Request) request).getHttpInput();
httpInput.addInterceptor(new HttpInput.Interceptor() {
int state = 0;
Content saved;
@Override
public Content readFrom(Content content) {
// System.err.printf("readFrom s=%d saved=%b %s%n",state,saved!=null,content);
switch(state) {
case 0:
// null transform
if (content.isEmpty())
state++;
return null;
case 1:
{
// copy transform
if (content.isEmpty()) {
state++;
return content;
}
ByteBuffer copy = wrap(toArray(content.getByteBuffer()));
content.skip(copy.remaining());
return new Content(copy);
}
case 2:
// byte by byte
if (content.isEmpty()) {
state++;
return content;
}
byte[] b = new byte[1];
int l = content.get(b, 0, 1);
return new Content(wrap(b, 0, l));
case 3:
{
// double vision
if (content.isEmpty()) {
if (saved == null) {
state++;
return content;
}
Content copy = saved;
saved = null;
return copy;
}
byte[] data = toArray(content.getByteBuffer());
content.skip(data.length);
saved = new Content(wrap(data));
return new Content(wrap(data));
}
default:
return null;
}
}
});
AsyncContext asyncContext = request.startAsync();
ServletInputStream input = request.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
input.setReadListener(new ReadListener() {
@Override
public void onDataAvailable() throws IOException {
while (input.isReady()) {
int b = input.read();
if (b > 0) {
// System.err.printf("0x%2x %s %n", b, Character.isISOControl(b)?"?":(""+(char)b));
out.write(b);
} else if (b < 0)
return;
}
}
@Override
public void onAllDataRead() throws IOException {
response.getOutputStream().write(out.toByteArray());
asyncContext.complete();
}
@Override
public void onError(Throwable x) {
}
});
}
});
DeferredContentProvider contentProvider = new DeferredContentProvider();
CountDownLatch clientLatch = new CountDownLatch(1);
String expected = "S0" + "S1" + "S2" + "S3S3" + "S4" + "S5" + "S6";
client.newRequest(newURI()).method(HttpMethod.POST).path(servletPath).content(contentProvider).send(new BufferingResponseListener() {
@Override
public void onComplete(Result result) {
if (result.isSucceeded()) {
Response response = result.getResponse();
assertThat(response.getStatus(), Matchers.equalTo(HttpStatus.OK_200));
assertThat(getContentAsString(), Matchers.equalTo(expected));
clientLatch.countDown();
}
}
});
contentProvider.offer(BufferUtil.toBuffer("S0"));
contentProvider.flush();
contentProvider.offer(BufferUtil.toBuffer("S1"));
contentProvider.flush();
contentProvider.offer(BufferUtil.toBuffer("S2"));
contentProvider.flush();
contentProvider.offer(BufferUtil.toBuffer("S3"));
contentProvider.flush();
contentProvider.offer(BufferUtil.toBuffer("S4"));
contentProvider.flush();
contentProvider.offer(BufferUtil.toBuffer("S5"));
contentProvider.flush();
contentProvider.offer(BufferUtil.toBuffer("S6"));
contentProvider.close();
Assert.assertTrue(clientLatch.await(10, TimeUnit.SECONDS));
}
use of org.eclipse.jetty.client.util.BufferingResponseListener in project jetty.project by eclipse.
the class AsyncIOServletTest method testOtherThreadOnAllDataRead.
@Test
public void testOtherThreadOnAllDataRead() throws Exception {
String success = "SUCCESS";
start(new HttpServlet() {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
assertScope();
response.flushBuffer();
AsyncContext async = request.startAsync();
async.setTimeout(0);
ServletInputStream input = request.getInputStream();
ServletOutputStream output = response.getOutputStream();
if (request.getDispatcherType() == DispatcherType.ERROR)
throw new IllegalStateException();
input.setReadListener(new ReadListener() {
@Override
public void onDataAvailable() throws IOException {
assertScope();
async.start(() -> {
assertScope();
try {
sleep(1000);
if (!input.isReady())
throw new IllegalStateException();
if (input.read() != 'X')
throw new IllegalStateException();
if (!input.isReady())
throw new IllegalStateException();
if (input.read() != -1)
throw new IllegalStateException();
} catch (IOException x) {
throw new UncheckedIOException(x);
}
});
}
@Override
public void onAllDataRead() throws IOException {
output.write(success.getBytes(StandardCharsets.UTF_8));
async.complete();
}
@Override
public void onError(Throwable t) {
assertScope();
t.printStackTrace();
async.complete();
}
});
}
});
byte[] data = "X".getBytes(StandardCharsets.UTF_8);
CountDownLatch clientLatch = new CountDownLatch(1);
DeferredContentProvider content = new DeferredContentProvider();
client.newRequest(newURI()).method(HttpMethod.POST).path(servletPath).content(content).timeout(5, TimeUnit.SECONDS).send(new BufferingResponseListener() {
@Override
public void onComplete(Result result) {
if (result.isSucceeded()) {
Response response = result.getResponse();
String content = getContentAsString();
if (response.getStatus() == HttpStatus.OK_200 && success.equals(content))
clientLatch.countDown();
}
}
});
sleep(100);
content.offer(ByteBuffer.wrap(data));
content.close();
assertTrue(clientLatch.await(5, TimeUnit.SECONDS));
}
use of org.eclipse.jetty.client.util.BufferingResponseListener in project jetty.project by eclipse.
the class AsyncIOServletTest method testOnAllDataRead.
@Test
public void testOnAllDataRead() throws Exception {
String success = "SUCCESS";
start(new HttpServlet() {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
assertScope();
response.flushBuffer();
AsyncContext async = request.startAsync();
async.setTimeout(5000);
ServletInputStream in = request.getInputStream();
ServletOutputStream out = response.getOutputStream();
in.setReadListener(new ReadListener() {
@Override
public void onDataAvailable() throws IOException {
assertScope();
try {
sleep(1000);
if (!in.isReady())
throw new IllegalStateException();
if (in.read() != 'X')
throw new IllegalStateException();
if (!in.isReady())
throw new IllegalStateException();
if (in.read() != -1)
throw new IllegalStateException();
} catch (IOException x) {
throw new UncheckedIOException(x);
}
}
@Override
public void onAllDataRead() throws IOException {
assertScope();
out.write(success.getBytes(StandardCharsets.UTF_8));
async.complete();
}
@Override
public void onError(Throwable t) {
assertScope();
t.printStackTrace();
async.complete();
}
});
}
});
byte[] data = "X".getBytes(StandardCharsets.UTF_8);
CountDownLatch clientLatch = new CountDownLatch(1);
DeferredContentProvider content = new DeferredContentProvider() {
@Override
public long getLength() {
return data.length;
}
};
client.newRequest(newURI()).method(HttpMethod.POST).path(servletPath).content(content).timeout(5, TimeUnit.SECONDS).send(new BufferingResponseListener() {
@Override
public void onComplete(Result result) {
if (result.isSucceeded()) {
Response response = result.getResponse();
String content = getContentAsString();
if (response.getStatus() == HttpStatus.OK_200 && success.equals(content))
clientLatch.countDown();
}
}
});
sleep(100);
content.offer(ByteBuffer.wrap(data));
content.close();
assertTrue(clientLatch.await(5, TimeUnit.SECONDS));
}
use of org.eclipse.jetty.client.util.BufferingResponseListener in project jetty.project by eclipse.
the class HttpClientStreamTest method testUploadWithDeferredContentProviderRacingWithSend.
@Test
public void testUploadWithDeferredContentProviderRacingWithSend() throws Exception {
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);
IO.copy(request.getInputStream(), response.getOutputStream());
}
});
final CountDownLatch latch = new CountDownLatch(1);
final byte[] data = new byte[512];
final DeferredContentProvider content = new DeferredContentProvider() {
@Override
public void setListener(Listener listener) {
super.setListener(listener);
// Simulate a concurrent call
offer(ByteBuffer.wrap(data));
close();
}
};
client.newRequest("localhost", connector.getLocalPort()).scheme(getScheme()).content(content).send(new BufferingResponseListener() {
@Override
public void onComplete(Result result) {
if (result.isSucceeded() && result.getResponse().getStatus() == 200 && Arrays.equals(data, getContent()))
latch.countDown();
}
});
Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
}
Aggregations