Outgoing connection test.

This commit is contained in:
akwizgran
2011-10-06 12:59:27 +01:00
parent e7b404b7b3
commit f23e89c80e

View File

@@ -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) {