@Test
public void pushApiTest() throws Exception {
// start the test server
class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Request jettyRequest = (Request) req;
if (jettyRequest.getRequestURI().equals("/myrichpage.html") && jettyRequest.isPushSupported()) {
jettyRequest.getPushBuilder()
.path("/pictures/logo.jpg")
.push();
}
if (jettyRequest.getRequestURI().equals("/myrichpage.html")) {
resp.getWriter().write(" ...");
} else {
resp.getWriter().write("���� ?JFIF d d �� ?Ducky ? P �...");
}
}
};
WebServer server = WebServer.servlet(new MyServlet())
.start();
// create a low-level jetty HTTP/2 client
HTTP2Client lowLevelClient = new HTTP2Client();
lowLevelClient.start();
// create a new session which will open a (multiplexed) connection to the server
FuturePromise sessionFuture = new FuturePromise<>();
lowLevelClient.connect(new InetSocketAddress("localhost", server.getLocalport()), new Session.Listener.Adapter(), sessionFuture);
Session session = sessionFuture.get();
// create the header frame
MetaData.Request metaData = new MetaData.Request("GET", HttpScheme.HTTP, new HostPortHttpField("localhost:" + server.getLocalport()), "/myrichpage.html", HttpVersion.HTTP_2, new HttpFields());
HeadersFrame frame = new HeadersFrame(1, metaData, null, true);
// ... and perform the http transaction
PrintingFramesHandler framesHandler = new PrintingFramesHandler();
session.newStream(frame, new Promise.Adapter(), framesHandler);
// wait until response is received (PrintingFramesHandler will write the response frame to console)
framesHandler.getCompletedFuture().get();
// shut down the client and server
lowLevelClient.stop();
server.stop();
}