From e165dba88bfeb0e24a24ca7195a2225d8ee6d661 Mon Sep 17 00:00:00 2001 From: rfeng Date: Wed, 11 Nov 2009 16:45:15 +0000 Subject: 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 --- .../endpoint/zookeeper/AbstractDistributedMap.java | 20 +++++-- .../endpoint/zookeeper/DistributedMapTestCase.java | 68 +++++++++++++++++++++- 2 files changed, 83 insertions(+), 5 deletions(-) (limited to 'java') 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 extends AbstractMap implements Map, Watcher { protected ZooKeeper zooKeeper; + protected ClassLoader classLoader; + protected String root; + /** * @param zooKeeper * @param root @@ -60,13 +63,22 @@ public class AbstractDistributedMap extends AbstractMap 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> entrySet() { String path = getPath(root); @@ -268,7 +280,7 @@ public class AbstractDistributedMap extends AbstractMap 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 map = + new AbstractDistributedMap(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 map1 = new HashMap(); + 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(); + } + } } } -- cgit v1.2.3