@BeforeClass @Override public void setUpGlobal() throws Exception { port1 = findFreePort(); _connector = new ServerConnector(getServer()); _connector.setPort(port1); addConnector(_connector); port2 = findFreePort(); final ServerConnector connector2 = new ServerConnector(getServer()); connector2.setPort(port2); addConnector(connector2); WebSocketServlet _wsHandler = getWebSocketHandler(); HandlerList list = new HandlerList(); list.addHandler(new HandlerWrapper() { @Override public void handle(String s, Request request, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException, ServletException { if (request.getLocalPort() == port2) { httpServletResponse.sendRedirect(getTargetUrl()); } } }); ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath("/"); ServletHolder echo = new ServletHolder(_wsHandler); context.addServlet(echo, "/*"); list.addHandler(context); setHandler(list); start(); log.info("Local HTTP server started successfully"); }
@Override public void handle(String s, Request request, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException, ServletException { if (request.getLocalPort() == port2) { httpServletResponse.sendRedirect(getTargetUrl()); } } });
@Test(timeOut = 60000) public void testRedirectToWSResource() throws Exception { try (AsyncHttpClient client = getAsyncHttpClient(new AsyncHttpClientConfig.Builder().setFollowRedirect(true).build())) { final CountDownLatch latch = new CountDownLatch(1); final AtomicReference<String> text = new AtomicReference<>(""); WebSocket websocket = client.prepareGet(getRedirectURL()).execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(new WebSocketListener() { @Override public void onOpen(com.ning.http.client.ws.WebSocket websocket) { text.set("OnOpen"); latch.countDown(); } @Override public void onClose(com.ning.http.client.ws.WebSocket websocket) { } @Override public void onError(Throwable t) { t.printStackTrace(); latch.countDown(); } }).build()).get(); latch.await(); assertEquals(text.get(), "OnOpen"); websocket.close(); } }