You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by da...@apache.org on 2009/04/24 13:03:11 UTC
svn commit: r768256 - in
/cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src:
main/java/org/apache/cxf/dosgi/discovery/zookeeper/
test/java/org/apache/cxf/dosgi/discovery/zookeeper/
Author: davidb
Date: Fri Apr 24 11:03:10 2009
New Revision: 768256
URL: http://svn.apache.org/viewvc?rev=768256&view=rev
Log:
[Discovery] Adding support for DiscoveredServiceNotification.MODIFIED
Modified:
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceDataMonitorListenerImpl.java
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceDataMonitorListenerImplTest.java
Modified: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceDataMonitorListenerImpl.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceDataMonitorListenerImpl.java?rev=768256&r1=768255&r2=768256&view=diff
==============================================================================
--- cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceDataMonitorListenerImpl.java (original)
+++ cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceDataMonitorListenerImpl.java Fri Apr 24 11:03:10 2009
@@ -63,14 +63,7 @@
p.load(new ByteArrayInputStream(data));
Map<String, Object> m = new HashMap<String, Object>();
- for (Map.Entry<Object, Object> entry : p.entrySet()) {
- /* TODO this is probably not necessary
- if (Constants.SERVICE_ID.equals(entry.getKey()) ||
- Constants.SERVICE_PID.equals(entry.getKey()) ||
- Constants.OBJECTCLASS.equals(entry.getKey())) {
- continue;
- } */
-
+ for (Map.Entry<Object, Object> entry : p.entrySet()) {
m.put(entry.getKey().toString(), entry.getValue());
}
@@ -82,10 +75,13 @@
DiscoveredServiceNotification dsn = new DiscoveredServiceNotificationImpl(Collections.emptyList(),
Collections.singleton(interFace), DiscoveredServiceNotification.AVAILABLE, sed);
discoveredServiceTracker.serviceChanged(dsn);
- } else {
+ } else if (!prevVal.equals(m)){
// There's been a modification
- }
-
+ ServiceEndpointDescriptionImpl sed = new ServiceEndpointDescriptionImpl(Collections.singletonList(interFace), m);
+ DiscoveredServiceNotification dsn = new DiscoveredServiceNotificationImpl(Collections.emptyList(),
+ Collections.singleton(interFace), DiscoveredServiceNotification.MODIFIED, sed);
+ discoveredServiceTracker.serviceChanged(dsn);
+ }
}
for (Map<String, Object> props : prevNodes.values()) {
Modified: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceDataMonitorListenerImplTest.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceDataMonitorListenerImplTest.java?rev=768256&r1=768255&r2=768256&view=diff
==============================================================================
--- cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceDataMonitorListenerImplTest.java (original)
+++ cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceDataMonitorListenerImplTest.java Fri Apr 24 11:03:10 2009
@@ -42,16 +42,19 @@
}
};
+ //----------------------------------------------------------------
+ // Test DiscoveredServiceNotification.AVAILABLE
+ //----------------------------------------------------------------
Properties initial = new Properties();
initial.put("a", "b");
ByteArrayOutputStream propBytes = new ByteArrayOutputStream();
initial.store(propBytes, "");
ZooKeeper zk = EasyMock.createMock(ZooKeeper.class);
- EasyMock.expect(zk.getChildren(Util.getZooKeeperPath(String.class.getName()), false)).
- andReturn(Arrays.asList("x#y#z"));
- EasyMock.expect(zk.getData(Util.getZooKeeperPath(String.class.getName()) + "/x#y#z", false, null)).
- andReturn(propBytes.toByteArray());
+ EasyMock.expect(zk.getChildren(Util.getZooKeeperPath(String.class.getName()), false))
+ .andReturn(Arrays.asList("x#y#z"));
+ EasyMock.expect(zk.getData(Util.getZooKeeperPath(String.class.getName()) + "/x#y#z", false, null))
+ .andReturn(propBytes.toByteArray());
EasyMock.replay(zk);
InterfaceDataMonitorListenerImpl dml = new InterfaceDataMonitorListenerImpl(zk, String.class.getName(), dst);
@@ -66,5 +69,83 @@
ServiceEndpointDescription sed = dsn.getServiceEndpointDescription();
assertEquals(Collections.singleton(String.class.getName()), sed.getProvidedInterfaces());
assertEquals(initial, sed.getProperties());
+ EasyMock.verify(zk);
+
+ // Again with the same data
+ EasyMock.reset(zk);
+ EasyMock.expect(zk.getChildren(Util.getZooKeeperPath(String.class.getName()), false))
+ .andReturn(Arrays.asList("x#y#z"));
+ EasyMock.expect(zk.getData(Util.getZooKeeperPath(String.class.getName()) + "/x#y#z", false, null))
+ .andReturn(propBytes.toByteArray());
+ EasyMock.replay(zk);
+
+ dsnCallbacks.clear();
+ assertEquals("Precondition failed", 0, dsnCallbacks.size());
+ dml.change();
+ assertEquals(0, dsnCallbacks.size());
+
+ EasyMock.verify(zk);
+ //----------------------------------------------------------------
+ // Test DiscoveredServiceNotification.MODIFIED
+ //----------------------------------------------------------------
+ Properties modified = new Properties();
+ modified.put("c", "d");
+ ByteArrayOutputStream modBytes = new ByteArrayOutputStream();
+ modified.store(modBytes, "");
+
+ EasyMock.reset(zk);
+ EasyMock.expect(zk.getChildren(Util.getZooKeeperPath(String.class.getName()), false))
+ .andReturn(Arrays.asList("x#y#z"));
+ EasyMock.expect(zk.getData(Util.getZooKeeperPath(String.class.getName()) + "/x#y#z", false, null))
+ .andReturn(modBytes.toByteArray());
+ EasyMock.replay(zk);
+
+ dsnCallbacks.clear();
+ assertEquals("Precondition failed", 0, dsnCallbacks.size());
+ dml.change();
+ assertEquals(1, dsnCallbacks.size());
+ DiscoveredServiceNotification dsn2 = dsnCallbacks.iterator().next();
+ assertEquals(Collections.singleton(String.class.getName()), dsn2.getInterfaces());
+ assertEquals(DiscoveredServiceNotification.MODIFIED, dsn2.getType());
+ assertEquals(0, dsn2.getFilters().size());
+ ServiceEndpointDescription sed2 = dsn2.getServiceEndpointDescription();
+ assertEquals(Collections.singleton(String.class.getName()), sed2.getProvidedInterfaces());
+ assertEquals(modified, sed2.getProperties());
+
+ EasyMock.verify(zk);
+
+ //----------------------------------------------------------------
+ // Test DiscoveredServiceNotification.UNAVAILABLE
+ //----------------------------------------------------------------
+ EasyMock.reset(zk);
+ EasyMock.expect(zk.getChildren(Util.getZooKeeperPath(String.class.getName()), false))
+ .andReturn(Collections.<String>emptyList());
+ EasyMock.replay(zk);
+
+ dsnCallbacks.clear();
+ assertEquals("Precondition failed", 0, dsnCallbacks.size());
+ dml.change();
+ assertEquals(1, dsnCallbacks.size());
+ DiscoveredServiceNotification dsn3 = dsnCallbacks.iterator().next();
+ assertEquals(Collections.singleton(String.class.getName()), dsn3.getInterfaces());
+ assertEquals(DiscoveredServiceNotification.UNAVAILABLE, dsn3.getType());
+ assertEquals(0, dsn3.getFilters().size());
+ ServiceEndpointDescription sed3 = dsn3.getServiceEndpointDescription();
+ assertEquals(Collections.singleton(String.class.getName()), sed3.getProvidedInterfaces());
+ assertEquals(modified, sed3.getProperties());
+
+ EasyMock.verify(zk);
+
+ // Try the same again...
+ EasyMock.reset(zk);
+ EasyMock.expect(zk.getChildren(Util.getZooKeeperPath(String.class.getName()), false))
+ .andReturn(Collections.<String>emptyList());
+ EasyMock.replay(zk);
+
+ dsnCallbacks.clear();
+ assertEquals("Precondition failed", 0, dsnCallbacks.size());
+ dml.change();
+ assertEquals("Should not receive a callback again...", 0, dsnCallbacks.size());
+ EasyMock.verify(zk);
}
}