package org.webpieces.nio.api.integ; import java.net.InetSocketAddress; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import org.webpieces.asyncserver.api.AsyncConfig; import org.webpieces.asyncserver.api.AsyncServer; import org.webpieces.asyncserver.api.AsyncServerManager; import org.webpieces.asyncserver.api.AsyncServerMgrFactory; import org.webpieces.data.api.BufferCreationPool; import org.webpieces.data.api.BufferPool; import org.webpieces.nio.api.ChannelManager; import org.webpieces.nio.api.ChannelManagerFactory; import org.webpieces.util.threading.NamedThreadFactory; public class IntegTestEchoClientToOurServer { //private static final Logger log = LoggerFactory.getLogger(IntegTestEchoClientToOurServer.class); /** * Here, we will simulate a bad hacker client that sets his side so_timeout to infinite * and then refuses to read response data back in but keeps writing into our server to * crash the server as it backs up on responses....ie. we keep receiving requests and holding * on to them so memory keeps growing and growing or our write queue keeps growing unbounded * * so this test ensures we fix that scenario * @throws InterruptedException */ public static void main(String[] args) throws InterruptedException { new IntegTestEchoClientToOurServer().testSoTimeoutOnSocket(); } public void testSoTimeoutOnSocket() throws InterruptedException { EchoClient client = new EchoClient(); Executor executor = Executors.newFixedThreadPool(10, new NamedThreadFactory("serverThread")); BufferPool pool = new BufferCreationPool(); ChannelManagerFactory factory = ChannelManagerFactory.createFactory(); ChannelManager mgr = factory.createMultiThreadedChanMgr("server", pool, executor); AsyncServerManager serverMgr = AsyncServerMgrFactory.createAsyncServer(mgr); AsyncServer server = serverMgr.createTcpServer(new AsyncConfig("tcpServer"), new IntegTestLocalhostServerListener()); server.start(new InetSocketAddress(8080)); client.start(8080); synchronized(this) { this.wait(); } } }