summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-11-11 16:45:15 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-11-11 16:45:15 +0000
commite165dba88bfeb0e24a24ca7195a2225d8ee6d661 (patch)
tree9145d89edd4a58e00003c8a9f5438bf370f3e43d
parentb92e4024b10bfaf1c9bfc321045fe920b3d04f6d (diff)
Add a test case for the distributed map impl
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@834960 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--java/sca/modules/endpoint-zookeeper/src/main/java/org/apache/tuscany/sca/endpoint/zookeeper/AbstractDistributedMap.java20
-rw-r--r--java/sca/modules/endpoint-zookeeper/src/test/java/org/apache/tuscany/sca/endpoint/zookeeper/DistributedMapTestCase.java68
2 files changed, 83 insertions, 5 deletions
diff --git a/java/sca/modules/endpoint-zookeeper/src/main/java/org/apache/tuscany/sca/endpoint/zookeeper/AbstractDistributedMap.java b/java/sca/modules/endpoint-zookeeper/src/main/java/org/apache/tuscany/sca/endpoint/zookeeper/AbstractDistributedMap.java
index 94306507ce..68133db7c0 100644
--- a/java/sca/modules/endpoint-zookeeper/src/main/java/org/apache/tuscany/sca/endpoint/zookeeper/AbstractDistributedMap.java
+++ b/java/sca/modules/endpoint-zookeeper/src/main/java/org/apache/tuscany/sca/endpoint/zookeeper/AbstractDistributedMap.java
@@ -50,6 +50,9 @@ import org.oasisopen.sca.ServiceRuntimeException;
*/
public class AbstractDistributedMap<V> extends AbstractMap<String, V> implements Map<String, V>, Watcher {
protected ZooKeeper zooKeeper;
+ protected ClassLoader classLoader;
+ protected String root;
+
/**
* @param zooKeeper
* @param root
@@ -60,13 +63,22 @@ public class AbstractDistributedMap<V> extends AbstractMap<String, V> implements
this.zooKeeper = zooKeeper;
this.root = root;
this.classLoader = classLoader;
+ }
+
+ public void start() {
// FIXME:
this.zooKeeper.register(this);
+ try {
+ String path = getPath(root);
+ Stat stat = zooKeeper.exists(path, false);
+ if (stat == null) {
+ zooKeeper.create(path, new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
+ }
+ } catch (Exception e) {
+ throw new IllegalArgumentException(e);
+ }
}
- protected ClassLoader classLoader;
- protected String root;
-
@Override
public Set<Map.Entry<String, V>> entrySet() {
String path = getPath(root);
@@ -268,7 +280,7 @@ public class AbstractDistributedMap<V> extends AbstractMap<String, V> implements
public void remove() {
childrenIterator.remove();
try {
- zooKeeper.delete(path, -1);
+ zooKeeper.delete(getPath(root, path), -1);
} catch (Throwable e) {
throw new ServiceRuntimeException(e);
}
diff --git a/java/sca/modules/endpoint-zookeeper/src/test/java/org/apache/tuscany/sca/endpoint/zookeeper/DistributedMapTestCase.java b/java/sca/modules/endpoint-zookeeper/src/test/java/org/apache/tuscany/sca/endpoint/zookeeper/DistributedMapTestCase.java
index 5489f20098..325f060645 100644
--- a/java/sca/modules/endpoint-zookeeper/src/test/java/org/apache/tuscany/sca/endpoint/zookeeper/DistributedMapTestCase.java
+++ b/java/sca/modules/endpoint-zookeeper/src/test/java/org/apache/tuscany/sca/endpoint/zookeeper/DistributedMapTestCase.java
@@ -19,20 +19,72 @@
package org.apache.tuscany.sca.endpoint.zookeeper;
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+import junit.framework.Assert;
+
+import org.apache.zookeeper.WatchedEvent;
+import org.apache.zookeeper.Watcher;
+import org.apache.zookeeper.ZooKeeper;
+import org.apache.zookeeper.Watcher.Event.KeeperState;
+import org.apache.zookeeper.server.PurgeTxnLog;
import org.junit.AfterClass;
import org.junit.BeforeClass;
+import org.junit.Test;
/**
*
*/
-public class DistributedMapTestCase {
+public class DistributedMapTestCase implements Watcher {
+
+ private static LocalZooKeeperServer server;
/**
* @throws java.lang.Exception
*/
@BeforeClass
public static void setUpBeforeClass() throws Exception {
+ server = new LocalZooKeeperServer();
+ }
+
+ @Test
+ public void testMap() throws Exception {
+ String[] args = new String[] {"8085", "target/zookeeper"};
+ server.folk(args);
+ ZooKeeper client = new ZooKeeper("localhost:8085", 500, this);
+ synchronized (this) {
+ wait(10000);
+ }
+ try {
+ AbstractDistributedMap<String> map =
+ new AbstractDistributedMap<String>(client, "testMap", getClass().getClassLoader());
+ map.start();
+ map.clear();
+ String value = map.put("1", "A");
+ Assert.assertNull(value);
+ value = map.put("2", "B");
+ Assert.assertNull(value);
+ value = map.put("2", "C");
+ Assert.assertEquals("B", value);
+ value = map.get("2");
+ Assert.assertEquals("C", value);
+ value = map.remove("2");
+ Assert.assertEquals("C", value);
+ map.put("3", "D");
+ Map<String, String> map1 = new HashMap<String, String>();
+ map1.put("4", "E");
+ map1.put("5", "F");
+ map.putAll(map1);
+ System.out.println(map);
+ Assert.assertTrue(map.containsKey("5"));
+ Assert.assertTrue(map.containsValue("F"));
+ map.clear();
+ Assert.assertEquals(0, map.size());
+ } finally {
+ client.close();
+ }
}
/**
@@ -40,6 +92,20 @@ public class DistributedMapTestCase {
*/
@AfterClass
public static void tearDownAfterClass() throws Exception {
+ if (server != null) {
+ server.shutdown();
+ File dir = new File("target/zookeeper");
+ PurgeTxnLog.purge(dir, dir, 3);
+ }
+ }
+
+ public void process(WatchedEvent event) {
+ System.out.println(event);
+ if (event.getPath() == null && event.getState() == KeeperState.SyncConnected) {
+ synchronized (this) {
+ notifyAll();
+ }
+ }
}
}