summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-01-11 14:58:48 +0100
committerKjetil Ørbekk <kjetil.orbekk@gmail.com>2012-01-11 14:58:48 +0100
commit47e43eefebae63afee1a1743602c15e3b1ede8ff (patch)
tree288ca3ee04e3365de9e2d78d51375be0b1bbac94
parent14205be283ad5b54a94c07308ab3e336f3069653 (diff)
Add SameState test.
Test network participation.
-rw-r--r--jsonrpc/src/main/java/com/orbekk/same/SameState.java12
-rw-r--r--jsonrpc/src/test/java/com/orbekk/same/SameStateTest.java60
2 files changed, 71 insertions, 1 deletions
diff --git a/jsonrpc/src/main/java/com/orbekk/same/SameState.java b/jsonrpc/src/main/java/com/orbekk/same/SameState.java
index c3d03f9..9638252 100644
--- a/jsonrpc/src/main/java/com/orbekk/same/SameState.java
+++ b/jsonrpc/src/main/java/com/orbekk/same/SameState.java
@@ -143,9 +143,19 @@ public class SameState extends Thread implements UrlReceiver {
pendingParticipants.clear();
}
+ /**
+ * This method runs the pending commands to SameState.
+ *
+ * It should be called by the worker thread, but can be called directly
+ * for testing purposes to avoid threading in unit tests.
+ */
+ synchronized void internalRun() {
+ handleNewParticipants();
+ }
+
public synchronized void run() {
while (!stopped) {
- handleNewParticipants();
+ internalRun();
try {
wait(1000);
} catch (InterruptedException e) {
diff --git a/jsonrpc/src/test/java/com/orbekk/same/SameStateTest.java b/jsonrpc/src/test/java/com/orbekk/same/SameStateTest.java
new file mode 100644
index 0000000..77bbbee
--- /dev/null
+++ b/jsonrpc/src/test/java/com/orbekk/same/SameStateTest.java
@@ -0,0 +1,60 @@
+package com.orbekk.same;
+
+import static org.junit.Assert.*;
+
+import java.util.Map;
+import java.util.HashMap;
+import org.junit.Test;
+import org.junit.Before;
+
+public class SameStateTest {
+ private MockConnectionManager connections;
+ private SameState state1, state2, state3;
+ private SameService service1, service2, service3;
+
+ public static class MockConnectionManager implements ConnectionManager {
+ public Map<String, SameService> connections =
+ new HashMap<String, SameService>();
+
+ @Override
+ public SameService getConnection(String url) {
+ return connections.get(url);
+ }
+ }
+
+ public SameStateTest() {
+ }
+
+ @Before public void setUp() {
+ connections = new MockConnectionManager();
+
+ state1 = new SameState("Network1", "Client1", connections);
+ state1.setUrl("test://client1");
+ service1 = new SameServiceImpl(state1);
+ state2 = new SameState("Network2", "Client2", connections);
+ state2.setUrl("test://client2");
+ service2 = new SameServiceImpl(state2);
+ state3 = new SameState("Network3", "Client3", connections);
+ state3.setUrl("test://client3");
+ service3 = new SameServiceImpl(state3);
+
+ connections.connections.put(state1.getUrl(), service1);
+ connections.connections.put(state2.getUrl(), service2);
+ connections.connections.put(state3.getUrl(), service3);
+ }
+
+ @Test public void testJoinNetwork() {
+ connections.getConnection(state1.getUrl()).
+ participateNetwork("Network1", state2.getClientId(),
+ state2.getUrl());
+ assertTrue(state1.getParticipants().size() == 1);
+ assertTrue(state2.getParticipants().size() == 1);
+
+ state1.internalRun();
+ state2.internalRun();
+
+ assertTrue(state1.getParticipants().size() == 2);
+ assertTrue(state2.getParticipants().size() == 2);
+ assertEquals(state1.getNetworkName(), state2.getNetworkName());
+ }
+}