From 654ac153d6d260ec4cf79e614a93fbcd40dc4659 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Mon, 16 Jan 2012 20:13:07 +0100 Subject: Implement updateStateRequest(). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit – Verify that states are synchronized to all clients. --- .../java/com/orbekk/same/MasterServiceImpl.java | 10 +++-- .../com/orbekk/same/MasterServiceImplTest.java | 44 +++++++++++++++++++--- 2 files changed, 46 insertions(+), 8 deletions(-) (limited to 'same') diff --git a/same/src/main/java/com/orbekk/same/MasterServiceImpl.java b/same/src/main/java/com/orbekk/same/MasterServiceImpl.java index 2101de8..6779702 100644 --- a/same/src/main/java/com/orbekk/same/MasterServiceImpl.java +++ b/same/src/main/java/com/orbekk/same/MasterServiceImpl.java @@ -78,9 +78,13 @@ public class MasterServiceImpl implements MasterService, UrlReceiver, Runnable { @Override - public boolean updateStateRequest(String component, String newData, long revision) { - // TODO Auto-generated method stub - return false; + public synchronized boolean updateStateRequest(String component, + String newData, long revision) { + boolean updated = state.update(component, newData, revision); + if (updated) { + notifyAll(); + } + return updated; } @Override diff --git a/same/src/test/java/com/orbekk/same/MasterServiceImplTest.java b/same/src/test/java/com/orbekk/same/MasterServiceImplTest.java index 25b4073..da45e38 100644 --- a/same/src/test/java/com/orbekk/same/MasterServiceImplTest.java +++ b/same/src/test/java/com/orbekk/same/MasterServiceImplTest.java @@ -48,14 +48,48 @@ public class MasterServiceImplTest { @Test public void clientJoin() { - master.setUrl("http://master"); + master.setUrl("http://master/"); ClientServiceImpl client = new ClientServiceImpl( new State("ClientNetwork"), connections); - client.setUrl("http://client"); - connections.clientMap.put("http://client", client); - master.joinNetworkRequest("TestNetwork", "http://client"); + client.setUrl("http://client/"); + connections.clientMap.put("http://client/ClientService.json", client); + master.joinNetworkRequest("TestNetwork", "http://client/ClientService.json"); assertTrue(master._performWork()); - assertTrue(state.getList(".participants").contains("http://client")); + assertTrue(state.getList(".participants").contains("http://client/ClientService.json")); assertEquals(state, client.testGetState()); } + + @Test + public void validStateRequest() { + master.setUrl("http://master/"); + ClientServiceImpl client1 = new ClientServiceImpl( + new State("ClientNetwork"), connections); + client1.setUrl("http://client/"); + connections.clientMap.put("http://client/ClientService.json", client1); + ClientServiceImpl client2 = new ClientServiceImpl( + new State("ClientNetwork"), connections); + client1.setUrl("http://client2/"); + connections.clientMap.put("http://client2/ClientService.json", client2); + + master.joinNetworkRequest("TestNetwork", "http://client/ClientService.json"); + master.joinNetworkRequest("TestNetwork", "http://client2/ClientService.json"); + + assertTrue(master._performWork()); + assertTrue(state.getList(".participants").contains("http://client/ClientService.json")); + assertTrue(state.getList(".participants").contains("http://client2/ClientService.json")); + assertEquals(state, client1.testGetState()); + + assertTrue(master.updateStateRequest("A", "1", 0)); + assertTrue(master._performWork()); + + assertEquals(state, client1.testGetState()); + assertEquals(state, client2.testGetState()); + + assertFalse(master.updateStateRequest("A", "2", 0)); + assertTrue(master.updateStateRequest("A", "3", 1)); + assertTrue(master._performWork()); + + assertEquals(state, client1.testGetState()); + assertEquals(state, client2.testGetState()); + } } -- cgit v1.2.3