diff --git a/test/net/sf/briar/plugins/socket/SimpleSocketPluginTest.java b/test/net/sf/briar/plugins/socket/SimpleSocketPluginTest.java index 6741f8401132a223f19339a7bcbbefffd72a8b2d..96f39f4b21fdf15eaa5a05b08b1fb63bf0f82096 100644 --- a/test/net/sf/briar/plugins/socket/SimpleSocketPluginTest.java +++ b/test/net/sf/briar/plugins/socket/SimpleSocketPluginTest.java @@ -2,11 +2,15 @@ package net.sf.briar.plugins.socket; import java.io.IOException; import java.net.InetSocketAddress; +import java.net.ServerSocket; import java.net.Socket; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; import junit.framework.TestCase; import net.sf.briar.api.ContactId; @@ -33,7 +37,7 @@ public class SimpleSocketPluginTest extends TestCase { } @Test - public void testBindAndAccept() throws Exception { + public void testIncomingConnection() throws Exception { StubCallback callback = new StubCallback(); localProperties.put("host", "127.0.0.1"); localProperties.put("port", "0"); @@ -66,6 +70,46 @@ public class SimpleSocketPluginTest extends TestCase { } catch(IOException expected) {} } + @Test + public void testOutgoingConnection() throws Exception { + StubCallback callback = new StubCallback(); + SimpleSocketPlugin plugin = + new SimpleSocketPlugin(new ImmediateExecutor(), 10); + plugin.start(localProperties, remoteProperties, config, callback); + // Listen on a local port + final ServerSocket ss = new ServerSocket(); + ss.bind(new InetSocketAddress("127.0.0.1", 0), 10); + int port = ss.getLocalPort(); + final CountDownLatch latch = new CountDownLatch(1); + final AtomicBoolean error = new AtomicBoolean(false); + new Thread() { + @Override + public void run() { + try { + ss.accept(); + latch.countDown(); + } catch(IOException e) { + error.set(true); + } + } + }.start(); + // Tell the plugin about the port + Map<String, String> properties = new TreeMap<String, String>(); + properties.put("host", "127.0.0.1"); + properties.put("port", String.valueOf(port)); + plugin.setRemoteProperties(contactId, properties); + // Connect to the port + StreamTransportConnection conn = plugin.createConnection(contactId); + assertNotNull(conn); + // Check that the connection was accepted + assertTrue(latch.await(1, TimeUnit.SECONDS)); + assertFalse(error.get()); + // Clean up + conn.getInputStream().close(); // FIXME: Change the API + ss.close(); + plugin.stop(); + } + private static class ImmediateExecutor implements Executor { public void execute(Runnable r) {