diff options
author | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-11-11 16:45:15 +0000 |
---|---|---|
committer | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-11-11 16:45:15 +0000 |
commit | e165dba88bfeb0e24a24ca7195a2225d8ee6d661 (patch) | |
tree | 9145d89edd4a58e00003c8a9f5438bf370f3e43d | |
parent | b92e4024b10bfaf1c9bfc321045fe920b3d04f6d (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
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(); + } + } } } |