From 68145bc0805364fe3e01e4388de5bb70baa56fe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Mon, 12 Mar 2012 20:51:12 +0100 Subject: Add failing functional test. Test fails because of the new ConnectionState that is not properly implemented. --- .../test/java/com/orbekk/same/FunctionalTest.java | 99 ++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 same/src/test/java/com/orbekk/same/FunctionalTest.java (limited to 'same/src/test/java') 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 clients = new ArrayList(); + 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 getStates() { + List states = new ArrayList(); + states.add(master.state); + for (Client c : clients) { + states.add(c.state); + } + return states; + } + + @Test public void testJoin() { + joinClients(); + for (State s : getStates()) { + List 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 x1 = vf1.createString("x"); + Variable x2 = vf2.createString("x"); + x1.set("TestValue1"); + performWork(); + x2.update(); + assertThat(x1.get(), is("TestValue1")); + assertThat(x2.get(), is("TestValue1")); + } +} -- cgit v1.2.3