From 51a4f2fd625f6c05a5300cf09f7941f4c159e3b8 Mon Sep 17 00:00:00 2001
From: akwizgran <michael@briarproject.org>
Date: Thu, 6 Dec 2012 13:10:14 +0000
Subject: [PATCH] Updated non-JUnit plugin tests and added tests for the modem
 plugin.

---
 .../sf/briar/plugins/DuplexClientTest.java    | 70 +++++++++++--------
 .../sf/briar/plugins/DuplexServerTest.java    | 62 +++++++++-------
 .../src/net/sf/briar/plugins/DuplexTest.java  | 25 +++----
 .../briar/plugins/modem/ModemClientTest.java  | 44 ++++++++++++
 .../briar/plugins/modem/ModemServerTest.java  | 33 +++++++++
 5 files changed, 164 insertions(+), 70 deletions(-)
 create mode 100644 briar-tests/src/net/sf/briar/plugins/modem/ModemClientTest.java
 create mode 100644 briar-tests/src/net/sf/briar/plugins/modem/ModemServerTest.java

diff --git a/briar-tests/src/net/sf/briar/plugins/DuplexClientTest.java b/briar-tests/src/net/sf/briar/plugins/DuplexClientTest.java
index 2ffdace5eb..942ff2bdd9 100644
--- a/briar-tests/src/net/sf/briar/plugins/DuplexClientTest.java
+++ b/briar-tests/src/net/sf/briar/plugins/DuplexClientTest.java
@@ -1,5 +1,7 @@
 package net.sf.briar.plugins;
 
+import static net.sf.briar.api.plugins.InvitationConstants.CONNECTION_TIMEOUT;
+
 import java.io.IOException;
 import java.util.Map;
 
@@ -17,37 +19,47 @@ public abstract class DuplexClientTest extends DuplexTest {
 		assert plugin != null;
 		// Start the plugin
 		System.out.println("Starting plugin");
-		plugin.start();
-		// Try to connect to the server
-		System.out.println("Creating connection");
-		DuplexTransportConnection d = plugin.createConnection(contactId);
-		if(d == null) {
-			System.out.println("Connection failed");
-		} else {
-			System.out.println("Connection created");
-			receiveChallengeSendResponse(d);
-		}
-		// Try to send an invitation
-		System.out.println("Sending invitation");
-		d = plugin.sendInvitation(getPseudoRandom(123), INVITATION_TIMEOUT);
-		if(d == null) {
-			System.out.println("Connection failed");
-		} else {
-			System.out.println("Connection created");
-			receiveChallengeSendResponse(d);
+		if(!plugin.start()) {
+			System.out.println("Plugin failed to start");
+			return;
 		}
-		// Try to accept an invitation
-		System.out.println("Accepting invitation");
-		d = plugin.acceptInvitation(getPseudoRandom(456), INVITATION_TIMEOUT);
-		if(d == null) {
-			System.out.println("Connection failed");
-		} else {
-			System.out.println("Connection created");
-			sendChallengeReceiveResponse(d);
+		try {
+			// Try to connect to the server
+			System.out.println("Creating connection");
+			DuplexTransportConnection d = plugin.createConnection(contactId);
+			if(d == null) {
+				System.out.println("Connection failed");
+				return;
+			} else {
+				System.out.println("Connection created");
+				receiveChallengeSendResponse(d);
+			}
+			// Try to send an invitation
+			System.out.println("Sending invitation");
+			d = plugin.sendInvitation(getPseudoRandom(123), CONNECTION_TIMEOUT);
+			if(d == null) {
+				System.out.println("Connection failed");
+				return;
+			} else {
+				System.out.println("Connection created");
+				receiveChallengeSendResponse(d);
+			}
+			// Try to accept an invitation
+			System.out.println("Accepting invitation");
+			d = plugin.acceptInvitation(getPseudoRandom(456),
+					CONNECTION_TIMEOUT);
+			if(d == null) {
+				System.out.println("Connection failed");
+				return;
+			} else {
+				System.out.println("Connection created");
+				sendChallengeReceiveResponse(d);
+			}
+		} finally {
+			// Stop the plugin
+			System.out.println("Stopping plugin");
+			plugin.stop();
 		}
-		// Stop the plugin
-		System.out.println("Stopping plugin");
-		plugin.stop();
 	}
 
 	protected static class ClientCallback implements DuplexPluginCallback {
diff --git a/briar-tests/src/net/sf/briar/plugins/DuplexServerTest.java b/briar-tests/src/net/sf/briar/plugins/DuplexServerTest.java
index 956eea2d33..d9d75c7986 100644
--- a/briar-tests/src/net/sf/briar/plugins/DuplexServerTest.java
+++ b/briar-tests/src/net/sf/briar/plugins/DuplexServerTest.java
@@ -1,5 +1,8 @@
 package net.sf.briar.plugins;
 
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static net.sf.briar.api.plugins.InvitationConstants.CONNECTION_TIMEOUT;
+
 import java.util.Map;
 import java.util.concurrent.CountDownLatch;
 
@@ -18,32 +21,43 @@ public abstract class DuplexServerTest extends DuplexTest {
 		assert plugin != null;
 		// Start the plugin
 		System.out.println("Starting plugin");
-		plugin.start();
-		// Wait for a connection
-		System.out.println("Waiting for connection");
-		callback.latch.await();
-		// Try to accept an invitation
-		System.out.println("Accepting invitation");
-		DuplexTransportConnection d = plugin.acceptInvitation(
-				getPseudoRandom(123), INVITATION_TIMEOUT);
-		if(d == null) {
-			System.out.println("Connection failed");
-		} else {
-			System.out.println("Connection created");
-			sendChallengeReceiveResponse(d);
+		if(!plugin.start()) {
+			System.out.println("Plugin failed to start");
+			return;
 		}
-		// Try to send an invitation
-		System.out.println("Sending invitation");
-		d = plugin.sendInvitation(getPseudoRandom(456), INVITATION_TIMEOUT);
-		if(d == null) {
-			System.out.println("Connection failed");
-		} else {
-			System.out.println("Connection created");
-			receiveChallengeSendResponse(d);
+		try {
+			// Wait for a connection
+			System.out.println("Waiting for connection");
+			if(!callback.latch.await(CONNECTION_TIMEOUT, MILLISECONDS)) {
+				System.out.println("No connection received");
+				return;
+			}
+			// Try to accept an invitation
+			System.out.println("Accepting invitation");
+			DuplexTransportConnection d = plugin.acceptInvitation(
+					getPseudoRandom(123), CONNECTION_TIMEOUT);
+			if(d == null) {
+				System.out.println("Connection failed");
+				return;
+			} else {
+				System.out.println("Connection created");
+				sendChallengeReceiveResponse(d);
+			}
+			// Try to send an invitation
+			System.out.println("Sending invitation");
+			d = plugin.sendInvitation(getPseudoRandom(456), CONNECTION_TIMEOUT);
+			if(d == null) {
+				System.out.println("Connection failed");
+				return;
+			} else {
+				System.out.println("Connection created");
+				receiveChallengeSendResponse(d);
+			}
+		} finally {
+			// Stop the plugin
+			System.out.println("Stopping plugin");
+			plugin.stop();
 		}
-		// Stop the plugin
-		System.out.println("Stopping plugin");
-		plugin.stop();
 	}
 
 	protected class ServerCallback implements DuplexPluginCallback {
diff --git a/briar-tests/src/net/sf/briar/plugins/DuplexTest.java b/briar-tests/src/net/sf/briar/plugins/DuplexTest.java
index 80eee278f0..66b5fdf276 100644
--- a/briar-tests/src/net/sf/briar/plugins/DuplexTest.java
+++ b/briar-tests/src/net/sf/briar/plugins/DuplexTest.java
@@ -14,7 +14,6 @@ abstract class DuplexTest {
 
 	protected static final String CHALLENGE = "Carrots!";
 	protected static final String RESPONSE = "Potatoes!";
-	protected static final long INVITATION_TIMEOUT = 30 * 1000;
 
 	protected final ContactId contactId = new ContactId(234);
 
@@ -78,21 +77,13 @@ abstract class DuplexTest {
 	}
 
 	protected PseudoRandom getPseudoRandom(int seed) {
-		return new TestPseudoRandom(seed);
-	}
-
-	private static class TestPseudoRandom implements PseudoRandom {
-
-		private final Random r;
-
-		private TestPseudoRandom(int seed) {
-			r = new Random(seed);
-		}
-
-		public byte[] nextBytes(int bytes) {
-			byte[] b = new byte[bytes];
-			r.nextBytes(b);
-			return b;
-		}
+		final Random random = new Random(seed);
+		return new PseudoRandom() {
+			public byte[] nextBytes(int bytes) {
+				byte[] b = new byte[bytes];
+				random.nextBytes(b);
+				return b;
+			}
+		};
 	}
 }
diff --git a/briar-tests/src/net/sf/briar/plugins/modem/ModemClientTest.java b/briar-tests/src/net/sf/briar/plugins/modem/ModemClientTest.java
new file mode 100644
index 0000000000..d4daf1f8ba
--- /dev/null
+++ b/briar-tests/src/net/sf/briar/plugins/modem/ModemClientTest.java
@@ -0,0 +1,44 @@
+package net.sf.briar.plugins.modem;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import net.sf.briar.api.ContactId;
+import net.sf.briar.api.TransportConfig;
+import net.sf.briar.api.TransportProperties;
+import net.sf.briar.plugins.DuplexClientTest;
+
+//This is not a JUnit test - it has to be run manually while the server test
+//is running on another machine
+public class ModemClientTest extends DuplexClientTest {
+
+	private ModemClientTest(Executor executor, String number) {
+		// Store the server's phone number
+		TransportProperties p = new TransportProperties();
+		p.put("number", number);
+		Map<ContactId, TransportProperties> remote =
+				Collections.singletonMap(contactId, p);
+		// Create the plugin
+		callback = new ClientCallback(new TransportConfig(),
+				new TransportProperties(), remote);
+		plugin = new ModemPlugin(executor, new ModemFactoryImpl(executor),
+				callback, 0L);
+	}
+
+	public static void main(String[] args) throws Exception {
+		if(args.length != 1) {
+			System.err.println("Please specify the server's phone number");
+			System.exit(1);
+		}
+		ExecutorService executor = Executors.newCachedThreadPool();
+		try {
+			new ModemClientTest(executor, args[0]).run();
+		} finally {
+			executor.shutdown();
+		}
+	}
+
+}
diff --git a/briar-tests/src/net/sf/briar/plugins/modem/ModemServerTest.java b/briar-tests/src/net/sf/briar/plugins/modem/ModemServerTest.java
new file mode 100644
index 0000000000..ca572de126
--- /dev/null
+++ b/briar-tests/src/net/sf/briar/plugins/modem/ModemServerTest.java
@@ -0,0 +1,33 @@
+package net.sf.briar.plugins.modem;
+
+import java.util.Collections;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import net.sf.briar.api.TransportConfig;
+import net.sf.briar.api.TransportProperties;
+import net.sf.briar.plugins.DuplexServerTest;
+
+//This is not a JUnit test - it has to be run manually while the client test
+//is running on another machine
+public class ModemServerTest extends DuplexServerTest {
+
+	private ModemServerTest(Executor executor) {
+		// Create the plugin
+		callback = new ServerCallback(new TransportConfig(),
+				new TransportProperties(), Collections.singletonMap(contactId,
+						new TransportProperties()));
+		plugin = new ModemPlugin(executor, new ModemFactoryImpl(executor),
+				callback, 0L);
+	}
+
+	public static void main(String[] args) throws Exception {
+		ExecutorService executor = Executors.newCachedThreadPool();
+		try {
+			new ModemServerTest(executor).run();
+		} finally {
+			executor.shutdown();
+		}
+	}
+}
-- 
GitLab