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 11:06:22 UTC
svn commit: r768230 - 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 09:06:21 2009
New Revision: 768230
URL: http://svn.apache.org/viewvc?rev=768230&view=rev
Log:
[Discovery] Improvements to the zookeeper node listener code.
Added:
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/ChildMonitor.java (with props)
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitor.java (contents, props changed)
- copied, changed from r767877, cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitor.java
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitorTest.java (contents, props changed)
- copied, changed from r767877, cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorTest.java
Removed:
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitor.java
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorTest.java
Modified:
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorListener.java
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorListenerImpl.java
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/FindInZooKeeperCustomizer.java
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorListenerImplTest.java
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/DiscoveryBeanTest.java
cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/FindInZooKeeperCustomizerTest.java
Added: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/ChildMonitor.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/ChildMonitor.java?rev=768230&view=auto
==============================================================================
--- cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/ChildMonitor.java (added)
+++ cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/ChildMonitor.java Fri Apr 24 09:06:21 2009
@@ -0,0 +1,17 @@
+package org.apache.cxf.dosgi.discovery.zookeeper;
+
+import org.apache.zookeeper.WatchedEvent;
+import org.apache.zookeeper.Watcher;
+import org.apache.zookeeper.AsyncCallback.StatCallback;
+import org.apache.zookeeper.data.Stat;
+
+public class ChildMonitor implements StatCallback, Watcher {
+ public void processResult(int rc, String path, Object ctx, Stat stat) {
+ System.out.println("~~~ Got a callback! " + path + "@@@" + rc );
+ }
+
+ public void process(WatchedEvent event) {
+ System.out.println("??? Got a watcher callback! " + event );
+ }
+
+}
Propchange: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/ChildMonitor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/ChildMonitor.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorListener.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorListener.java?rev=768230&r1=768229&r2=768230&view=diff
==============================================================================
--- cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorListener.java (original)
+++ cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorListener.java Fri Apr 24 09:06:21 2009
@@ -19,5 +19,5 @@
package org.apache.cxf.dosgi.discovery.zookeeper;
interface DataMonitorListener {
- void exists();
+ void change();
}
\ No newline at end of file
Modified: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorListenerImpl.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorListenerImpl.java?rev=768230&r1=768229&r2=768230&view=diff
==============================================================================
--- cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorListenerImpl.java (original)
+++ cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorListenerImpl.java Fri Apr 24 09:06:21 2009
@@ -47,12 +47,16 @@
discoveredServiceTracker = dst;
}
- public void exists() {
+ public void change() {
try {
LOG.info("Zookeeper callback on node: " + znode);
List<String> children = zookeeper.getChildren(znode, false);
for (String child : children) {
+// ChildMonitor cl = new ChildMonitor();
+// zookeeper.exists(znode + '/' + child, cl, cl, null);
+
+ // move to child watcher?
byte[] data = zookeeper.getData(znode + '/' + child, false, null);
Properties p = new Properties();
p.load(new ByteArrayInputStream(data));
Modified: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/FindInZooKeeperCustomizer.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/FindInZooKeeperCustomizer.java?rev=768230&r1=768229&r2=768230&view=diff
==============================================================================
--- cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/FindInZooKeeperCustomizer.java (original)
+++ cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/FindInZooKeeperCustomizer.java Fri Apr 24 09:06:21 2009
@@ -35,8 +35,8 @@
public class FindInZooKeeperCustomizer implements ServiceTrackerCustomizer {
private final BundleContext bundleContext;
private final ZooKeeper zookeeper;
- final Map<DiscoveredServiceTracker, List<DataMonitor>> watchers =
- new ConcurrentHashMap<DiscoveredServiceTracker, List<DataMonitor>>();
+ final Map<DiscoveredServiceTracker, List<InterfaceMonitor>> watchers =
+ new ConcurrentHashMap<DiscoveredServiceTracker, List<InterfaceMonitor>>();
public FindInZooKeeperCustomizer(BundleContext bc, ZooKeeper zk) {
bundleContext = bc;
@@ -58,9 +58,9 @@
Collection<String> interfaces = Util.getMultiValueProperty(
sr.getProperty(DiscoveredServiceTracker.PROP_KEY_MATCH_CRITERIA_INTERFACES));
- List<DataMonitor> dmList = new ArrayList<DataMonitor>(interfaces.size());
+ List<InterfaceMonitor> dmList = new ArrayList<InterfaceMonitor>(interfaces.size());
for (String intf : interfaces) {
- DataMonitor dm = new DataMonitor(zookeeper, intf, dst);
+ InterfaceMonitor dm = new InterfaceMonitor(zookeeper, intf, dst);
dmList.add(dm);
dm.process();
}
@@ -74,15 +74,15 @@
}
public void removedService(ServiceReference sr, Object svcObj) {
- List<DataMonitor> oldVal = watchers.remove(svcObj);
+ List<InterfaceMonitor> oldVal = watchers.remove(svcObj);
if (oldVal != null) {
// TODO unregister any listeners directly registered with ZooKeeper
}
}
public void processGlobalEvent(WatchedEvent event) {
- for (List<DataMonitor> dmList : watchers.values()) {
- for (DataMonitor dm : dmList) {
+ for (List<InterfaceMonitor> dmList : watchers.values()) {
+ for (InterfaceMonitor dm : dmList) {
dm.process();
}
}
Copied: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitor.java (from r767877, cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitor.java)
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitor.java?p2=cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitor.java&p1=cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitor.java&r1=767877&r2=768230&rev=768230&view=diff
==============================================================================
--- cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitor.java (original)
+++ cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitor.java Fri Apr 24 09:06:21 2009
@@ -18,68 +18,68 @@
*/
package org.apache.cxf.dosgi.discovery.zookeeper;
-import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.apache.zookeeper.WatchedEvent;
+import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.AsyncCallback.StatCallback;
import org.apache.zookeeper.KeeperException.Code;
import org.apache.zookeeper.data.Stat;
import org.osgi.service.discovery.DiscoveredServiceTracker;
-public class DataMonitor implements StatCallback {
- private static final Logger LOG = Logger.getLogger(DataMonitor.class.getName());
+public class InterfaceMonitor implements Watcher, StatCallback {
+ private static final Logger LOG = Logger.getLogger(InterfaceMonitor.class.getName());
DataMonitorListener listener;
final String znode;
final ZooKeeper zookeeper;
- private byte [] prevData;
- public DataMonitor(ZooKeeper zk, String intf, DiscoveredServiceTracker dst) {
+ public InterfaceMonitor(ZooKeeper zk, String intf, DiscoveredServiceTracker dst) {
listener = new DataMonitorListenerImpl(zk, intf, dst);
zookeeper = zk;
znode = Util.getZooKeeperPath(intf);
}
public void process() {
- /* */ System.out.println("*** Kicking off a zookeeper.exists()");
- zookeeper.exists(znode, true, this, null);
+ LOG.finest("Kicking off a zookeeper.exists() on node: " + znode);
+ zookeeper.exists(znode, this, this, null);
}
+ public void process(WatchedEvent event) {
+ LOG.finer("ZooKeeper watcher callback " + event);
+ processDelta();
+ }
+
public void processResult(int rc, String path, Object ctx, Stat stat) {
- boolean exists;
+ LOG.finer("ZooKeeper callback on node: " + znode + " code: " + rc);
switch (rc) {
case Code.Ok:
- exists = true;
break;
case Code.NoNode:
- exists = false;
break;
case Code.SessionExpired:
- LOG.info("ZooKeeper reports: SessionExpired on node: " + znode);
return;
case Code.NoAuth:
- LOG.info("ZooKeeper reports: NoAuth on node: " + znode);
return;
default:
process();
return;
}
- byte [] b = null;
- if (exists) {
- try {
- b = zookeeper.getData(znode, false, null);
- } catch (Exception ke) {
- LOG.log(Level.SEVERE, "Error getting ZooKeeper data.", ke);
- }
-
- if (!Arrays.equals(prevData, b)) {
- listener.exists();
- prevData = b;
+ processDelta();
+ }
+
+ private void processDelta() {
+ try {
+ if (zookeeper.exists(znode, false) != null) {
+ listener.change();
+ zookeeper.getChildren(znode, this);
}
+ } catch (Exception ke) {
+ LOG.log(Level.SEVERE, "Error getting ZooKeeper data.", ke);
}
}
}
Propchange: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitor.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/main/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitor.java
------------------------------------------------------------------------------
svn:mergeinfo =
Modified: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorListenerImplTest.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorListenerImplTest.java?rev=768230&r1=768229&r2=768230&view=diff
==============================================================================
--- cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorListenerImplTest.java (original)
+++ cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorListenerImplTest.java Fri Apr 24 09:06:21 2009
@@ -34,7 +34,7 @@
import org.osgi.service.discovery.ServiceEndpointDescription;
public class DataMonitorListenerImplTest extends TestCase {
- public void testExists() throws Exception {
+ public void testChange() throws Exception {
final List<DiscoveredServiceNotification> dsnCallbacks = new ArrayList<DiscoveredServiceNotification>();
DiscoveredServiceTracker dst = new DiscoveredServiceTracker() {
public void serviceChanged(DiscoveredServiceNotification dsn) {
@@ -57,7 +57,7 @@
DataMonitorListenerImpl dml = new DataMonitorListenerImpl(zk, String.class.getName(), dst);
assertEquals("Precondition failed", 0, dsnCallbacks.size());
- dml.exists();
+ dml.change();
assertEquals(1, dsnCallbacks.size());
DiscoveredServiceNotification dsn = dsnCallbacks.iterator().next();
assertEquals(Collections.singleton(String.class.getName()), dsn.getInterfaces());
Modified: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/DiscoveryBeanTest.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/DiscoveryBeanTest.java?rev=768230&r1=768229&r2=768230&view=diff
==============================================================================
--- cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/DiscoveryBeanTest.java (original)
+++ cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/DiscoveryBeanTest.java Fri Apr 24 09:06:21 2009
@@ -106,20 +106,20 @@
DiscoveryBean db = new DiscoveryBean();
FindInZooKeeperCustomizer fc = new FindInZooKeeperCustomizer(null, null);
- List<DataMonitor> l1 = new ArrayList<DataMonitor>();
- DataMonitor dm1a = EasyMock.createMock(DataMonitor.class);
+ List<InterfaceMonitor> l1 = new ArrayList<InterfaceMonitor>();
+ InterfaceMonitor dm1a = EasyMock.createMock(InterfaceMonitor.class);
dm1a.process();
EasyMock.expectLastCall();
EasyMock.replay(dm1a);
- DataMonitor dm1b = EasyMock.createMock(DataMonitor.class);
+ InterfaceMonitor dm1b = EasyMock.createMock(InterfaceMonitor.class);
dm1b.process();
EasyMock.expectLastCall();
EasyMock.replay(dm1b);
l1.add(dm1a);
l1.add(dm1b);
- List<DataMonitor> l2 = new ArrayList<DataMonitor>();
- DataMonitor dm2 = EasyMock.createMock(DataMonitor.class);
+ List<InterfaceMonitor> l2 = new ArrayList<InterfaceMonitor>();
+ InterfaceMonitor dm2 = EasyMock.createMock(InterfaceMonitor.class);
dm2.process();
EasyMock.expectLastCall();
EasyMock.replay(dm2);
Modified: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/FindInZooKeeperCustomizerTest.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/FindInZooKeeperCustomizerTest.java?rev=768230&r1=768229&r2=768230&view=diff
==============================================================================
--- cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/FindInZooKeeperCustomizerTest.java (original)
+++ cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/FindInZooKeeperCustomizerTest.java Fri Apr 24 09:06:21 2009
@@ -24,8 +24,10 @@
import junit.framework.TestCase;
+import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.AsyncCallback.StatCallback;
+import org.easymock.IAnswer;
import org.easymock.classextension.EasyMock;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
@@ -82,9 +84,9 @@
DiscoveredServiceTracker key = fc.watchers.keySet().iterator().next();
assertSame(dst, key);
- List<DataMonitor> dmList = fc.watchers.get(key);
+ List<InterfaceMonitor> dmList = fc.watchers.get(key);
assertEquals(1, dmList.size());
- DataMonitor dm = dmList.iterator().next();
+ InterfaceMonitor dm = dmList.iterator().next();
assertNotNull(dm.listener);
assertSame(zk, dm.zookeeper);
assertEquals(Util.getZooKeeperPath(String.class.getName()), dm.znode);
@@ -96,7 +98,7 @@
assertTrue(fc.watchers.containsKey(dst));
assertTrue(fc.watchers.containsKey(dst2));
assertEquals(dmList, fc.watchers.get(dst));
- List<DataMonitor> dmList2 = fc.watchers.get(dst2);
+ List<InterfaceMonitor> dmList2 = fc.watchers.get(dst2);
assertEquals(2, dmList2.size());
assertEquals(Util.getZooKeeperPath(Integer.class.getName()), dmList2.get(0).znode);
assertEquals(Util.getZooKeeperPath(Comparable.class.getName()), dmList2.get(1).znode);
@@ -122,7 +124,7 @@
assertTrue(fc.watchers.containsKey(dst));
assertTrue(fc.watchers.containsKey(dst2));
assertEquals(dmList2, fc.watchers.get(dst2));
- List<DataMonitor> dmList3 = fc.watchers.get(dst);
+ List<InterfaceMonitor> dmList3 = fc.watchers.get(dst);
assertEquals(1, dmList3.size());
assertEquals(Util.getZooKeeperPath(List.class.getName()), dmList3.iterator().next().znode);
@@ -145,7 +147,15 @@
}
private void zkExpectExists(ZooKeeper zk, String className) {
- zk.exists(EasyMock.eq(Util.getZooKeeperPath(className)), EasyMock.eq(true),
+ zk.exists(EasyMock.eq(Util.getZooKeeperPath(className)),
+ (Watcher) EasyMock.anyObject(),
(StatCallback) EasyMock.anyObject(), EasyMock.isNull());
+ EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+ public Object answer() throws Throwable {
+ assertEquals(EasyMock.getCurrentArguments()[1],
+ EasyMock.getCurrentArguments()[2]);
+ return null;
+ }
+ });
}
}
Copied: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitorTest.java (from r767877, cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorTest.java)
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitorTest.java?p2=cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitorTest.java&p1=cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorTest.java&r1=767877&r2=768230&rev=768230&view=diff
==============================================================================
--- cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/DataMonitorTest.java (original)
+++ cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitorTest.java Fri Apr 24 09:06:21 2009
@@ -28,20 +28,25 @@
import junit.framework.TestCase;
+import org.apache.zookeeper.KeeperException;
+import org.apache.zookeeper.WatchedEvent;
+import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.AsyncCallback.StatCallback;
import org.apache.zookeeper.KeeperException.Code;
+import org.apache.zookeeper.data.Stat;
+import org.easymock.IAnswer;
import org.easymock.classextension.EasyMock;
import org.osgi.service.discovery.DiscoveredServiceNotification;
import org.osgi.service.discovery.DiscoveredServiceTracker;
import org.osgi.service.discovery.ServiceEndpointDescription;
-public class DataMonitorTest extends TestCase {
+public class InterfaceMonitorTest extends TestCase {
public void testCreateListener() {
ZooKeeper zk = EasyMock.createMock(ZooKeeper.class);
DiscoveredServiceTracker dst = EasyMock.createMock(DiscoveredServiceTracker.class);
- DataMonitor dm = new DataMonitor(zk, String.class.getName(), dst);
+ InterfaceMonitor dm = new InterfaceMonitor(zk, String.class.getName(), dst);
DataMonitorListenerImpl listener = (DataMonitorListenerImpl) dm.listener;
assertSame(zk, listener.zookeeper);
assertEquals(Util.getZooKeeperPath(String.class.getName()), listener.znode);
@@ -49,7 +54,7 @@
assertSame(dst, listener.discoveredServiceTracker);
}
- public void testDataMonitor() throws Exception {
+ public void testInterfaceMonitor() throws Exception {
Properties s1Props = new Properties();
s1Props.put("a", "b");
ByteArrayOutputStream s1Bytes = new ByteArrayOutputStream();
@@ -61,8 +66,8 @@
s2Props.store(s2Bytes, "");
ZooKeeper zk = EasyMock.createNiceMock(ZooKeeper.class);
- EasyMock.expect(zk.getData(Util.getZooKeeperPath(String.class.getName()), false, null))
- .andReturn(new byte[0]).anyTimes();
+ zk.exists(Util.getZooKeeperPath(String.class.getName()), false);
+ EasyMock.expectLastCall().andReturn(EasyMock.createMock(Stat.class));
EasyMock.expect(zk.getChildren(Util.getZooKeeperPath(String.class.getName()), false))
.andReturn(Arrays.asList("a#90#r", "b#90#r")).anyTimes();
EasyMock.expect(zk.getData(Util.getZooKeeperPath(String.class.getName()) + "/a#90#r", false, null))
@@ -78,7 +83,7 @@
}
};
- DataMonitor dm = new DataMonitor(zk, String.class.getName(), dst);
+ InterfaceMonitor dm = new InterfaceMonitor(zk, String.class.getName(), dst);
assertEquals("Precondition failed", 0, notifications.size());
dm.processResult(Code.Ok, null, null, null);
assertEquals(2, notifications.size());
@@ -108,8 +113,8 @@
// Third time around, with different data
EasyMock.reset(zk);
- EasyMock.expect(zk.getData(Util.getZooKeeperPath(String.class.getName()), false, null))
- .andReturn(new byte[] {123}).anyTimes();
+ zk.exists(Util.getZooKeeperPath(String.class.getName()), false);
+ EasyMock.expectLastCall().andReturn(EasyMock.createMock(Stat.class));
EasyMock.expect(zk.getChildren(Util.getZooKeeperPath(String.class.getName()), false))
.andReturn(Arrays.asList("a#90#r")).anyTimes();
EasyMock.expect(zk.getData(Util.getZooKeeperPath(String.class.getName()) + "/a#90#r", false, null))
@@ -124,39 +129,16 @@
assertEquals(Collections.singleton(String.class.getName()), dsn.getInterfaces());
ServiceEndpointDescription sed = dsn.getServiceEndpointDescription();
assertEquals(Collections.singleton(String.class.getName()), sed.getProvidedInterfaces());
- assertEquals(s1Props, sed.getProperties());
-
- // Fourth time around, now with null
- EasyMock.reset(zk);
- EasyMock.expect(zk.getData(Util.getZooKeeperPath(String.class.getName()), false, null))
- .andReturn(null).anyTimes();
- EasyMock.expect(zk.getChildren(Util.getZooKeeperPath(String.class.getName()), false))
- .andReturn(Arrays.asList("b#90#r")).anyTimes();
- EasyMock.expect(zk.getData(Util.getZooKeeperPath(String.class.getName()) + "/b#90#r", false, null))
- .andReturn(s2Bytes.toByteArray()).anyTimes();
- EasyMock.replay(zk);
- notifications.clear();
- dm.processResult(Code.Ok, null, null, null);
- DiscoveredServiceNotification dsn2 = notifications.iterator().next();
- assertEquals(1, notifications.size());
- assertEquals(DiscoveredServiceNotification.AVAILABLE, dsn2.getType());
- assertEquals(Collections.emptyList(), dsn2.getFilters());
- assertEquals(Collections.singleton(String.class.getName()), dsn2.getInterfaces());
- ServiceEndpointDescription sed2 = dsn2.getServiceEndpointDescription();
- assertEquals(Collections.singleton(String.class.getName()), sed2.getProvidedInterfaces());
- assertEquals(s2Props, sed2.getProperties());
-
- // Fifth time around, with null again
- notifications.clear();
- dm.processResult(Code.Ok, null, null, null);
- assertEquals("No changes, so should not get any new notifications", 0, notifications.size());
+ assertEquals(s1Props, sed.getProperties());
}
- public void testDataMonitorNoExist() throws Exception {
+ public void testInterfaceMonitorNoExist() throws Exception {
ZooKeeper zk = EasyMock.createMock(ZooKeeper.class);
+ EasyMock.expect(zk.exists(Util.getZooKeeperPath(String.class.getName()), false))
+ .andReturn(null);
EasyMock.replay(zk);
- DataMonitor dm = new DataMonitor(zk, String.class.getName(), null);
+ InterfaceMonitor dm = new InterfaceMonitor(zk, String.class.getName(), null);
dm.processResult(Code.NoNode, null, null, null);
EasyMock.verify(zk);
@@ -166,27 +148,75 @@
ZooKeeper zk = EasyMock.createMock(ZooKeeper.class);
zk.exists(
EasyMock.eq(Util.getZooKeeperPath(String.class.getName())),
- EasyMock.eq(true),
+ (Watcher) EasyMock.anyObject(),
(StatCallback) EasyMock.anyObject(),
EasyMock.isNull());
- EasyMock.expectLastCall();
+ EasyMock.expectLastCall().andAnswer(new IAnswer<Object>() {
+ public Object answer() throws Throwable {
+ assertEquals(EasyMock.getCurrentArguments()[1],
+ EasyMock.getCurrentArguments()[2]);
+ return null;
+ }
+ });
EasyMock.replay(zk);
- DataMonitor dm = new DataMonitor(zk, String.class.getName(), null);
+ InterfaceMonitor dm = new InterfaceMonitor(zk, String.class.getName(), null);
dm.process();
EasyMock.verify(zk);
}
- public void testDataMonitorDefault() {
+ public void testProcessWatchedEvent() throws Exception {
+ ZooKeeper zk = EasyMock.createMock(ZooKeeper.class);
+ InterfaceMonitor dm = new InterfaceMonitor(zk, String.class.getName(), null);
+
+ zk.exists(
+ Util.getZooKeeperPath(String.class.getName()),
+ false);
+ EasyMock.expectLastCall().andReturn(EasyMock.createMock(Stat.class));
+ EasyMock.expect(zk.getChildren(Util.getZooKeeperPath(String.class.getName()), dm)).andReturn(null);
+ EasyMock.replay(zk);
+
+ DataMonitorListener listener = EasyMock.createMock(DataMonitorListener.class);
+ listener.change();
+ EasyMock.replay(listener);
+ dm.listener = listener;
+
+ dm.process((WatchedEvent) null);
+
+ EasyMock.verify(zk);
+ EasyMock.verify(listener);
+ }
+
+ public void testProcessWatchedEventNoExist() throws Exception {
+ ZooKeeper zk = EasyMock.createMock(ZooKeeper.class);
+ InterfaceMonitor dm = new InterfaceMonitor(zk, String.class.getName(), null);
+
+ zk.exists(
+ Util.getZooKeeperPath(String.class.getName()),
+ false);
+ EasyMock.expectLastCall().andReturn(null);
+ EasyMock.replay(zk);
+
+ DataMonitorListener listener = EasyMock.createMock(DataMonitorListener.class);
+ EasyMock.replay(listener);
+ dm.listener = listener;
+
+ dm.process((WatchedEvent) null);
+
+ EasyMock.verify(zk);
+ EasyMock.verify(listener);
+ }
+
+ public void testInterfaceMonitorDefault() {
ZooKeeper zk = EasyMock.createMock(ZooKeeper.class);
EasyMock.replay(zk);
- DataMonitor dm = new DataMonitor(zk, String.class.getName(), null);
+ InterfaceMonitor dm = new InterfaceMonitor(zk, String.class.getName(), null);
EasyMock.verify(zk);
EasyMock.reset(zk);
- zk.exists(Util.getZooKeeperPath(String.class.getName()), true, dm, null);
+ zk.exists(Util.getZooKeeperPath(String.class.getName()), dm, dm, null);
EasyMock.expectLastCall();
EasyMock.replay(zk);
// This should trigger a call to zookeeper.exists() as defined above
Propchange: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitorTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: cxf/dosgi/trunk/discovery/distributed/cxf-discovery/src/test/java/org/apache/cxf/dosgi/discovery/zookeeper/InterfaceMonitorTest.java
------------------------------------------------------------------------------
svn:mergeinfo =