summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--same/src/main/java/com/orbekk/same/ClientServiceImpl.java70
-rw-r--r--same/src/test/java/com/orbekk/same/ClientServiceImplTest.java15
-rw-r--r--same/src/test/java/com/orbekk/same/MasterServiceImplTest.java12
3 files changed, 59 insertions, 38 deletions
diff --git a/same/src/main/java/com/orbekk/same/ClientServiceImpl.java b/same/src/main/java/com/orbekk/same/ClientServiceImpl.java
index f19d272..658bf37 100644
--- a/same/src/main/java/com/orbekk/same/ClientServiceImpl.java
+++ b/same/src/main/java/com/orbekk/same/ClientServiceImpl.java
@@ -11,7 +11,7 @@ import org.slf4j.LoggerFactory;
import com.orbekk.util.WorkQueue;
-public class ClientServiceImpl implements ClientService, UrlReceiver,
+public class ClientServiceImpl implements UrlReceiver,
DiscoveryListener {
private Logger logger = LoggerFactory.getLogger(getClass());
private ConnectionManager connections;
@@ -20,6 +20,35 @@ public class ClientServiceImpl implements ClientService, UrlReceiver,
private StateChangedListener stateListener;
private NetworkNotificationListener networkListener;
+ private ClientService serviceImpl = new ClientService() {
+ @Override
+ public void setState(String component, String data, long revision) throws Exception {
+ boolean status = state.update(component, data, revision);
+ if (status) {
+ if (stateListener != null) {
+ stateListener.stateChanged(component, data);
+ }
+ } else {
+ logger.warn("Ignoring update: {}",
+ new State.Component(component, revision, data));
+ }
+ }
+
+ @Override
+ public void notifyNetwork(String networkName, String masterUrl) throws Exception {
+ logger.info("NotifyNetwork(networkName={}, masterUrl={})",
+ networkName, masterUrl);
+ if (networkListener != null) {
+ networkListener.notifyNetwork(networkName, masterUrl);
+ }
+ }
+
+ @Override
+ public void discoveryRequest(String remoteUrl) {
+ discoveryThread.add(remoteUrl);
+ }
+ };
+
private WorkQueue<String> discoveryThread = new WorkQueue<String>() {
@Override protected void onChange() {
List<String> pending = getAndClear();
@@ -41,28 +70,6 @@ public class ClientServiceImpl implements ClientService, UrlReceiver,
public void interrupt() {
discoveryThread.interrupt();
}
-
- @Override
- public void notifyNetwork(String networkName, String masterUrl) {
- logger.info("NotifyNetwork(networkName={}, masterUrl={})",
- networkName, masterUrl);
- if (networkListener != null) {
- networkListener.notifyNetwork(networkName, masterUrl);
- }
- }
-
- @Override
- public void setState(String component, String data, long revision) {
- boolean status = state.update(component, data, revision);
- if (status) {
- if (stateListener != null) {
- stateListener.stateChanged(component, data);
- }
- } else {
- logger.warn("Ignoring update: {}",
- new State.Component(component, revision, data));
- }
- }
@Override
public void setUrl(String myUrl) {
@@ -130,6 +137,16 @@ public class ClientServiceImpl implements ClientService, UrlReceiver,
this.networkListener = listener;
}
+ public void sendDiscoveryRequest(String url) {
+ try {
+ connections.getClient(url)
+ .discoveryRequest(myUrl);
+ } catch (Exception e) {
+ logger.warn("Failed to send discovery request: {}",
+ throwableToString(e));
+ }
+ }
+
@Override
public void discover(String url) {
String clientUrl = url + "ClientService.json";
@@ -144,9 +161,8 @@ public class ClientServiceImpl implements ClientService, UrlReceiver,
}
}
}
-
- @Override
- public void discoveryRequest(String remoteUrl) {
- discoveryThread.add(remoteUrl);
+
+ public ClientService getService() {
+ return serviceImpl;
}
}
diff --git a/same/src/test/java/com/orbekk/same/ClientServiceImplTest.java b/same/src/test/java/com/orbekk/same/ClientServiceImplTest.java
index 4523fe1..5f04485 100644
--- a/same/src/test/java/com/orbekk/same/ClientServiceImplTest.java
+++ b/same/src/test/java/com/orbekk/same/ClientServiceImplTest.java
@@ -10,24 +10,25 @@ public class ClientServiceImplTest {
private TestConnectionManager connections = new TestConnectionManager();
private TestBroadcaster broadcaster = new TestBroadcaster();
private ClientServiceImpl client = new ClientServiceImpl(state, connections);
+ private ClientService clientS = client.getService();
- @Test public void testSetState() {
- client.setState("TestState", "Test data", 100);
+ @Test public void testSetState() throws Exception {
+ clientS.setState("TestState", "Test data", 100);
assertEquals(100, state.getRevision("TestState"));
assertEquals("Test data", state.getDataOf("TestState"));
}
- @Test public void testNetworkListener() {
+ @Test public void testNetworkListener() throws Exception {
NetworkNotificationListener listener =
mock(NetworkNotificationListener.class);
client.setNetworkListener(listener);
- client.notifyNetwork("MyNetwork", "MasterUrl");
+ clientS.notifyNetwork("MyNetwork", "MasterUrl");
verify(listener).notifyNetwork("MyNetwork", "MasterUrl");
}
- @Test public void discover() {
- client.setState(".masterUrl", "master", 1);
- ClientServiceImpl mockClient = mock(ClientServiceImpl.class);
+ @Test public void discover() throws Exception {
+ clientS.setState(".masterUrl", "master", 1);
+ ClientService mockClient = mock(ClientService.class);
connections.clientMap.put("mockClient/ClientService.json",
mockClient);
client.discover("mockClient/");
diff --git a/same/src/test/java/com/orbekk/same/MasterServiceImplTest.java b/same/src/test/java/com/orbekk/same/MasterServiceImplTest.java
index a309e38..daa55a2 100644
--- a/same/src/test/java/com/orbekk/same/MasterServiceImplTest.java
+++ b/same/src/test/java/com/orbekk/same/MasterServiceImplTest.java
@@ -75,8 +75,9 @@ public class MasterServiceImplTest {
master.setUrl("http://master/");
ClientServiceImpl client = new ClientServiceImpl(
new State("ClientNetwork"), connections);
+ ClientService clientS = client.getService();
client.setUrl("http://client/");
- connections.clientMap.put("http://client/ClientService.json", client);
+ connections.clientMap.put("http://client/ClientService.json", clientS);
client.joinNetwork("http://master");
assertTrue(master._performWork());
assertTrue(state.getList(".participants").contains("http://client/ClientService.json"));
@@ -88,12 +89,14 @@ public class MasterServiceImplTest {
master.setUrl("http://master/");
ClientServiceImpl client1 = new ClientServiceImpl(
new State("ClientNetwork"), connections);
+ ClientService client1S = client1.getService();
client1.setUrl("http://client/");
- connections.clientMap.put("http://client/ClientService.json", client1);
+ connections.clientMap.put("http://client/ClientService.json", client1S);
ClientServiceImpl client2 = new ClientServiceImpl(
new State("ClientNetwork"), connections);
+ ClientService client2S = client2.getService();
client2.setUrl("http://client2/");
- connections.clientMap.put("http://client2/ClientService.json", client2);
+ connections.clientMap.put("http://client2/ClientService.json", client2S);
client1.joinNetwork("http://master");
client2.joinNetwork("http://master");
@@ -122,8 +125,9 @@ public class MasterServiceImplTest {
master.setUrl("http://master/");
ClientServiceImpl client = new ClientServiceImpl(
new State("ClientNetwork"), connections);
+ ClientService clientS = client.getService();
client.setUrl("http://client/");
- connections.clientMap.put("http://client/ClientService.json", client);
+ connections.clientMap.put("http://client/ClientService.json", clientS);
client.joinNetwork("http://master");
assertTrue(master._performWork());
assertTrue(state.getList(".participants").contains("http://client/ClientService.json"));