summaryrefslogtreecommitdiff
path: root/same/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'same/src/test')
-rw-r--r--same/src/test/java/com/orbekk/same/FunctionalTest.java99
1 files changed, 99 insertions, 0 deletions
diff --git a/same/src/test/java/com/orbekk/same/FunctionalTest.java b/same/src/test/java/com/orbekk/same/FunctionalTest.java
new file mode 100644
index 0000000..dfb7d3b
--- /dev/null
+++ b/same/src/test/java/com/orbekk/same/FunctionalTest.java
@@ -0,0 +1,99 @@
+package com.orbekk.same;
+
+import static org.junit.Assert.*;
+import static org.mockito.Matchers.*;
+import static org.mockito.Mockito.*;
+import static org.hamcrest.Matcher.*;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+
+/** A functional test that runs with a master and several clients. */
+public class FunctionalTest {
+ Master master;
+ String masterUrl = "http://master/MasterService.json";
+ Client client1;
+ Client client2;
+ Client client3;
+ VariableFactory vf1;
+ VariableFactory vf2;
+ VariableFactory vf3;
+ List<Client> clients = new ArrayList<Client>();
+ TestConnectionManager connections = new TestConnectionManager();
+ TestBroadcaster broadcaster = new TestBroadcaster();
+
+ @Before public void setUp() {
+ master = new Master(new State("TestMaster"), connections,
+ broadcaster);
+ connections.masterMap.put(masterUrl,
+ master.getService());
+ client1 = newClient("TestClient1", "http://client1/ClientService.json");
+ vf1 = new VariableFactory(client1.getInterface());
+ client2 = newClient("TestClient2", "http://client2/ClientService.json");
+ vf2 = new VariableFactory(client2.getInterface());
+ client3 = newClient("TestClient3", "http://client3/ClientService.json");
+ vf3 = new VariableFactory(client3.getInterface());
+ }
+
+ Client newClient(String clientName, String clientUrl) {
+ Client client = new Client(new State(clientName), connections,
+ clientUrl);
+ connections.clientMap.put(clientUrl, client.getService());
+ clients.add(client);
+ return client;
+ }
+
+ void performWork() {
+ for (int i = 0; i < 2; i++) {
+ master.performWork();
+ for (Client c : clients) {
+ c.performWork();
+ }
+ }
+ }
+
+ void joinClients() {
+ for (Client c : clients) {
+ c.joinNetwork(masterUrl);
+ }
+ performWork();
+ }
+
+ List<State> getStates() {
+ List<State> states = new ArrayList<State>();
+ states.add(master.state);
+ for (Client c : clients) {
+ states.add(c.state);
+ }
+ return states;
+ }
+
+ @Test public void testJoin() {
+ joinClients();
+ for (State s : getStates()) {
+ List<String> participants = s.getList(".participants");
+ assertThat(participants, hasItem("http://client1/ClientService.json"));
+ assertThat(participants, hasItem("http://client2/ClientService.json"));
+ assertThat(participants, hasItem("http://client3/ClientService.json"));
+ }
+ for (Client c : clients) {
+ assertThat(c.getConnectionState(), is(ConnectionState.STABLE));
+ }
+ }
+
+ @Test public void setState() {
+ joinClients();
+ Variable<String> x1 = vf1.createString("x");
+ Variable<String> x2 = vf2.createString("x");
+ x1.set("TestValue1");
+ performWork();
+ x2.update();
+ assertThat(x1.get(), is("TestValue1"));
+ assertThat(x2.get(), is("TestValue1"));
+ }
+}