[maven-release-plugin] prepare release dtest-api-0.0.2
diff --git a/pom.xml b/pom.xml
index 10bf63d..c22bcdc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.apache.cassandra</groupId>
     <artifactId>dtest-api</artifactId>
-    <version>0.0.2-SNAPSHOT</version>
+    <version>0.0.2</version>
     <name>In JVM Test API</name>
     <description>In JVM Test API</description>
 
@@ -93,7 +93,7 @@
         <connection>scm:git:https://gitbox.apache.org/repos/asf/cassandra-in-jvm-dtest-api.git</connection>
         <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/cassandra-in-jvm-dtest-api.git</developerConnection>
         <url>git@github.com:apache/cassandra-in-jvm-dtests.git</url>
-        <tag>HEAD</tag>
+        <tag>dtest-api-0.0.2</tag>
     </scm>
 </project>
 
diff --git a/src/test/java/org/apache/cassandra/distributed/test/BootstrapTest.java b/src/test/java/org/apache/cassandra/distributed/test/BootstrapTest.java
deleted file mode 100644
index 79f5191..0000000
--- a/src/test/java/org/apache/cassandra/distributed/test/BootstrapTest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.cassandra.distributed.test;
-
-import java.util.Map;
-import java.util.stream.Collectors;
-import java.util.stream.IntStream;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import org.apache.cassandra.distributed.api.ConsistencyLevel;
-import org.apache.cassandra.distributed.api.ICluster;
-import org.apache.cassandra.distributed.api.IInstance;
-import org.apache.cassandra.distributed.api.IInstanceConfig;
-import org.apache.cassandra.distributed.api.TokenSupplier;
-import org.apache.cassandra.distributed.api.IInvokableInstance;
-import org.apache.cassandra.distributed.shared.Builder;
-import org.apache.cassandra.distributed.shared.NetworkTopology;
-
-import static org.apache.cassandra.distributed.api.Feature.GOSSIP;
-import static org.apache.cassandra.distributed.api.Feature.NETWORK;
-
-public class BootstrapTest extends TestBaseImpl
-{
-    @Test
-    public void bootstrapTest() throws Throwable
-    {
-        int originalNodeCount = 2;
-        int expandedNodeCount = originalNodeCount + 1;
-        Builder<IInstance, ICluster> builder = builder().withNodes(originalNodeCount)
-                                                        .withTokenSupplier(TokenSupplier.evenlyDistributedTokens(expandedNodeCount))
-                                                        .withNodeIdTopology(NetworkTopology.singleDcNetworkTopology(originalNodeCount, "dc0", "rack0"))
-                                                        .withConfig(config -> config.with(NETWORK, GOSSIP));
-
-        Map<Integer, Long> withBootstrap = null;
-        Map<Integer, Long> naturally = null;
-        try (ICluster<IInvokableInstance> cluster = builder.withNodes(originalNodeCount).start())
-        {
-            populate(cluster);
-
-            IInstanceConfig config = builder.withNodeIdTopology(NetworkTopology.singleDcNetworkTopology(expandedNodeCount, "dc0", "rack0"))
-                                            .newInstanceConfig(cluster);
-            config.set("auto_bootstrap", true);
-
-            cluster.bootstrap(config).startup();
-            withBootstrap = count(cluster);
-        }
-
-        builder = builder.withNodes(expandedNodeCount)
-                         .withTokenSupplier(TokenSupplier.evenlyDistributedTokens(expandedNodeCount))
-                         .withConfig(config -> config.with(NETWORK, GOSSIP));
-
-        try (ICluster cluster = builder.start())
-        {
-            populate(cluster);
-            naturally = count(cluster);
-        }
-
-        for (Map.Entry<Integer, Long> e : withBootstrap.entrySet())
-            Assert.assertTrue(e.getValue() >= naturally.get(e.getKey()));
-    }
-
-    public void populate(ICluster cluster)
-    {
-        cluster.schemaChange("CREATE KEYSPACE " + KEYSPACE + " WITH replication = {'class': 'SimpleStrategy', 'replication_factor': " + 3 + "};");
-        cluster.schemaChange("CREATE TABLE " + KEYSPACE + ".tbl (pk int, ck int, v int, PRIMARY KEY (pk, ck))");
-
-        for (int i = 0; i < 1000; i++)
-            cluster.coordinator(1).execute("INSERT INTO " + KEYSPACE + ".tbl (pk, ck, v) VALUES (?, ?, ?)",
-                                           ConsistencyLevel.QUORUM,
-                                           i, i, i);
-    }
-
-    public Map<Integer, Long> count(ICluster cluster)
-    {
-        return IntStream.rangeClosed(1, cluster.size())
-                        .boxed()
-                        .collect(Collectors.toMap(nodeId -> nodeId,
-                                                  nodeId -> (Long) cluster.get(nodeId).executeInternal("SELECT count(*) FROM " + KEYSPACE + ".tbl")[0][0]));
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/org/apache/cassandra/distributed/test/GossipSettlesTest.java b/src/test/java/org/apache/cassandra/distributed/test/GossipSettlesTest.java
deleted file mode 100644
index e3d3c68..0000000
--- a/src/test/java/org/apache/cassandra/distributed/test/GossipSettlesTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.cassandra.distributed.test;
-
-import org.junit.Test;
-
-import org.apache.cassandra.distributed.api.ICluster;
-
-import static org.apache.cassandra.distributed.api.Feature.GOSSIP;
-import static org.apache.cassandra.distributed.api.Feature.NETWORK;
-
-public class GossipSettlesTest extends TestBaseImpl
-{
-
-    @Test
-    public void testGossipSettles() throws Throwable
-    {
-        /* Use withSubnet(1) to prove seed provider is set correctly - without the fix to pass a seed provider, this test fails */
-        try (ICluster cluster = builder().withNodes(3)
-                                         .withConfig(config -> config.with(GOSSIP).with(NETWORK))
-                                         .withSubnet(1)
-                                         .start())
-        {
-        }
-    }
-
-}
diff --git a/src/test/java/org/apache/cassandra/distributed/test/MessageFiltersTest.java b/src/test/java/org/apache/cassandra/distributed/test/MessageFiltersTest.java
deleted file mode 100644
index 2241ed4..0000000
--- a/src/test/java/org/apache/cassandra/distributed/test/MessageFiltersTest.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.cassandra.distributed.test;
-
-import org.apache.cassandra.distributed.api.IMessage;
-import org.apache.cassandra.distributed.api.IMessageFilters;
-import org.apache.cassandra.distributed.shared.MessageFilters;
-import org.junit.Assert;
-import org.junit.Test;
-
-import java.net.InetSocketAddress;
-import java.util.Arrays;
-import java.util.concurrent.atomic.AtomicInteger;
-
-public class MessageFiltersTest
-{
-    @Test
-    public void simpleInboundFiltersTest()
-    {
-        simpleFiltersTest(true);
-    }
-
-    @Test
-    public void simpleOutboundFiltersTest()
-    {
-        simpleFiltersTest(false);
-    }
-
-    private interface Permit
-    {
-        boolean test(int from, int to, IMessage msg);
-    }
-
-    private void simpleFiltersTest(boolean inbound)
-    {
-        int VERB1 = 1;
-        int VERB2 = 2;
-        int VERB3 = 3;
-        int i1 = 1;
-        int i2 = 2;
-        int i3 = 3;
-        String MSG1 = "msg1";
-        String MSG2 = "msg2";
-
-        MessageFilters filters = new MessageFilters();
-        Permit permit = inbound ? filters::permitInbound : filters::permitOutbound;
-
-        IMessageFilters.Filter filter = filters.allVerbs().inbound(inbound).from(1).drop();
-        Assert.assertFalse(permit.test(i1, i2, msg(VERB1, MSG1)));
-        Assert.assertFalse(permit.test(i1, i2, msg(VERB2, MSG1)));
-        Assert.assertFalse(permit.test(i1, i2, msg(VERB3, MSG1)));
-        Assert.assertTrue(permit.test(i2, i1, msg(VERB1, MSG1)));
-        filter.off();
-        Assert.assertTrue(permit.test(i1, i2, msg(VERB1, MSG1)));
-        filters.reset();
-
-        filters.verbs(VERB1).inbound(inbound).from(1).to(2).drop();
-        Assert.assertFalse(permit.test(i1, i2, msg(VERB1, MSG1)));
-        Assert.assertTrue(permit.test(i1, i2, msg(VERB2, MSG1)));
-        Assert.assertTrue(permit.test(i2, i1, msg(VERB1, MSG1)));
-        Assert.assertTrue(permit.test(i2, i3, msg(VERB2, MSG1)));
-
-        filters.reset();
-        AtomicInteger counter = new AtomicInteger();
-        filters.verbs(VERB1).inbound(inbound).from(1).to(2).messagesMatching((from, to, msg) -> {
-            counter.incrementAndGet();
-            return Arrays.equals(msg.bytes(), MSG1.getBytes());
-        }).drop();
-        Assert.assertFalse(permit.test(i1, i2, msg(VERB1, MSG1)));
-        Assert.assertEquals(counter.get(), 1);
-        Assert.assertTrue(permit.test(i1, i2, msg(VERB1, MSG2)));
-        Assert.assertEquals(counter.get(), 2);
-
-        // filter chain gets interrupted because a higher level filter returns no match
-        Assert.assertTrue(permit.test(i2, i1, msg(VERB1, MSG1)));
-        Assert.assertEquals(counter.get(), 2);
-        Assert.assertTrue(permit.test(i2, i1, msg(VERB2, MSG1)));
-        Assert.assertEquals(counter.get(), 2);
-        filters.reset();
-
-        filters.allVerbs().inbound(inbound).from(3, 2).to(2, 1).drop();
-        Assert.assertFalse(permit.test(i3, i1, msg(VERB1, MSG1)));
-        Assert.assertFalse(permit.test(i3, i2, msg(VERB1, MSG1)));
-        Assert.assertFalse(permit.test(i2, i1, msg(VERB1, MSG1)));
-        Assert.assertTrue(permit.test(i2, i3, msg(VERB1, MSG1)));
-        Assert.assertTrue(permit.test(i1, i2, msg(VERB1, MSG1)));
-        Assert.assertTrue(permit.test(i1, i3, msg(VERB1, MSG1)));
-        filters.reset();
-
-        counter.set(0);
-        filters.allVerbs().inbound(inbound).from(1).to(2).messagesMatching((from, to, msg) -> {
-            counter.incrementAndGet();
-            return false;
-        }).drop();
-        Assert.assertTrue(permit.test(i1, i2, msg(VERB1, MSG1)));
-        Assert.assertTrue(permit.test(i1, i3, msg(VERB1, MSG1)));
-        Assert.assertTrue(permit.test(i1, i2, msg(VERB1, MSG1)));
-        Assert.assertEquals(2, counter.get());
-    }
-
-    IMessage msg(int verb, String msg)
-    {
-        return new IMessage()
-        {
-            public int verb() { return verb; }
-            public byte[] bytes() { return msg.getBytes(); }
-            public int id() { return 0; }
-            public int version() { return 0;  }
-            public InetSocketAddress from() { return null; }
-            public int fromPort()
-            {
-                return 0;
-            }
-        };
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/org/apache/cassandra/distributed/test/NativeProtocolTest.java b/src/test/java/org/apache/cassandra/distributed/test/NativeProtocolTest.java
deleted file mode 100644
index 2bbe2a9..0000000
--- a/src/test/java/org/apache/cassandra/distributed/test/NativeProtocolTest.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.cassandra.distributed.test;
-
-import org.apache.cassandra.distributed.impl.RowUtil;
-import org.junit.Assert;
-import org.junit.Test;
-
-import com.datastax.driver.core.ConsistencyLevel;
-import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.Session;
-import com.datastax.driver.core.SimpleStatement;
-import com.datastax.driver.core.Statement;
-import org.apache.cassandra.distributed.api.ICluster;
-
-import static org.apache.cassandra.distributed.api.Feature.GOSSIP;
-import static org.apache.cassandra.distributed.api.Feature.NATIVE_PROTOCOL;
-import static org.apache.cassandra.distributed.api.Feature.NETWORK;
-
-import static org.apache.cassandra.distributed.shared.AssertUtils.*;
-
-public class NativeProtocolTest extends TestBaseImpl
-{
-
-    @Test
-    public void withClientRequests() throws Throwable
-    {
-        try (ICluster ignored = init(builder().withNodes(3)
-                                              .withConfig(config -> config.with(GOSSIP, NETWORK, NATIVE_PROTOCOL))
-                                              .start()))
-        {
-
-            try (com.datastax.driver.core.Cluster cluster = com.datastax.driver.core.Cluster.builder().addContactPoint("127.0.0.1").build();
-                 Session session = cluster.connect())
-            {
-                session.execute("CREATE TABLE " + KEYSPACE + ".tbl (pk int, ck int, v int, PRIMARY KEY (pk, ck));");
-                session.execute("INSERT INTO " + KEYSPACE + ".tbl (pk, ck, v) values (1,1,1);");
-                Statement select = new SimpleStatement("select * from " + KEYSPACE + ".tbl;").setConsistencyLevel(ConsistencyLevel.ALL);
-                final ResultSet resultSet = session.execute(select);
-                assertRows(RowUtil.toObjects(resultSet), row(1, 1, 1));
-                Assert.assertEquals(3, cluster.getMetadata().getAllHosts().size());
-            }
-        }
-    }
-
-    @Test
-    public void withCounters() throws Throwable
-    {
-        try (ICluster ignored = init(builder().withNodes(3)
-                                              .withConfig(config -> config.with(GOSSIP, NETWORK, NATIVE_PROTOCOL))
-                                              .start()))
-        {
-            final com.datastax.driver.core.Cluster cluster = com.datastax.driver.core.Cluster.builder().addContactPoint("127.0.0.1").build();
-            Session session = cluster.connect();
-            session.execute("CREATE TABLE " + KEYSPACE + ".tbl (pk int, ck counter, PRIMARY KEY (pk));");
-            session.execute("UPDATE " + KEYSPACE + ".tbl set ck = ck + 10 where pk = 1;");
-            Statement select = new SimpleStatement("select * from " + KEYSPACE + ".tbl;").setConsistencyLevel(ConsistencyLevel.ALL);
-            final ResultSet resultSet = session.execute(select);
-            assertRows(RowUtil.toObjects(resultSet), row(1, 10L));
-            Assert.assertEquals(3, cluster.getMetadata().getAllHosts().size());
-            session.close();
-            cluster.close();
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/org/apache/cassandra/distributed/test/NetworkTopologyTest.java b/src/test/java/org/apache/cassandra/distributed/test/NetworkTopologyTest.java
deleted file mode 100644
index 53154e3..0000000
--- a/src/test/java/org/apache/cassandra/distributed/test/NetworkTopologyTest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.cassandra.distributed.test;
-
-import java.util.Collections;
-import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import org.apache.cassandra.distributed.api.ICluster;
-import org.apache.cassandra.distributed.api.IInstance;
-import org.apache.cassandra.distributed.api.IInvokableInstance;
-import org.apache.cassandra.distributed.shared.NetworkTopology;
-
-public class NetworkTopologyTest extends TestBaseImpl
-{
-    @Test
-    public void namedDcTest() throws Throwable
-    {
-        try (ICluster<IInvokableInstance> cluster = builder()
-                                                    .withNodeIdTopology(Collections.singletonMap(1, NetworkTopology.dcAndRack("somewhere", "rack0")))
-                                                    .withRack("elsewhere", "firstrack", 1)
-                                                    .withRack("elsewhere", "secondrack", 2)
-                                                    .withDC("nearthere", 4)
-                                                    .start())
-        {
-            Assert.assertEquals(1, cluster.stream("somewhere").count());
-            Assert.assertEquals(1, cluster.stream("elsewhere", "firstrack").count());
-            Assert.assertEquals(2, cluster.stream("elsewhere", "secondrack").count());
-            Assert.assertEquals(3, cluster.stream("elsewhere").count());
-            Assert.assertEquals(4, cluster.stream("nearthere").count());
-
-            Set<IInstance> expect = cluster.stream().collect(Collectors.toSet());
-            Set<IInstance> result = Stream.concat(Stream.concat(cluster.stream("somewhere"),
-                                                                cluster.stream("elsewhere")),
-                                                  cluster.stream("nearthere")).collect(Collectors.toSet());
-            Assert.assertEquals(expect, result);
-        }
-    }
-
-    @Test
-    public void automaticNamedDcTest() throws Throwable
-
-    {
-        try (ICluster cluster = builder()
-                                .withRacks(2, 1, 3)
-                                .start())
-        {
-            Assert.assertEquals(6, cluster.stream().count());
-            Assert.assertEquals(3, cluster.stream("datacenter1").count());
-            Assert.assertEquals(3, cluster.stream("datacenter2", "rack1").count());
-        }
-    }
-
-    @Test(expected = IllegalStateException.class)
-    public void noCountsAfterNamingDCsTest()
-    {
-        builder().withDC("nameddc", 1)
-                 .withDCs(1);
-    }
-
-    @Test(expected = IllegalStateException.class)
-    public void mustProvideNodeCountBeforeWithDCsTest()
-    {
-        builder().withDCs(1);
-    }
-
-    @Test(expected = IllegalStateException.class)
-    public void noEmptyNodeIdTopologyTest()
-    {
-        builder().withNodeIdTopology(Collections.emptyMap());
-    }
-
-    @Test(expected = IllegalStateException.class)
-    public void noHolesInNodeIdTopologyTest()
-    {
-        builder().withNodeIdTopology(Collections.singletonMap(2, NetworkTopology.dcAndRack("doomed", "rack")));
-    }
-}
\ No newline at end of file
diff --git a/src/test/java/org/apache/cassandra/distributed/test/SimpleReadWriteTest.java b/src/test/java/org/apache/cassandra/distributed/test/SimpleReadWriteTest.java
deleted file mode 100644
index 4c4ef0f..0000000
--- a/src/test/java/org/apache/cassandra/distributed/test/SimpleReadWriteTest.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.cassandra.distributed.test;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import org.apache.cassandra.distributed.api.ConsistencyLevel;
-import org.apache.cassandra.distributed.api.ICluster;
-
-import static org.apache.cassandra.distributed.api.Feature.NETWORK;
-import static org.apache.cassandra.distributed.shared.AssertUtils.*;
-
-public class SimpleReadWriteTest extends TestBaseImpl
-{
-    @Test
-    public void coordinatorReadTest() throws Throwable
-    {
-        try (ICluster cluster = init(builder().withNodes(3).start()))
-        {
-            cluster.schemaChange("CREATE TABLE " + KEYSPACE + ".tbl (pk int, ck int, v int, PRIMARY KEY (pk, ck))");
-
-            cluster.get(1).executeInternal("INSERT INTO " + KEYSPACE + ".tbl (pk, ck, v) VALUES (1, 1, 1)");
-            cluster.get(2).executeInternal("INSERT INTO " + KEYSPACE + ".tbl (pk, ck, v) VALUES (1, 2, 2)");
-            cluster.get(3).executeInternal("INSERT INTO " + KEYSPACE + ".tbl (pk, ck, v) VALUES (1, 3, 3)");
-
-            assertRows(cluster.coordinator(1).execute("SELECT * FROM " + KEYSPACE + ".tbl WHERE pk = ?",
-                                                     ConsistencyLevel.ALL,
-                                                     1),
-                       row(1, 1, 1),
-                       row(1, 2, 2),
-                       row(1, 3, 3));
-        }
-    }
-
-    @Test
-    public void coordinatorWriteTest() throws Throwable
-    {
-        try (ICluster cluster = init(builder().withNodes(3).start()))
-        {
-            cluster.schemaChange("CREATE TABLE " + KEYSPACE + ".tbl (pk int, ck int, v int, PRIMARY KEY (pk, ck))");
-
-            cluster.coordinator(1).execute("INSERT INTO " + KEYSPACE + ".tbl (pk, ck, v) VALUES (1, 1, 1)",
-                                          ConsistencyLevel.QUORUM);
-
-            for (int i = 0; i < 3; i++)
-            {
-                assertRows(cluster.get(1).executeInternal("SELECT * FROM " + KEYSPACE + ".tbl WHERE pk = 1"),
-                           row(1, 1, 1));
-            }
-
-            assertRows(cluster.coordinator(1).execute("SELECT * FROM " + KEYSPACE + ".tbl WHERE pk = 1",
-                                                     ConsistencyLevel.QUORUM),
-                       row(1, 1, 1));
-        }
-    }
-
-    @Test
-    public void readRepairTest() throws Throwable
-    {
-        try (ICluster cluster = init(builder().withNodes(3).start()))
-        {
-            cluster.schemaChange("CREATE TABLE " + KEYSPACE + ".tbl (pk int, ck int, v int, PRIMARY KEY (pk, ck))");
-
-            cluster.get(1).executeInternal("INSERT INTO " + KEYSPACE + ".tbl (pk, ck, v) VALUES (1, 1, 1)");
-            cluster.get(2).executeInternal("INSERT INTO " + KEYSPACE + ".tbl (pk, ck, v) VALUES (1, 1, 1)");
-
-            assertRows(cluster.get(3).executeInternal("SELECT * FROM " + KEYSPACE + ".tbl WHERE pk = 1"));
-
-            assertRows(cluster.coordinator(1).execute("SELECT * FROM " + KEYSPACE + ".tbl WHERE pk = 1",
-                                                     ConsistencyLevel.ALL), // ensure node3 in preflist
-                       row(1, 1, 1));
-
-            // Verify that data got repaired to the third node
-            assertRows(cluster.get(3).executeInternal("SELECT * FROM " + KEYSPACE + ".tbl WHERE pk = 1"),
-                       row(1, 1, 1));
-        }
-    }
-
-    @Test
-    public void simplePagedReadsTest() throws Throwable
-    {
-        try (ICluster cluster = init(builder().withNodes(3).start()))
-        {
-            cluster.schemaChange("CREATE TABLE " + KEYSPACE + ".tbl (pk int, ck int, v int, PRIMARY KEY (pk, ck))");
-
-            int size = 100;
-            Object[][] results = new Object[size][];
-            for (int i = 0; i < size; i++)
-            {
-                cluster.coordinator(1).execute("INSERT INTO " + KEYSPACE + ".tbl (pk, ck, v) VALUES (1, ?, ?)",
-                                               ConsistencyLevel.QUORUM,
-                                               i, i);
-                results[i] = new Object[] { 1, i, i};
-            }
-
-            // Make sure paged read returns same results with different page sizes
-            for (int pageSize : new int[] { 1, 2, 3, 5, 10, 20, 50})
-            {
-                assertRows(cluster.coordinator(1).executeWithPaging("SELECT * FROM " + KEYSPACE + ".tbl",
-                                                                    ConsistencyLevel.QUORUM,
-                                                                    pageSize),
-                           results);
-            }
-        }
-    }
-
-    @Test
-    public void pagingWithRepairTest() throws Throwable
-    {
-        try (ICluster cluster = init(builder().withNodes(3).start()))
-        {
-            cluster.schemaChange("CREATE TABLE " + KEYSPACE + ".tbl (pk int, ck int, v int, PRIMARY KEY (pk, ck))");
-
-            int size = 100;
-            Object[][] results = new Object[size][];
-            for (int i = 0; i < size; i++)
-            {
-                // Make sure that data lands on different nodes and not coordinator
-                cluster.get(i % 2 == 0 ? 2 : 3).executeInternal("INSERT INTO " + KEYSPACE + ".tbl (pk, ck, v) VALUES (1, ?, ?)",
-                                                                i, i);
-
-                results[i] = new Object[] { 1, i, i};
-            }
-
-            // Make sure paged read returns same results with different page sizes
-            for (int pageSize : new int[] { 1, 2, 3, 5, 10, 20, 50})
-            {
-                assertRows(cluster.coordinator(1).executeWithPaging("SELECT * FROM " + KEYSPACE + ".tbl",
-                                                                    ConsistencyLevel.ALL,
-                                                                    pageSize),
-                           results);
-            }
-
-            assertRows(cluster.get(1).executeInternal("SELECT * FROM " + KEYSPACE + ".tbl"),
-                       results);
-        }
-    }
-
-    @Test
-    public void pagingTests() throws Throwable
-    {
-        try (ICluster cluster = init(builder().withNodes(3).start());
-             ICluster singleNode = init(builder().withNodes(1).withSubnet(1).start()))
-        {
-            cluster.schemaChange("CREATE TABLE " + KEYSPACE + ".tbl (pk int, ck int, v int, PRIMARY KEY (pk, ck))");
-            singleNode.schemaChange("CREATE TABLE " + KEYSPACE + ".tbl (pk int, ck int, v int, PRIMARY KEY (pk, ck))");
-
-            for (int i = 0; i < 10; i++)
-            {
-                for (int j = 0; j < 10; j++)
-                {
-                    cluster.coordinator(1).execute("INSERT INTO " + KEYSPACE + ".tbl (pk, ck, v) VALUES (1, ?, ?)",
-                                                   ConsistencyLevel.QUORUM,
-                                                   i, j, i + i);
-                    singleNode.coordinator(1).execute("INSERT INTO " + KEYSPACE + ".tbl (pk, ck, v) VALUES (1, ?, ?)",
-                                                      ConsistencyLevel.QUORUM,
-                                                      i, j, i + i);
-                }
-            }
-
-            int[] pageSizes = new int[] { 1, 2, 3, 5, 10, 20, 50};
-            String[] statements = new String [] {"SELECT * FROM " + KEYSPACE  + ".tbl WHERE pk = 1 AND ck > 5",
-                                                 "SELECT * FROM " + KEYSPACE  + ".tbl WHERE pk = 1 AND ck >= 5",
-                                                 "SELECT * FROM " + KEYSPACE  + ".tbl WHERE pk = 1 AND ck > 5 AND ck <= 10",
-                                                 "SELECT * FROM " + KEYSPACE  + ".tbl WHERE pk = 1 AND ck > 5 LIMIT 3",
-                                                 "SELECT * FROM " + KEYSPACE  + ".tbl WHERE pk = 1 AND ck >= 5 LIMIT 2",
-                                                 "SELECT * FROM " + KEYSPACE  + ".tbl WHERE pk = 1 AND ck > 5 AND ck <= 10 LIMIT 2",
-                                                 "SELECT * FROM " + KEYSPACE  + ".tbl WHERE pk = 1 AND ck > 5 ORDER BY ck DESC",
-                                                 "SELECT * FROM " + KEYSPACE  + ".tbl WHERE pk = 1 AND ck >= 5 ORDER BY ck DESC",
-                                                 "SELECT * FROM " + KEYSPACE  + ".tbl WHERE pk = 1 AND ck > 5 AND ck <= 10 ORDER BY ck DESC",
-                                                 "SELECT * FROM " + KEYSPACE  + ".tbl WHERE pk = 1 AND ck > 5 ORDER BY ck DESC LIMIT 3",
-                                                 "SELECT * FROM " + KEYSPACE  + ".tbl WHERE pk = 1 AND ck >= 5 ORDER BY ck DESC LIMIT 2",
-                                                 "SELECT * FROM " + KEYSPACE  + ".tbl WHERE pk = 1 AND ck > 5 AND ck <= 10 ORDER BY ck DESC LIMIT 2",
-                                                 "SELECT DISTINCT pk FROM " + KEYSPACE  + ".tbl LIMIT 3",
-                                                 "SELECT DISTINCT pk FROM " + KEYSPACE  + ".tbl WHERE pk IN (3,5,8,10)",
-                                                 "SELECT DISTINCT pk FROM " + KEYSPACE  + ".tbl WHERE pk IN (3,5,8,10) LIMIT 2"
-            };
-            for (String statement : statements)
-            {
-                for (int pageSize : pageSizes)
-                {
-                    assertRows(cluster.coordinator(1)
-                                      .executeWithPaging(statement,
-                                                         ConsistencyLevel.QUORUM,  pageSize),
-                               singleNode.coordinator(1)
-                                         .executeWithPaging(statement,
-                                                            ConsistencyLevel.QUORUM,  Integer.MAX_VALUE));
-                }
-            }
-
-        }
-    }
-}