package org.limewire.net; import java.net.ConnectException; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketTimeoutException; import junit.framework.Test; import org.limewire.concurrent.ManagedThread; import org.limewire.io.SimpleNetworkInstanceUtils; import org.limewire.util.BaseTestCase; import org.limewire.util.StringUtils; public class SocketAcceptorTest extends BaseTestCase { private int LISTEN_PORT = 9999; private SocketAcceptor acceptor; public SocketAcceptorTest(String name) { super(name); } public static Test suite() { return buildTestSuite(SocketAcceptorTest.class); } @Override public void setUp() throws Exception { } @Override public void tearDown() throws Exception { if (acceptor != null) { acceptor.bind(0); } } public void testSetPort() throws Exception { acceptor = new SocketAcceptor(new ConnectionDispatcherImpl(new SimpleNetworkInstanceUtils())); acceptor.bind(LISTEN_PORT); write(LISTEN_PORT, "Hello"); acceptor.bind(LISTEN_PORT + 1); try { write(LISTEN_PORT, "Hello"); fail("Expected connect exception"); } catch (ConnectException expected) { } catch(SocketTimeoutException expected) { // STE is thrown on Windows instead of CE?!? } } private void write(final int port, final String text) throws Exception { final Exception[] error = new Exception[1]; final Throwable throwable = new Throwable(); Thread t = new ManagedThread() { @Override public void run() { Socket s; try { s = new Socket(); s.connect(new InetSocketAddress("localhost", port), 200); s.getOutputStream().write(StringUtils.toAsciiBytes(text)); } catch (Exception e) { error[0] = e; } } }; t.start(); t.join(); if (error[0] != null) { throw (Exception)error[0].initCause(throwable); } } }