@Test public void testFormParameters() throws Exception { final Map<String, String[]> patternMap = new HashMap<String, String[]>(); patternMap.put("title", new String[] {"Developing PaaS Components"}); patternMap.put("authors", new String[] {"Shalini M"}); patternMap.put("price", new String[] {"100$"}); final NetworkListener listener = httpServer.getListener(LISTENER_NAME); startHttpServer( new HttpHandler() { @Override public void service(Request request, Response response) throws Exception { final Map<String, String[]> paramMap = request.getParameterMap(); boolean isOk = paramMap.size() == patternMap.size(); if (isOk) { // if sizes are equal - compare content for (Map.Entry<String, String[]> patternEntry : patternMap.entrySet()) { final String key = patternEntry.getKey(); final String[] value = patternEntry.getValue(); isOk = paramMap.containsKey(key) && Arrays.equals(value, paramMap.get(key)); if (!isOk) break; } } if (isOk) { response.setStatus(200, "FINE"); } else { response.setStatus(500, "Attributes don't match"); } } }, "/bookstore/BookStoreServlet"); final MemoryManager mm = listener.getTransport().getMemoryManager(); final Buffer requestPart1 = Buffers.wrap(mm, Utils.loadResourceFile("form-params-payload1.dat")); final Buffer requestPart2 = Buffers.wrap(mm, Utils.loadResourceFile("form-params-payload2.dat")); Buffer responseBuffer = send("localhost", PORT, Buffers.appendBuffers(mm, requestPart1, requestPart2)) .get(10, TimeUnit.SECONDS); // Successful response length is 37 bytes. This includes the status // line and a content-length boolean isFailure = responseBuffer.remaining() != 37; if (isFailure) { byte[] response = new byte[responseBuffer.remaining()]; responseBuffer.get(response); String hex = toHexString(response); fail("unexpected response length=" + response.length + " content=[" + hex + "]"); } }
@Test public void testSslParams() throws Exception { final NetworkListener listener = httpServer.getListener(LISTENER_NAME); startHttpServer( new HttpHandler() { @Override public void service(Request request, Response response) throws Exception { boolean isOk = request.isSecure(); String error = "unknown"; if (isOk) { try { assertEquals( (Integer) 256, (Integer) request.getAttribute(SSLSupport.KEY_SIZE_KEY)); assertNotNull(request.getAttribute(SSLSupport.SESSION_ID_KEY)); assertNotNull(request.getAttribute(SSLSupport.CIPHER_SUITE_KEY)); assertNotNull(request.getAttribute(SSLSupport.CERTIFICATE_KEY)); } catch (Exception e) { error = e.getClass().getName() + ": " + e.getMessage(); isOk = false; } } if (isOk) { response.setStatus(200, "FINE"); } else { response.setStatus(500, error); } } }); final MemoryManager mm = listener.getTransport().getMemoryManager(); final Buffer request = Buffers.wrap(mm, Utils.loadResourceFile("get-secured.dat")); Buffer responseBuffer = send("localhost", PORT, request).get(10, TimeUnit.SECONDS); // Successful response length is 37 bytes. This includes the status // line and a content-length boolean isFailure = responseBuffer.remaining() != 37; if (isFailure) { byte[] response = new byte[responseBuffer.remaining()]; responseBuffer.get(response); String hex = toHexString(response); fail("unexpected response length=" + response.length + " content=[" + hex + "]"); } }
@Test public void testShutdownHandler() throws Exception { final FutureImpl<Boolean> shutdownFuture = SafeFutureImpl.create(); final ShutdownHandler shutDownHandler = new ShutdownHandler() { @Override public void onShutdown(Connection initiator) { shutdownFuture.result(true); } }; AjpAddOn myAjpAddon = new AjpAddOn() { @Override protected AjpHandlerFilter createAjpHandlerFilter() { final AjpHandlerFilter filter = new AjpHandlerFilter(); filter.addShutdownHandler(shutDownHandler); return filter; } }; final NetworkListener listener = httpServer.getListener(LISTENER_NAME); listener.deregisterAddOn(ajpAddon); listener.registerAddOn(myAjpAddon); startHttpServer( new HttpHandler() { @Override public void service(Request request, Response response) throws Exception {} }, "/"); final MemoryManager mm = listener.getTransport().getMemoryManager(); final Buffer request = mm.allocate(512); request.put((byte) 0x12); request.put((byte) 0x34); request.putShort((short) 1); request.put(AjpConstants.JK_AJP13_SHUTDOWN); request.flip(); send("localhost", PORT, request); final Boolean b = shutdownFuture.get(10, TimeUnit.SECONDS); assertTrue(b); }
public static void main(String[] args) throws IOException, URISyntaxException, InterruptedException { final int port = System.getenv("PORT") != null ? Integer.valueOf(System.getenv("PORT")) : 8080; final URI baseUri = UriBuilder.fromUri("http://0.0.0.0/").port(port).build(); final Application application = Application.builder( ResourceConfig.builder().packages(BarServer.class.getPackage().getName()).build()) .build(); application.addModules(new JsonJacksonModule()); final HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer(baseUri, application); httpServer .getServerConfiguration() .addHttpHandler(new StaticHttpHandler("src/main/webapp"), CONTENT_PATH); for (NetworkListener networkListener : httpServer.getListeners()) { if (System.getenv("FILE_CACHE_ENABLED") == null) { networkListener.getFileCache().setEnabled(false); } } Runtime.getRuntime() .addShutdownHook( new Thread() { @Override public void run() { httpServer.stop(); } }); MongoURI mongolabUri = new MongoURI( System.getenv("MONGOLAB_URI") != null ? System.getenv("MONGOLAB_URI") : "mongodb://127.0.0.1:27017/hello"); Mongo m = new Mongo(mongolabUri); mongoDB = m.getDB(mongolabUri.getDatabase()); if ((mongolabUri.getUsername() != null) && (mongolabUri.getPassword() != null)) { mongoDB.authenticate(mongolabUri.getUsername(), mongolabUri.getPassword()); } contentUrl = System.getenv("CONTENT_URL") != null ? System.getenv("CONTENT_URL") : CONTENT_PATH; Thread.currentThread().join(); }
private HttpServer createHttpServer() { final HttpServer server = new HttpServer(); final int requestSize = (int) currentConfig.getMaxRequestSize(); final ServerConfiguration serverConfig = server.getServerConfiguration(); serverConfig.setMaxBufferedPostSize(requestSize); serverConfig.setMaxFormPostSize(requestSize); serverConfig.setDefaultQueryEncoding(Charsets.UTF8_CHARSET); if (keepStats()) { setHttpStatsProbe(server); } // Configure the network listener final NetworkListener listener = new NetworkListener( "Rest2LDAP", NetworkListener.DEFAULT_NETWORK_HOST, initConfig.getListenPort()); server.addListener(listener); // Configure the network transport final TCPNIOTransport transport = listener.getTransport(); transport.setReuseAddress(currentConfig.isAllowTCPReuseAddress()); transport.setKeepAlive(currentConfig.isUseTCPKeepAlive()); transport.setTcpNoDelay(currentConfig.isUseTCPNoDelay()); transport.setWriteTimeout(currentConfig.getMaxBlockedWriteTimeLimit(), TimeUnit.MILLISECONDS); final int bufferSize = (int) currentConfig.getBufferSize(); transport.setReadBufferSize(bufferSize); transport.setWriteBufferSize(bufferSize); transport.setIOStrategy(SameThreadIOStrategy.getInstance()); final int numRequestHandlers = getNumRequestHandlers(currentConfig.getNumRequestHandlers(), friendlyName); transport.setSelectorRunnersCount(numRequestHandlers); transport.setServerConnectionBackLog(currentConfig.getAcceptBacklog()); // Configure SSL if (sslEngineConfigurator != null) { listener.setSecure(true); listener.setSSLEngineConfig(sslEngineConfigurator); } return server; }
public static void main(String[] args) throws Exception { final Server server = new DefaultServer(); server.socketAction( new Action<ServerSocket>() { @Override public void on(final ServerSocket socket) { System.out.println("on socket: " + socket.uri()); socket.on( "echo", new Action<Object>() { @Override public void on(Object data) { System.out.println("on echo event: " + data); socket.send("echo", data); } }); socket.on( "chat", new Action<Object>() { @Override public void on(Object data) { System.out.println("on chat event: " + data); server.all().send("chat", data); } }); } }); HttpTransportServer httpTransportServer = new HttpTransportServer().transportAction(server); WebSocketTransportServer wsTransportServer = new WebSocketTransportServer().transportAction(server); HttpServer httpServer = HttpServer.createSimpleServer(); ServerConfiguration config = httpServer.getServerConfiguration(); config.addHttpHandler(new VibeHttpHandler().httpAction(httpTransportServer), "/vibe"); NetworkListener listener = httpServer.getListener("grizzly"); listener.registerAddOn(new WebSocketAddOn()); WebSocketEngine.getEngine() .register("", "/vibe", new VibeWebSocketApplication().wsAction(wsTransportServer)); httpServer.start(); System.in.read(); }
@Test public void testNullAttribute() throws Exception { final NetworkListener listener = httpServer.getListener(LISTENER_NAME); startHttpServer( new HttpHandler() { @Override public void service(Request request, Response response) throws Exception { final Set<String> attributeNames = request.getAttributeNames(); final boolean isOk = attributeNames.contains("JK_LB_ACTIVATION") && request.getAttribute("JK_LB_ACTIVATION") == null && attributeNames.contains("AJP_REMOTE_PORT") && "60955".equals(request.getAttribute("AJP_REMOTE_PORT")); if (isOk) { response.setStatus(200, "FINE"); } else { response.setStatus(500, "Attributes don't match"); } } }, "/SimpleWebApp/SimpleServlet"); final MemoryManager mm = listener.getTransport().getMemoryManager(); final Buffer request = Buffers.wrap(mm, Utils.loadResourceFile("null-attr-payload.dat")); Buffer responseBuffer = send("localhost", PORT, request).get(10, TimeUnit.SECONDS); // Successful response length is 37 bytes. This includes the status // line and a content-length boolean isFailure = responseBuffer.remaining() != 37; if (isFailure) { byte[] response = new byte[responseBuffer.remaining()]; responseBuffer.get(response); String hex = toHexString(response); fail("unexpected response length=" + response.length + " content=[" + hex + "]"); } }
@Test public void testAddresses() throws Exception { final String expectedRemoteAddr = "10.163.27.8"; final String expectedLocalAddr = "10.163.25.1"; final NetworkListener listener = httpServer.getListener(LISTENER_NAME); startHttpServer( new HttpHandler() { @Override public void service(Request request, Response response) throws Exception { boolean isOk = false; final StringBuilder errorBuilder = new StringBuilder(); try { String result = request.getRemoteAddr(); isOk = expectedRemoteAddr.equals(result); if (!isOk) { errorBuilder .append("Remote host don't match. Expected ") .append(expectedRemoteAddr) .append(" but was ") .append(result) .append('\n'); } String localName = request.getLocalName(); String localAddr = request.getLocalAddr(); isOk = expectedLocalAddr.equals(localName) && localName.equals(localAddr); if (!isOk) { errorBuilder .append("Local address and host don't match. Expected=") .append(expectedLocalAddr) .append(" Addr=") .append(localAddr) .append(" name=") .append(localName) .append('\n'); } } catch (Exception e) { errorBuilder.append(e.toString()); } if (isOk) { response.setStatus(200, "FINE"); } else { LOGGER.warning(errorBuilder.toString()); response.setStatus(500, "ERROR"); } } }); final MemoryManager mm = listener.getTransport().getMemoryManager(); final Buffer request = Buffers.wrap(mm, Utils.loadResourceFile("peer-addr-check.dat")); Buffer responseBuffer = send("localhost", PORT, request).get(60, TimeUnit.SECONDS); // Successful response length is 37 bytes. This includes the status // line and a content-length boolean isFailure = responseBuffer.remaining() != 37; if (isFailure) { byte[] response = new byte[responseBuffer.remaining()]; responseBuffer.get(response); String hex = toHexString(response); fail("unexpected response length=" + response.length + " content=[" + hex + "]"); } }