You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@curator.apache.org by ra...@apache.org on 2013/06/20 19:50:55 UTC
[09/14] git commit: some additional functionality in testing code
some additional functionality in testing code
Project: http://git-wip-us.apache.org/repos/asf/incubator-curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-curator/commit/6a26d4fa
Tree: http://git-wip-us.apache.org/repos/asf/incubator-curator/tree/6a26d4fa
Diff: http://git-wip-us.apache.org/repos/asf/incubator-curator/diff/6a26d4fa
Branch: refs/heads/master
Commit: 6a26d4fa3ff431bbc0a5a166e4f92e8b3691f0f7
Parents: c676e3e
Author: randgalt <ra...@apache.org>
Authored: Sat Jun 15 16:39:14 2013 -0700
Committer: randgalt <ra...@apache.org>
Committed: Sat Jun 15 16:39:14 2013 -0700
----------------------------------------------------------------------
.../org/apache/curator/test/TestingCluster.java | 66 +++++++++++++++++---
.../curator/test/TestingQuorumPeerMain.java | 6 ++
.../curator/test/TestingZooKeeperMain.java | 7 +++
.../curator/test/TestingZooKeeperServer.java | 12 ++++
.../apache/curator/test/ZooKeeperMainFace.java | 3 +
5 files changed, 85 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-curator/blob/6a26d4fa/curator-test/src/main/java/org/apache/curator/test/TestingCluster.java
----------------------------------------------------------------------
diff --git a/curator-test/src/main/java/org/apache/curator/test/TestingCluster.java b/curator-test/src/main/java/org/apache/curator/test/TestingCluster.java
index 442cb66..cd86b72 100644
--- a/curator-test/src/main/java/org/apache/curator/test/TestingCluster.java
+++ b/curator-test/src/main/java/org/apache/curator/test/TestingCluster.java
@@ -18,7 +18,12 @@
*/
package org.apache.curator.test;
+import com.google.common.base.Function;
+import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
import org.apache.zookeeper.ZooKeeper;
import java.io.Closeable;
import java.io.IOException;
@@ -26,6 +31,7 @@ import java.lang.reflect.Method;
import java.net.InetSocketAddress;
import java.util.Collection;
import java.util.List;
+import java.util.Map;
/**
* manages an internally running ensemble of ZooKeeper servers. FOR TESTING PURPOSES ONLY
@@ -37,7 +43,6 @@ public class TestingCluster implements Closeable
ByteCodeRewrite.apply();
}
- private final QuorumConfigBuilder builder;
private final List<TestingZooKeeperServer> servers;
/**
@@ -58,7 +63,7 @@ public class TestingCluster implements Closeable
*/
public TestingCluster(InstanceSpec... specs)
{
- this(ImmutableList.copyOf(specs));
+ this(listToMap(ImmutableList.copyOf(specs)));
}
/**
@@ -68,11 +73,25 @@ public class TestingCluster implements Closeable
*/
public TestingCluster(Collection<InstanceSpec> specs)
{
- builder = new QuorumConfigBuilder(specs);
+ this(listToMap(specs));
+ }
+
+ /**
+ * Creates an ensemble using the given server specs
+ *
+ * @param specs map of an instance spec to its set of quorum instances. Allows simulation of an ensemble with instances
+ * having different config peers
+ */
+ public TestingCluster(Map<InstanceSpec, Collection<InstanceSpec>> specs)
+ {
ImmutableList.Builder<TestingZooKeeperServer> serverBuilder = ImmutableList.builder();
- for ( int i = 0; i < specs.size(); ++i )
+ for ( Map.Entry<InstanceSpec, Collection<InstanceSpec>> entry : specs.entrySet() )
{
- serverBuilder.add(new TestingZooKeeperServer(builder, i));
+ List<InstanceSpec> instanceSpecs = Lists.newArrayList(entry.getValue());
+ int index = instanceSpecs.indexOf(entry.getKey());
+ Preconditions.checkState(index >= 0, entry.getKey() + " not found in specs");
+ QuorumConfigBuilder builder = new QuorumConfigBuilder(instanceSpecs);
+ serverBuilder.add(new TestingZooKeeperServer(builder, index));
}
servers = serverBuilder.build();
}
@@ -84,7 +103,24 @@ public class TestingCluster implements Closeable
*/
public Collection<InstanceSpec> getInstances()
{
- return builder.getInstanceSpecs();
+ Iterable<InstanceSpec> transformed = Iterables.transform
+ (
+ servers,
+ new Function<TestingZooKeeperServer, InstanceSpec>()
+ {
+ @Override
+ public InstanceSpec apply(TestingZooKeeperServer server)
+ {
+ return server.getInstanceSpec();
+ }
+ }
+ );
+ return Lists.newArrayList(transformed);
+ }
+
+ public List<TestingZooKeeperServer> getServers()
+ {
+ return Lists.newArrayList(servers);
}
/**
@@ -95,7 +131,7 @@ public class TestingCluster implements Closeable
public String getConnectString()
{
StringBuilder str = new StringBuilder();
- for ( InstanceSpec spec : builder.getInstanceSpecs() )
+ for ( InstanceSpec spec : getInstances() )
{
if ( str.length() > 0 )
{
@@ -211,13 +247,25 @@ public class TestingCluster implements Closeable
return null;
}
- private static Collection<InstanceSpec> makeSpecs(int instanceQty)
+ private static Map<InstanceSpec, Collection<InstanceSpec>> makeSpecs(int instanceQty)
{
ImmutableList.Builder<InstanceSpec> builder = ImmutableList.builder();
for ( int i = 0; i < instanceQty; ++i )
{
builder.add(InstanceSpec.newInstanceSpec());
}
- return builder.build();
+
+ return listToMap(builder.build());
+ }
+
+ private static Map<InstanceSpec, Collection<InstanceSpec>> listToMap(Collection<InstanceSpec> list)
+ {
+ ImmutableMap.Builder<InstanceSpec, Collection<InstanceSpec>> mapBuilder = ImmutableMap.builder();
+ for ( InstanceSpec spec : list )
+ {
+ mapBuilder.put(spec, list);
+ }
+
+ return mapBuilder.build();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-curator/blob/6a26d4fa/curator-test/src/main/java/org/apache/curator/test/TestingQuorumPeerMain.java
----------------------------------------------------------------------
diff --git a/curator-test/src/main/java/org/apache/curator/test/TestingQuorumPeerMain.java b/curator-test/src/main/java/org/apache/curator/test/TestingQuorumPeerMain.java
index 0048099..9f9f302 100644
--- a/curator-test/src/main/java/org/apache/curator/test/TestingQuorumPeerMain.java
+++ b/curator-test/src/main/java/org/apache/curator/test/TestingQuorumPeerMain.java
@@ -53,6 +53,12 @@ class TestingQuorumPeerMain extends QuorumPeerMain implements ZooKeeperMainFace
}
@Override
+ public QuorumPeer getQuorumPeer()
+ {
+ return quorumPeer;
+ }
+
+ @Override
public void close() throws IOException
{
if ( quorumPeer != null )
http://git-wip-us.apache.org/repos/asf/incubator-curator/blob/6a26d4fa/curator-test/src/main/java/org/apache/curator/test/TestingZooKeeperMain.java
----------------------------------------------------------------------
diff --git a/curator-test/src/main/java/org/apache/curator/test/TestingZooKeeperMain.java b/curator-test/src/main/java/org/apache/curator/test/TestingZooKeeperMain.java
index 21bc57f..2193acb 100644
--- a/curator-test/src/main/java/org/apache/curator/test/TestingZooKeeperMain.java
+++ b/curator-test/src/main/java/org/apache/curator/test/TestingZooKeeperMain.java
@@ -23,6 +23,7 @@ import org.apache.zookeeper.server.ServerConfig;
import org.apache.zookeeper.server.ZKDatabase;
import org.apache.zookeeper.server.ZooKeeperServer;
import org.apache.zookeeper.server.ZooKeeperServerMain;
+import org.apache.zookeeper.server.quorum.QuorumPeer;
import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
import java.io.IOException;
import java.lang.reflect.Field;
@@ -67,6 +68,12 @@ public class TestingZooKeeperMain extends ZooKeeperServerMain implements ZooKeep
super.runFromConfig(serverConfig);
}
+ @Override
+ public QuorumPeer getQuorumPeer()
+ {
+ throw new UnsupportedOperationException();
+ }
+
@SuppressWarnings("SynchronizationOnLocalVariableOrMethodParameter")
@Override
public void blockUntilStarted() throws Exception
http://git-wip-us.apache.org/repos/asf/incubator-curator/blob/6a26d4fa/curator-test/src/main/java/org/apache/curator/test/TestingZooKeeperServer.java
----------------------------------------------------------------------
diff --git a/curator-test/src/main/java/org/apache/curator/test/TestingZooKeeperServer.java b/curator-test/src/main/java/org/apache/curator/test/TestingZooKeeperServer.java
index b9e7dc1..be1a1b6 100644
--- a/curator-test/src/main/java/org/apache/curator/test/TestingZooKeeperServer.java
+++ b/curator-test/src/main/java/org/apache/curator/test/TestingZooKeeperServer.java
@@ -18,12 +18,14 @@
*/
package org.apache.curator.test;
+import org.apache.zookeeper.server.quorum.QuorumPeer;
import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
import org.apache.zookeeper.server.quorum.QuorumPeerMain;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.Closeable;
import java.io.IOException;
+import java.util.Collection;
import java.util.concurrent.atomic.AtomicReference;
/**
@@ -58,6 +60,16 @@ public class TestingZooKeeperServer extends QuorumPeerMain implements Closeable
main = (configBuilder.size() > 1) ? new TestingQuorumPeerMain() : new TestingZooKeeperMain();
}
+ public QuorumPeer getQuorumPeer()
+ {
+ return main.getQuorumPeer();
+ }
+
+ public Collection<InstanceSpec> getInstanceSpecs()
+ {
+ return configBuilder.getInstanceSpecs();
+ }
+
public void kill()
{
main.kill();
http://git-wip-us.apache.org/repos/asf/incubator-curator/blob/6a26d4fa/curator-test/src/main/java/org/apache/curator/test/ZooKeeperMainFace.java
----------------------------------------------------------------------
diff --git a/curator-test/src/main/java/org/apache/curator/test/ZooKeeperMainFace.java b/curator-test/src/main/java/org/apache/curator/test/ZooKeeperMainFace.java
index 946ac1a..6da29a4 100644
--- a/curator-test/src/main/java/org/apache/curator/test/ZooKeeperMainFace.java
+++ b/curator-test/src/main/java/org/apache/curator/test/ZooKeeperMainFace.java
@@ -18,6 +18,7 @@
*/
package org.apache.curator.test;
+import org.apache.zookeeper.server.quorum.QuorumPeer;
import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
import java.io.Closeable;
@@ -28,4 +29,6 @@ public interface ZooKeeperMainFace extends Closeable
public void blockUntilStarted() throws Exception;
public void kill();
+
+ public QuorumPeer getQuorumPeer();
}