use of com.developmentontheedge.be5.api.Session in project jetty.project by eclipse.
the class SessionFailureTest method testWrongPreface.
@Test
public void testWrongPreface() throws Exception {
final CountDownLatch latch = new CountDownLatch(1);
start(new ServerSessionListener.Adapter() {
@Override
public void onFailure(Session session, Throwable failure) {
latch.countDown();
}
});
try (Socket socket = new Socket("localhost", connector.getLocalPort())) {
// Preface starts with byte 0x50, send something different.
OutputStream output = socket.getOutputStream();
output.write(0x0);
output.flush();
Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
// The server will reply with a GOAWAY frame, and then shutdown.
// Read until EOF.
socket.setSoTimeout(1000);
InputStream input = socket.getInputStream();
while (true) {
if (input.read() < 0)
break;
}
}
}
use of com.developmentontheedge.be5.api.Session in project jetty.project by eclipse.
the class SessionFailureTest method testWriteFailure.
@Test
public void testWriteFailure() throws Exception {
final CountDownLatch writeLatch = new CountDownLatch(1);
final CountDownLatch serverFailureLatch = new CountDownLatch(1);
start(new ServerSessionListener.Adapter() {
@Override
public Stream.Listener onNewStream(Stream stream, HeadersFrame frame) {
// Forcibly close the connection.
((HTTP2Session) stream.getSession()).getEndPoint().close();
// Now try to write something: it should fail.
stream.headers(frame, new Callback() {
@Override
public void failed(Throwable x) {
writeLatch.countDown();
}
});
return null;
}
@Override
public void onFailure(Session session, Throwable failure) {
serverFailureLatch.countDown();
}
});
final CountDownLatch clientFailureLatch = new CountDownLatch(1);
Session session = newClient(new Session.Listener.Adapter() {
@Override
public void onFailure(Session session, Throwable failure) {
clientFailureLatch.countDown();
}
});
HeadersFrame frame = new HeadersFrame(newRequest("GET", new HttpFields()), null, true);
Promise<Stream> promise = new Promise.Adapter<>();
session.newStream(frame, promise, null);
Assert.assertTrue(writeLatch.await(5, TimeUnit.SECONDS));
Assert.assertTrue(serverFailureLatch.await(5, TimeUnit.SECONDS));
Assert.assertTrue(clientFailureLatch.await(5, TimeUnit.SECONDS));
long start = System.nanoTime();
long now = System.nanoTime();
while (((HTTP2Session) session).getEndPoint().isOpen()) {
if (TimeUnit.NANOSECONDS.toSeconds(now - start) > 5)
Assert.fail();
Thread.sleep(10);
now = System.nanoTime();
}
}
use of com.developmentontheedge.be5.api.Session in project jetty.project by eclipse.
the class StreamCloseTest method testRequestClosedResponseClosedClosesStream.
@Test
public void testRequestClosedResponseClosedClosesStream() throws Exception {
final CountDownLatch latch = new CountDownLatch(2);
start(new ServerSessionListener.Adapter() {
@Override
public Stream.Listener onNewStream(final Stream stream, HeadersFrame frame) {
MetaData.Response metaData = new MetaData.Response(HttpVersion.HTTP_2, 200, new HttpFields());
HeadersFrame response = new HeadersFrame(stream.getId(), metaData, null, true);
stream.headers(response, new Callback() {
@Override
public void succeeded() {
Assert.assertTrue(stream.isClosed());
Assert.assertEquals(0, stream.getSession().getStreams().size());
latch.countDown();
}
});
return null;
}
});
Session session = newClient(new Session.Listener.Adapter());
HeadersFrame frame = new HeadersFrame(newRequest("GET", new HttpFields()), null, true);
FuturePromise<Stream> promise = new FuturePromise<>();
session.newStream(frame, promise, new Stream.Listener.Adapter() {
@Override
public void onHeaders(Stream stream, HeadersFrame frame) {
// The stream promise may not be notified yet here.
latch.countDown();
}
});
Stream stream = promise.get(5, TimeUnit.SECONDS);
Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
Assert.assertTrue(stream.isClosed());
}
use of com.developmentontheedge.be5.api.Session in project jetty.project by eclipse.
the class ProxyProtocolTest method test_PROXY_GET_v2.
@Test
public void test_PROXY_GET_v2() throws Exception {
startServer(new AbstractHandler() {
@Override
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
try {
Assert.assertEquals("10.0.0.4", request.getRemoteAddr());
Assert.assertEquals(33824, request.getRemotePort());
Assert.assertEquals("10.0.0.4", request.getLocalAddr());
Assert.assertEquals(8888, request.getLocalPort());
} catch (Throwable th) {
th.printStackTrace();
response.setStatus(500);
}
baseRequest.setHandled(true);
}
});
String request1 = "0D0A0D0A000D0A515549540A211100140A0000040A000004842022B82000050000000000";
SocketChannel channel = SocketChannel.open();
channel.connect(new InetSocketAddress("localhost", connector.getLocalPort()));
channel.write(ByteBuffer.wrap(TypeUtil.fromHexString(request1)));
FuturePromise<Session> promise = new FuturePromise<>();
client.accept(null, channel, new Session.Listener.Adapter(), promise);
Session session = promise.get(5, TimeUnit.SECONDS);
HttpFields fields = new HttpFields();
String uri = "http://localhost:" + connector.getLocalPort() + "/";
MetaData.Request metaData = new MetaData.Request("GET", new HttpURI(uri), HttpVersion.HTTP_2, fields);
HeadersFrame frame = new HeadersFrame(metaData, null, true);
CountDownLatch latch = new CountDownLatch(1);
session.newStream(frame, new Promise.Adapter<>(), new Stream.Listener.Adapter() {
@Override
public void onHeaders(Stream stream, HeadersFrame frame) {
MetaData.Response response = (MetaData.Response) frame.getMetaData();
Assert.assertEquals(HttpStatus.OK_200, response.getStatus());
if (frame.isEndStream())
latch.countDown();
}
});
Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
}
use of com.developmentontheedge.be5.api.Session in project jetty.project by eclipse.
the class ProxyTest method testServerBigDownloadSlowClient.
@Test
public void testServerBigDownloadSlowClient() throws Exception {
final CountDownLatch serverLatch = new CountDownLatch(1);
final byte[] content = new byte[1024 * 1024];
startServer(new HttpServlet() {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getOutputStream().write(content);
serverLatch.countDown();
}
});
Map<String, String> params = new HashMap<>();
params.put("proxyTo", "http://localhost:" + serverConnector.getLocalPort());
startProxy(new AsyncProxyServlet.Transparent() {
@Override
protected void sendProxyRequest(HttpServletRequest clientRequest, HttpServletResponse proxyResponse, Request proxyRequest) {
proxyRequest.version(HttpVersion.HTTP_1_1);
super.sendProxyRequest(clientRequest, proxyResponse, proxyRequest);
}
}, params);
startClient();
final CountDownLatch clientLatch = new CountDownLatch(1);
Session session = newClient(new Session.Listener.Adapter());
MetaData.Request metaData = newRequest("GET", "/", new HttpFields());
HeadersFrame frame = new HeadersFrame(metaData, null, true);
session.newStream(frame, new Promise.Adapter<>(), new Stream.Listener.Adapter() {
@Override
public void onData(Stream stream, DataFrame frame, Callback callback) {
try {
TimeUnit.MILLISECONDS.sleep(1);
callback.succeeded();
if (frame.isEndStream())
clientLatch.countDown();
} catch (InterruptedException x) {
callback.failed(x);
}
}
});
Assert.assertTrue(serverLatch.await(15, TimeUnit.SECONDS));
Assert.assertTrue(clientLatch.await(15, TimeUnit.SECONDS));
}
Aggregations