http://git-wip-us.apache.org/repos/asf/zookeeper/blob/7291e47c/zookeeper-common/src/test/java/org/apache/zookeeper/test/FollowerTest.java ---------------------------------------------------------------------- diff --git a/zookeeper-common/src/test/java/org/apache/zookeeper/test/FollowerTest.java b/zookeeper-common/src/test/java/org/apache/zookeeper/test/FollowerTest.java deleted file mode 100644 index fa6b4a3..0000000 --- a/zookeeper-common/src/test/java/org/apache/zookeeper/test/FollowerTest.java +++ /dev/null @@ -1,140 +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.zookeeper.test; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.Semaphore; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - -import org.apache.zookeeper.AsyncCallback; -import org.apache.zookeeper.CreateMode; -import org.apache.zookeeper.KeeperException; -import org.apache.zookeeper.Op; -import org.apache.zookeeper.OpResult; -import org.apache.zookeeper.WatchedEvent; -import org.apache.zookeeper.Watcher; -import org.apache.zookeeper.Watcher.Event.KeeperState; -import org.apache.zookeeper.ZKTestCase; -import org.apache.zookeeper.ZooDefs; -import org.apache.zookeeper.ZooDefs.Ids; -import org.apache.zookeeper.ZooKeeper; -import org.apache.zookeeper.data.Stat; -import org.apache.zookeeper.server.quorum.Leader; -import org.apache.zookeeper.server.quorum.LearnerHandler; -import org.apache.zookeeper.test.ClientBase.CountdownWatcher; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class FollowerTest extends ZKTestCase { - private static final Logger LOG = LoggerFactory.getLogger(FollowerTest.class); - public static final long CONNECTION_TIMEOUT = ClientTest.CONNECTION_TIMEOUT; - - volatile int counter = 0; - volatile int errors = 0; - - /** - * See ZOOKEEPER-790 for details - * */ - @Test - public void testFollowersStartAfterLeader() throws Exception { - QuorumUtil qu = new QuorumUtil(1); - CountdownWatcher watcher = new CountdownWatcher(); - qu.startQuorum(); - - int index = 1; - while(qu.getPeer(index).peer.leader == null) { - index++; - } - - ZooKeeper zk = new ZooKeeper( - "127.0.0.1:" + qu.getPeer((index == 1)?2:1).peer.getClientPort(), - ClientBase.CONNECTION_TIMEOUT, watcher); - watcher.waitForConnected(CONNECTION_TIMEOUT); - - // break the quorum - qu.shutdown(index); - - // Wait until we disconnect to proceed - watcher.waitForDisconnected(CONNECTION_TIMEOUT); - - // try to reestablish the quorum - qu.start(index); - - try{ - watcher.waitForConnected(30000); - } catch(TimeoutException e) { - Assert.fail("client could not connect to reestablished quorum: giving up after 30+ seconds."); - } - - zk.close(); - - qu.tearDown(); - } - - // skip superhammer and clientcleanup as they are too expensive for quorum - - /** - * Tests if a multiop submitted to a non-leader propagates to the leader properly - * (see ZOOKEEPER-1124). - * - * The test works as follows. It has a client connect to a follower and submit a multiop - * to the follower. It then verifies that the multiop successfully gets committed by the leader. - * - * Without the fix in ZOOKEEPER-1124, this fails with a ConnectionLoss KeeperException. - */ - @Test - public void testMultiToFollower() throws Exception { - QuorumUtil qu = new QuorumUtil(1); - CountdownWatcher watcher = new CountdownWatcher(); - qu.startQuorum(); - - int index = 1; - while(qu.getPeer(index).peer.leader == null) { - index++; - } - - ZooKeeper zk = new ZooKeeper( - "127.0.0.1:" + qu.getPeer((index == 1)?2:1).peer.getClientPort(), - ClientBase.CONNECTION_TIMEOUT, watcher); - watcher.waitForConnected(CONNECTION_TIMEOUT); - - List<OpResult> results = new ArrayList<OpResult>(); - - results = zk.multi(Arrays.asList( - Op.create("/multi0", new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT), - Op.create("/multi1", new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT), - Op.create("/multi2", new byte[0], Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT) - )); - zk.getData("/multi0", false, null); - zk.getData("/multi1", false, null); - zk.getData("/multi2", false, null); - - zk.close(); - - qu.tearDown(); - } -}
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/7291e47c/zookeeper-common/src/test/java/org/apache/zookeeper/test/FourLetterWordsQuorumTest.java ---------------------------------------------------------------------- diff --git a/zookeeper-common/src/test/java/org/apache/zookeeper/test/FourLetterWordsQuorumTest.java b/zookeeper-common/src/test/java/org/apache/zookeeper/test/FourLetterWordsQuorumTest.java deleted file mode 100644 index 49d90f7..0000000 --- a/zookeeper-common/src/test/java/org/apache/zookeeper/test/FourLetterWordsQuorumTest.java +++ /dev/null @@ -1,113 +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.zookeeper.test; - -import java.io.IOException; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.apache.zookeeper.TestableZooKeeper; -import static org.apache.zookeeper.client.FourLetterWordMain.send4LetterWord; -import org.junit.Assert; -import org.junit.Test; - -public class FourLetterWordsQuorumTest extends QuorumBase { - protected static final Logger LOG = - LoggerFactory.getLogger(FourLetterWordsQuorumTest.class); - - /** Test the various four letter words */ - @Test - public void testFourLetterWords() throws Exception { - String servers[] = hostPort.split(","); - for (String hp : servers) { - verify(hp, "ruok", "imok"); - verify(hp, "envi", "java.version"); - verify(hp, "conf", "clientPort"); - verify(hp, "stat", "Outstanding"); - verify(hp, "srvr", "Outstanding"); - verify(hp, "cons", "queued"); - verify(hp, "dump", "Session"); - verify(hp, "wchs", "watches"); - verify(hp, "wchp", ""); - verify(hp, "wchc", ""); - - verify(hp, "srst", "reset"); - verify(hp, "crst", "reset"); - - verify(hp, "stat", "Outstanding"); - verify(hp, "srvr", "Outstanding"); - verify(hp, "cons", "queued"); - - TestableZooKeeper zk = createClient(hp); - String sid = getHexSessionId(zk.getSessionId()); - - verify(hp, "stat", "queued"); - verify(hp, "srvr", "Outstanding"); - verify(hp, "cons", sid); - verify(hp, "dump", sid); - - zk.getData("/", true, null); - - verify(hp, "stat", "queued"); - verify(hp, "srvr", "Outstanding"); - verify(hp, "cons", sid); - verify(hp, "dump", sid); - verify(hp, "wchs", "watching 1"); - verify(hp, "wchp", sid); - verify(hp, "wchc", sid); - - zk.close(); - - verify(hp, "ruok", "imok"); - verify(hp, "envi", "java.version"); - verify(hp, "conf", "clientPort"); - verify(hp, "stat", "Outstanding"); - verify(hp, "srvr", "Outstanding"); - verify(hp, "cons", "queued"); - verify(hp, "dump", "Session"); - verify(hp, "wchs", "watch"); - verify(hp, "wchp", ""); - verify(hp, "wchc", ""); - - verify(hp, "srst", "reset"); - verify(hp, "crst", "reset"); - - verify(hp, "stat", "Outstanding"); - verify(hp, "srvr", "Outstanding"); - verify(hp, "cons", "queued"); - - verify(hp, "mntr", "zk_version\t"); - } - } - - private void verify(String hp, String cmd, String expected) - throws IOException - { - for(HostPort hpobj: parseHostPortList(hp)) { - String resp = send4LetterWord(hpobj.host, hpobj.port, cmd); - LOG.info("cmd " + cmd + " expected " + expected + " got " + resp); - if (cmd.equals("dump")) { - Assert.assertTrue(resp.contains(expected) - || resp.contains("Sessions with Ephemerals")); - } else { - Assert.assertTrue(resp.contains(expected)); - } - } - } -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/7291e47c/zookeeper-common/src/test/java/org/apache/zookeeper/test/FourLetterWordsTest.java ---------------------------------------------------------------------- diff --git a/zookeeper-common/src/test/java/org/apache/zookeeper/test/FourLetterWordsTest.java b/zookeeper-common/src/test/java/org/apache/zookeeper/test/FourLetterWordsTest.java deleted file mode 100644 index bc8d071..0000000 --- a/zookeeper-common/src/test/java/org/apache/zookeeper/test/FourLetterWordsTest.java +++ /dev/null @@ -1,238 +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.zookeeper.test; - -import java.io.BufferedReader; -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.StringReader; -import java.util.regex.Pattern; - -import org.apache.zookeeper.TestableZooKeeper; -import org.apache.zookeeper.ZooKeeper; -import org.apache.zookeeper.common.IOUtils; -import static org.apache.zookeeper.client.FourLetterWordMain.send4LetterWord; -import org.junit.Assert; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.Timeout; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class FourLetterWordsTest extends ClientBase { - protected static final Logger LOG = - LoggerFactory.getLogger(FourLetterWordsTest.class); - - @Rule - public Timeout timeout = new Timeout(30000); - - /** Test the various four letter words */ - @Test - public void testFourLetterWords() throws Exception { - verify("ruok", "imok"); - verify("envi", "java.version"); - verify("conf", "clientPort"); - verify("stat", "Outstanding"); - verify("srvr", "Outstanding"); - verify("cons", "queued"); - verify("dump", "Session"); - verify("wchs", "watches"); - verify("wchp", ""); - verify("wchc", ""); - - verify("srst", "reset"); - verify("crst", "reset"); - - verify("stat", "Outstanding"); - verify("srvr", "Outstanding"); - verify("cons", "queued"); - - TestableZooKeeper zk = createClient(); - String sid = getHexSessionId(zk.getSessionId()); - - verify("stat", "queued"); - verify("srvr", "Outstanding"); - verify("cons", sid); - verify("dump", sid); - - zk.getData("/", true, null); - - verify("stat", "queued"); - verify("srvr", "Outstanding"); - verify("cons", sid); - verify("dump", sid); - - verify("wchs", "watching 1"); - verify("wchp", sid); - verify("wchc", sid); - zk.close(); - - verify("ruok", "imok"); - verify("envi", "java.version"); - verify("conf", "clientPort"); - verify("stat", "Outstanding"); - verify("srvr", "Outstanding"); - verify("cons", "queued"); - verify("dump", "Session"); - verify("wchs", "watch"); - verify("wchp", ""); - verify("wchc", ""); - - verify("srst", "reset"); - verify("crst", "reset"); - - verify("stat", "Outstanding"); - verify("srvr", "Outstanding"); - verify("cons", "queued"); - verify("mntr", "zk_server_state\tstandalone"); - verify("mntr", "num_alive_connections"); - verify("mntr", "fsync_threshold_exceed_count"); - verify("stat", "Connections"); - verify("srvr", "Connections"); - } - - private String sendRequest(String cmd) throws IOException { - HostPort hpobj = ClientBase.parseHostPortList(hostPort).get(0); - return send4LetterWord(hpobj.host, hpobj.port, cmd); - } - private String sendRequest(String cmd, int timeout) throws IOException { - HostPort hpobj = ClientBase.parseHostPortList(hostPort).get(0); - return send4LetterWord(hpobj.host, hpobj.port, cmd, timeout); - } - - private void verify(String cmd, String expected) throws IOException { - String resp = sendRequest(cmd); - LOG.info("cmd " + cmd + " expected " + expected + " got " + resp); - Assert.assertTrue(resp.contains(expected)); - } - - @Test - public void testValidateStatOutput() throws Exception { - ZooKeeper zk1 = createClient(); - ZooKeeper zk2 = createClient(); - - String resp = sendRequest("stat"); - BufferedReader in = new BufferedReader(new StringReader(resp)); - - String line; - // first line should be version info - line = in.readLine(); - Assert.assertTrue(Pattern.matches("^.*\\s\\d+\\.\\d+\\.\\d+-.*$", line)); - Assert.assertTrue(Pattern.matches("^Clients:$", in.readLine())); - - int count = 0; - while ((line = in.readLine()).length() > 0) { - count++; - Assert.assertTrue(Pattern.matches("^ /.*:\\d+\\[\\d+\\]\\(queued=\\d+,recved=\\d+,sent=\\d+\\)$", line)); - } - // ensure at least the two clients we created are accounted for - Assert.assertTrue(count >= 2); - - line = in.readLine(); - Assert.assertTrue(Pattern.matches("^Latency min/avg/max: \\d+/\\d+/\\d+$", line)); - line = in.readLine(); - Assert.assertTrue(Pattern.matches("^Received: \\d+$", line)); - line = in.readLine(); - Assert.assertTrue(Pattern.matches("^Sent: \\d+$", line)); - line = in.readLine(); - Assert.assertTrue(Pattern.matches("^Connections: \\d+$", line)); - line = in.readLine(); - Assert.assertTrue(Pattern.matches("^Outstanding: \\d+$", line)); - line = in.readLine(); - Assert.assertTrue(Pattern.matches("^Zxid: 0x[\\da-fA-F]+$", line)); - line = in.readLine(); - Assert.assertTrue(Pattern.matches("^Mode: .*$", line)); - line = in.readLine(); - Assert.assertTrue(Pattern.matches("^Node count: \\d+$", line)); - - zk1.close(); - zk2.close(); - } - - @Test - public void testValidateConsOutput() throws Exception { - ZooKeeper zk1 = createClient(); - ZooKeeper zk2 = createClient(); - - String resp = sendRequest("cons"); - BufferedReader in = new BufferedReader(new StringReader(resp)); - - String line; - int count = 0; - while ((line = in.readLine()) != null && line.length() > 0) { - count++; - Assert.assertTrue(line, Pattern.matches("^ /.*:\\d+\\[\\d+\\]\\(queued=\\d+,recved=\\d+,sent=\\d+.*\\)$", line)); - } - // ensure at least the two clients we created are accounted for - Assert.assertTrue(count >= 2); - - zk1.close(); - zk2.close(); - } - - @Test(timeout=60000) - public void testValidateSocketTimeout() throws Exception { - /** - * testing positive scenario that even with timeout parameter the - * functionality works fine - */ - String resp = sendRequest("isro", 2000); - Assert.assertTrue(resp.contains("rw")); - } - - @Test - public void testSetTraceMask() throws Exception { - String gtmkResp = sendRequest("gtmk"); - Assert.assertNotNull(gtmkResp); - gtmkResp = gtmkResp.trim(); - Assert.assertFalse(gtmkResp.isEmpty()); - long formerMask = Long.valueOf(gtmkResp); - try { - verify(buildSetTraceMaskRequest(0), "0"); - verify("gtmk", "0"); - } finally { - // Restore former value. - sendRequest(buildSetTraceMaskRequest(formerMask)); - } - } - - /** - * Builds a SetTraceMask request to be sent to the server, consisting of - * "stmk" followed by the 8-byte long representation of the trace mask. - * - * @param mask trace mask to set - * @return built request - * @throws IOException if there is an I/O error - */ - private String buildSetTraceMaskRequest(long mask) throws IOException { - ByteArrayOutputStream baos = null; - DataOutputStream dos = null; - try { - baos = new ByteArrayOutputStream(); - dos = new DataOutputStream(baos); - dos.writeBytes("stmk"); - dos.writeLong(mask); - } finally { - IOUtils.closeStream(dos); - IOUtils.closeStream(baos); - } - return new String(baos.toByteArray()); - } -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/7291e47c/zookeeper-common/src/test/java/org/apache/zookeeper/test/FourLetterWordsWhiteListTest.java ---------------------------------------------------------------------- diff --git a/zookeeper-common/src/test/java/org/apache/zookeeper/test/FourLetterWordsWhiteListTest.java b/zookeeper-common/src/test/java/org/apache/zookeeper/test/FourLetterWordsWhiteListTest.java deleted file mode 100644 index 515cbdc..0000000 --- a/zookeeper-common/src/test/java/org/apache/zookeeper/test/FourLetterWordsWhiteListTest.java +++ /dev/null @@ -1,253 +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.zookeeper.test; - -import java.io.IOException; - -import org.apache.zookeeper.TestableZooKeeper; -import org.apache.zookeeper.server.ServerCnxn; -import static org.apache.zookeeper.client.FourLetterWordMain.send4LetterWord; -import org.junit.Assert; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.Timeout; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class FourLetterWordsWhiteListTest extends ClientBase { - protected static final Logger LOG = - LoggerFactory.getLogger(FourLetterWordsTest.class); - - @Rule - public Timeout timeout = new Timeout(30000); - - /* - * ZOOKEEPER-2693: test white list of four letter words. - * For 3.5.x default white list is empty. Verify that is - * the case (except 'stat' command which is enabled in ClientBase - * which other tests depend on.). - */ - @Test(timeout=30000) - public void testFourLetterWordsAllDisabledByDefault() throws Exception { - stopServer(); - ServerCnxn.resetWhiteList(); - System.setProperty("zookeeper.4lw.commands.whitelist", "stat"); - startServer(); - - // Default white list for 3.5.x is empty, so all command should fail. - verifyAllCommandsFail(); - - TestableZooKeeper zk = createClient(); - - verifyAllCommandsFail(); - - zk.getData("/", true, null); - - verifyAllCommandsFail(); - - zk.close(); - - verifyFuzzyMatch("stat", "Outstanding"); - verifyAllCommandsFail(); - } - - @Test(timeout=30000) - public void testFourLetterWordsEnableSomeCommands() throws Exception { - stopServer(); - ServerCnxn.resetWhiteList(); - System.setProperty("zookeeper.4lw.commands.whitelist", "stat, ruok, isro"); - startServer(); - // stat, ruok and isro are white listed. - verifyFuzzyMatch("stat", "Outstanding"); - verifyExactMatch("ruok", "imok"); - verifyExactMatch("isro", "rw"); - - // Rest of commands fail. - verifyExactMatch("conf", generateExpectedMessage("conf")); - verifyExactMatch("cons", generateExpectedMessage("cons")); - verifyExactMatch("crst", generateExpectedMessage("crst")); - verifyExactMatch("dump", generateExpectedMessage("dump")); - verifyExactMatch("envi", generateExpectedMessage("envi")); - verifyExactMatch("gtmk", generateExpectedMessage("gtmk")); - verifyExactMatch("stmk", generateExpectedMessage("stmk")); - verifyExactMatch("srst", generateExpectedMessage("srst")); - verifyExactMatch("wchc", generateExpectedMessage("wchc")); - verifyExactMatch("wchp", generateExpectedMessage("wchp")); - verifyExactMatch("wchs", generateExpectedMessage("wchs")); - verifyExactMatch("mntr", generateExpectedMessage("mntr")); - } - - @Test(timeout=30000) - public void testISROEnabledWhenReadOnlyModeEnabled() throws Exception { - stopServer(); - ServerCnxn.resetWhiteList(); - System.setProperty("zookeeper.4lw.commands.whitelist", "stat"); - System.setProperty("readonlymode.enabled", "true"); - startServer(); - verifyExactMatch("isro", "rw"); - System.clearProperty("readonlymode.enabled"); - } - - @Test(timeout=30000) - public void testFourLetterWordsInvalidConfiguration() throws Exception { - stopServer(); - ServerCnxn.resetWhiteList(); - System.setProperty("zookeeper.4lw.commands.whitelist", "foo bar" + - " foo,,, " + - "bar :.,@#$%^&*() , , , , bar, bar, stat, "); - startServer(); - - // Just make sure we are good when admin made some mistakes in config file. - verifyAllCommandsFail(); - // But still, what's valid in white list will get through. - verifyFuzzyMatch("stat", "Outstanding"); - } - - @Test(timeout=30000) - public void testFourLetterWordsEnableAllCommandsThroughAsterisk() throws Exception { - stopServer(); - ServerCnxn.resetWhiteList(); - System.setProperty("zookeeper.4lw.commands.whitelist", "*"); - startServer(); - verifyAllCommandsSuccess(); - } - - @Test(timeout=30000) - public void testFourLetterWordsEnableAllCommandsThroughExplicitList() throws Exception { - stopServer(); - ServerCnxn.resetWhiteList(); - System.setProperty("zookeeper.4lw.commands.whitelist", - "ruok, envi, conf, stat, srvr, cons, dump," + - "wchs, wchp, wchc, srst, crst, " + - "mntr, gtmk, isro, stmk"); - startServer(); - verifyAllCommandsSuccess(); - } - - private void verifyAllCommandsSuccess() throws Exception { - verifyExactMatch("ruok", "imok"); - verifyFuzzyMatch("envi", "java.version"); - verifyFuzzyMatch("conf", "clientPort"); - verifyFuzzyMatch("stat", "Outstanding"); - verifyFuzzyMatch("srvr", "Outstanding"); - verifyFuzzyMatch("cons", "queued"); - verifyFuzzyMatch("dump", "Session"); - verifyFuzzyMatch("wchs", "watches"); - verifyFuzzyMatch("wchp", ""); - verifyFuzzyMatch("wchc", ""); - - verifyFuzzyMatch("srst", "reset"); - verifyFuzzyMatch("crst", "reset"); - - verifyFuzzyMatch("stat", "Outstanding"); - verifyFuzzyMatch("srvr", "Outstanding"); - verifyFuzzyMatch("cons", "queued"); - verifyFuzzyMatch("gtmk", "306"); - verifyFuzzyMatch("isro", "rw"); - - TestableZooKeeper zk = createClient(); - String sid = getHexSessionId(zk.getSessionId()); - - verifyFuzzyMatch("stat", "queued"); - verifyFuzzyMatch("srvr", "Outstanding"); - verifyFuzzyMatch("cons", sid); - verifyFuzzyMatch("dump", sid); - - zk.getData("/", true, null); - - verifyFuzzyMatch("stat", "queued"); - verifyFuzzyMatch("srvr", "Outstanding"); - verifyFuzzyMatch("cons", sid); - verifyFuzzyMatch("dump", sid); - - verifyFuzzyMatch("wchs", "watching 1"); - verifyFuzzyMatch("wchp", sid); - verifyFuzzyMatch("wchc", sid); - zk.close(); - - verifyExactMatch("ruok", "imok"); - verifyFuzzyMatch("envi", "java.version"); - verifyFuzzyMatch("conf", "clientPort"); - verifyFuzzyMatch("stat", "Outstanding"); - verifyFuzzyMatch("srvr", "Outstanding"); - verifyFuzzyMatch("cons", "queued"); - verifyFuzzyMatch("dump", "Session"); - verifyFuzzyMatch("wchs", "watch"); - verifyFuzzyMatch("wchp", ""); - verifyFuzzyMatch("wchc", ""); - - verifyFuzzyMatch("srst", "reset"); - verifyFuzzyMatch("crst", "reset"); - - verifyFuzzyMatch("stat", "Outstanding"); - verifyFuzzyMatch("srvr", "Outstanding"); - verifyFuzzyMatch("cons", "queued"); - verifyFuzzyMatch("mntr", "zk_server_state\tstandalone"); - verifyFuzzyMatch("mntr", "num_alive_connections"); - verifyFuzzyMatch("mntr", "fsync_threshold_exceed_count"); - verifyFuzzyMatch("stat", "Connections"); - verifyFuzzyMatch("srvr", "Connections"); - } - - private void verifyAllCommandsFail() throws Exception { - verifyExactMatch("ruok", generateExpectedMessage("ruok")); - verifyExactMatch("conf", generateExpectedMessage("conf")); - verifyExactMatch("cons", generateExpectedMessage("cons")); - verifyExactMatch("crst", generateExpectedMessage("crst")); - verifyExactMatch("dump", generateExpectedMessage("dump")); - verifyExactMatch("envi", generateExpectedMessage("envi")); - verifyExactMatch("gtmk", generateExpectedMessage("gtmk")); - verifyExactMatch("stmk", generateExpectedMessage("stmk")); - verifyExactMatch("srst", generateExpectedMessage("srst")); - verifyExactMatch("wchc", generateExpectedMessage("wchc")); - verifyExactMatch("wchp", generateExpectedMessage("wchp")); - verifyExactMatch("wchs", generateExpectedMessage("wchs")); - verifyExactMatch("mntr", generateExpectedMessage("mntr")); - verifyExactMatch("isro", generateExpectedMessage("isro")); - - // srvr is enabled by default due to the sad fact zkServer.sh uses it. - verifyFuzzyMatch("srvr", "Outstanding"); - } - - private void verifyFuzzyMatch(String cmd, String expected) throws IOException { - String resp = sendRequest(cmd); - LOG.info("cmd " + cmd + " expected " + expected + " got " + resp); - Assert.assertTrue(resp.contains(expected)); - } - - private String generateExpectedMessage(String command) { - return command + " is not executed because it is not in the whitelist."; - } - - private void verifyExactMatch(String cmd, String expected) throws IOException { - String resp = sendRequest(cmd); - LOG.info("cmd " + cmd + " expected an exact match of " + expected + "; got " + resp); - Assert.assertTrue(resp.trim().equals(expected)); - } - - private String sendRequest(String cmd) throws IOException { - HostPort hpobj = ClientBase.parseHostPortList(hostPort).get(0); - return send4LetterWord(hpobj.host, hpobj.port, cmd); - } - - private String sendRequest(String cmd, int timeout) throws IOException { - HostPort hpobj = ClientBase.parseHostPortList(hostPort).get(0); - return send4LetterWord(hpobj.host, hpobj.port, cmd, timeout); - } -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/7291e47c/zookeeper-common/src/test/java/org/apache/zookeeper/test/GetChildren2Test.java ---------------------------------------------------------------------- diff --git a/zookeeper-common/src/test/java/org/apache/zookeeper/test/GetChildren2Test.java b/zookeeper-common/src/test/java/org/apache/zookeeper/test/GetChildren2Test.java deleted file mode 100644 index e41fffe..0000000 --- a/zookeeper-common/src/test/java/org/apache/zookeeper/test/GetChildren2Test.java +++ /dev/null @@ -1,136 +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.zookeeper.test; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.apache.zookeeper.CreateMode; -import org.apache.zookeeper.KeeperException; -import org.apache.zookeeper.ZooKeeper; -import org.apache.zookeeper.ZooDefs.Ids; -import org.apache.zookeeper.data.Stat; -import org.junit.Assert; -import org.junit.Test; - -public class GetChildren2Test extends ClientBase { - private ZooKeeper zk; - - @Override - public void setUp() throws Exception { - super.setUp(); - - zk = createClient(); - } - - @Override - public void tearDown() throws Exception { - super.tearDown(); - - zk.close(); - } - - @Test - public void testChild() - throws IOException, KeeperException, InterruptedException - { - String name = "/foo"; - zk.create(name, name.getBytes(), Ids.OPEN_ACL_UNSAFE, - CreateMode.PERSISTENT); - - String childname = name + "/bar"; - zk.create(childname, childname.getBytes(), Ids.OPEN_ACL_UNSAFE, - CreateMode.EPHEMERAL); - - Stat stat = new Stat(); - List<String> s = zk.getChildren(name, false, stat); - - Assert.assertEquals(stat.getCzxid(), stat.getMzxid()); - Assert.assertEquals(stat.getCzxid() + 1, stat.getPzxid()); - Assert.assertEquals(stat.getCtime(), stat.getMtime()); - Assert.assertEquals(1, stat.getCversion()); - Assert.assertEquals(0, stat.getVersion()); - Assert.assertEquals(0, stat.getAversion()); - Assert.assertEquals(0, stat.getEphemeralOwner()); - Assert.assertEquals(name.length(), stat.getDataLength()); - Assert.assertEquals(1, stat.getNumChildren()); - Assert.assertEquals(s.size(), stat.getNumChildren()); - - s = zk.getChildren(childname, false, stat); - - Assert.assertEquals(stat.getCzxid(), stat.getMzxid()); - Assert.assertEquals(stat.getCzxid(), stat.getPzxid()); - Assert.assertEquals(stat.getCtime(), stat.getMtime()); - Assert.assertEquals(0, stat.getCversion()); - Assert.assertEquals(0, stat.getVersion()); - Assert.assertEquals(0, stat.getAversion()); - Assert.assertEquals(zk.getSessionId(), stat.getEphemeralOwner()); - Assert.assertEquals(childname.length(), stat.getDataLength()); - Assert.assertEquals(0, stat.getNumChildren()); - Assert.assertEquals(s.size(), stat.getNumChildren()); - } - - @Test - public void testChildren() - throws IOException, KeeperException, InterruptedException - { - String name = "/foo"; - zk.create(name, name.getBytes(), Ids.OPEN_ACL_UNSAFE, - CreateMode.PERSISTENT); - - List<String> children = new ArrayList<String>(); - List<String> children_s = new ArrayList<String>(); - - for (int i = 0; i < 10; i++) { - String childname = name + "/bar" + i; - String childname_s = "bar" + i; - children.add(childname); - children_s.add(childname_s); - } - - for(int i = 0; i < children.size(); i++) { - String childname = children.get(i); - zk.create(childname, childname.getBytes(), Ids.OPEN_ACL_UNSAFE, - CreateMode.EPHEMERAL); - - Stat stat = new Stat(); - List<String> s = zk.getChildren(name, false, stat); - - Assert.assertEquals(stat.getCzxid(), stat.getMzxid()); - Assert.assertEquals(stat.getCzxid() + i + 1, stat.getPzxid()); - Assert.assertEquals(stat.getCtime(), stat.getMtime()); - Assert.assertEquals(i + 1, stat.getCversion()); - Assert.assertEquals(0, stat.getVersion()); - Assert.assertEquals(0, stat.getAversion()); - Assert.assertEquals(0, stat.getEphemeralOwner()); - Assert.assertEquals(name.length(), stat.getDataLength()); - Assert.assertEquals(i + 1, stat.getNumChildren()); - Assert.assertEquals(s.size(), stat.getNumChildren()); - } - List<String> p = zk.getChildren(name, false, null); - List<String> c_a = children_s; - List<String> c_b = p; - Collections.sort(c_a); - Collections.sort(c_b); - Assert.assertEquals(c_a.size(), 10); - Assert.assertEquals(c_a, c_b); - } -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/7291e47c/zookeeper-common/src/test/java/org/apache/zookeeper/test/HierarchicalQuorumTest.java ---------------------------------------------------------------------- diff --git a/zookeeper-common/src/test/java/org/apache/zookeeper/test/HierarchicalQuorumTest.java b/zookeeper-common/src/test/java/org/apache/zookeeper/test/HierarchicalQuorumTest.java deleted file mode 100644 index 051da13..0000000 --- a/zookeeper-common/src/test/java/org/apache/zookeeper/test/HierarchicalQuorumTest.java +++ /dev/null @@ -1,309 +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.zookeeper.test; - -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Properties; -import java.util.Set; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.apache.zookeeper.PortAssignment; -import org.apache.zookeeper.TestableZooKeeper; -import org.apache.zookeeper.jmx.CommonNames; -import org.apache.zookeeper.server.quorum.QuorumPeer; -import org.apache.zookeeper.server.quorum.QuorumPeer.LearnerType; -import org.apache.zookeeper.server.quorum.QuorumPeer.QuorumServer; -import org.apache.zookeeper.server.quorum.QuorumPeer.ServerState; -import org.apache.zookeeper.server.quorum.flexible.QuorumHierarchical; -import org.junit.Assert; -import org.junit.Test; - -public class HierarchicalQuorumTest extends ClientBase { - private static final Logger LOG = LoggerFactory.getLogger(QuorumBase.class); - - File s1dir, s2dir, s3dir, s4dir, s5dir; - QuorumPeer s1, s2, s3, s4, s5; - protected int port1; - protected int port2; - protected int port3; - protected int port4; - protected int port5; - - protected int leport1; - protected int leport2; - protected int leport3; - protected int leport4; - protected int leport5; - - Properties qp; - protected final ClientHammerTest cht = new ClientHammerTest(); - - @Override - public void setUp() throws Exception { - setupTestEnv(); - - JMXEnv.setUp(); - - setUpAll(); - - port1 = PortAssignment.unique(); - port2 = PortAssignment.unique(); - port3 = PortAssignment.unique(); - port4 = PortAssignment.unique(); - port5 = PortAssignment.unique(); - leport1 = PortAssignment.unique(); - leport2 = PortAssignment.unique(); - leport3 = PortAssignment.unique(); - leport4 = PortAssignment.unique(); - leport5 = PortAssignment.unique(); - - hostPort = "127.0.0.1:" + port1 - + ",127.0.0.1:" + port2 - + ",127.0.0.1:" + port3 - + ",127.0.0.1:" + port4 - + ",127.0.0.1:" + port5; - LOG.info("Ports are: " + hostPort); - - s1dir = ClientBase.createTmpDir(); - s2dir = ClientBase.createTmpDir(); - s3dir = ClientBase.createTmpDir(); - s4dir = ClientBase.createTmpDir(); - s5dir = ClientBase.createTmpDir(); - - String config = "group.1=1:2:3\n" + - "group.2=4:5\n" + - "weight.1=1\n" + - "weight.2=1\n" + - "weight.3=1\n" + - "weight.4=0\n" + - "weight.5=0\n"; - - ByteArrayInputStream is = new ByteArrayInputStream(config.getBytes()); - this.qp = new Properties(); - - qp.load(is); - startServers(); - - cht.hostPort = hostPort; - cht.setUpAll(); - - LOG.info("Setup finished"); - } - - /** - * This method is here to keep backwards compatibility with the test code - * written before observers. - * @throws Exception - */ - void startServers() throws Exception { - startServers(false); - } - - /** - * Starts 5 Learners. When withObservers == false, all 5 are Followers. - * When withObservers == true, 3 are Followers and 2 Observers. - * @param withObservers - * @throws Exception - */ - void startServers(boolean withObservers) throws Exception { - int tickTime = 2000; - int initLimit = 3; - int syncLimit = 3; - HashMap<Long,QuorumServer> peers = new HashMap<Long,QuorumServer>(); - peers.put(Long.valueOf(1), new QuorumServer(1, "127.0.0.1", port1 + 1000, leport1 + 1000, null)); - peers.put(Long.valueOf(2), new QuorumServer(2, "127.0.0.1", port2 + 1000, leport2 + 1000, null)); - peers.put(Long.valueOf(3), new QuorumServer(3, "127.0.0.1", port3 + 1000, leport3 + 1000, null)); - peers.put(Long.valueOf(4), new QuorumServer(4, "127.0.0.1", port4 + 1000, leport4 + 1000, - withObservers ? QuorumPeer.LearnerType.OBSERVER - : QuorumPeer.LearnerType.PARTICIPANT)); - peers.put(Long.valueOf(5), new QuorumServer(5, "127.0.0.1", port5 + 1000, leport5 + 1000, - withObservers ? QuorumPeer.LearnerType.OBSERVER - : QuorumPeer.LearnerType.PARTICIPANT)); - - LOG.info("creating QuorumPeer 1 port " + port1); - List <QuorumPeer> qps = new ArrayList<QuorumPeer>(); - QuorumHierarchical hq1 = new QuorumHierarchical(qp); - s1 = new QuorumPeer(peers, s1dir, s1dir, port1, 3, 1, tickTime, initLimit, syncLimit, hq1); - qps.add(s1); - Assert.assertEquals(port1, s1.getClientPort()); - - LOG.info("creating QuorumPeer 2 port " + port2); - QuorumHierarchical hq2 = new QuorumHierarchical(qp); - s2 = new QuorumPeer(peers, s2dir, s2dir, port2, 3, 2, tickTime, initLimit, syncLimit, hq2); - qps.add(s2); - Assert.assertEquals(port2, s2.getClientPort()); - - LOG.info("creating QuorumPeer 3 port " + port3); - QuorumHierarchical hq3 = new QuorumHierarchical(qp); - s3 = new QuorumPeer(peers, s3dir, s3dir, port3, 3, 3, tickTime, initLimit, syncLimit, hq3); - qps.add(s3); - Assert.assertEquals(port3, s3.getClientPort()); - - LOG.info("creating QuorumPeer 4 port " + port4); - QuorumHierarchical hq4 = new QuorumHierarchical(qp); - s4 = new QuorumPeer(peers, s4dir, s4dir, port4, 3, 4, tickTime, initLimit, syncLimit, hq4); - qps.add(s4); - if (withObservers) { - s4.setLearnerType(QuorumPeer.LearnerType.OBSERVER); - } - Assert.assertEquals(port4, s4.getClientPort()); - - LOG.info("creating QuorumPeer 5 port " + port5); - QuorumHierarchical hq5 = new QuorumHierarchical(qp); - s5 = new QuorumPeer(peers, s5dir, s5dir, port5, 3, 5, tickTime, initLimit, syncLimit, hq5); - qps.add(s5); - if (withObservers) { - s5.setLearnerType(QuorumPeer.LearnerType.OBSERVER); - } - Assert.assertEquals(port5, s5.getClientPort()); - - // Observers are currently only compatible with LeaderElection - if (withObservers) { - s1.setElectionType(0); - s2.setElectionType(0); - s3.setElectionType(0); - s4.setElectionType(0); - s5.setElectionType(0); - } - - LOG.info("start QuorumPeer 1"); - s1.start(); - LOG.info("start QuorumPeer 2"); - s2.start(); - LOG.info("start QuorumPeer 3"); - s3.start(); - LOG.info("start QuorumPeer 4" + (withObservers ? "(observer)" : "")); - s4.start(); - LOG.info("start QuorumPeer 5" + (withObservers ? "(observer)" : "")); - s5.start(); - LOG.info("started QuorumPeer 5"); - - LOG.info ("Closing ports " + hostPort); - for (String hp : hostPort.split(",")) { - Assert.assertTrue("waiting for server up", - ClientBase.waitForServerUp(hp, - CONNECTION_TIMEOUT)); - LOG.info(hp + " is accepting client connections"); - } - - // interesting to see what's there... - JMXEnv.dump(); - // make sure we have these 5 servers listed - Set<String> ensureNames = new LinkedHashSet<String>(); - for (int i = 1; i <= 5; i++) { - ensureNames.add("InMemoryDataTree"); - } - for (int i = 1; i <= 5; i++) { - ensureNames.add("name0=ReplicatedServer_id" + i - + ",name1=replica." + i + ",name2="); - } - for (int i = 1; i <= 5; i++) { - for (int j = 1; j <= 5; j++) { - ensureNames.add("name0=ReplicatedServer_id" + i - + ",name1=replica." + j); - } - } - for (int i = 1; i <= 5; i++) { - ensureNames.add("name0=ReplicatedServer_id" + i); - } - JMXEnv.ensureAll(ensureNames.toArray(new String[ensureNames.size()])); - verifyElectionTimeTakenJMXAttribute(qps); - } - - @Override - public void tearDown() throws Exception { - LOG.info("TearDown started"); - cht.tearDownAll(); - - LOG.info("Shutting down server 1"); - shutdown(s1); - LOG.info("Shutting down server 2"); - shutdown(s2); - LOG.info("Shutting down server 3"); - shutdown(s3); - LOG.info("Shutting down server 4"); - shutdown(s4); - LOG.info("Shutting down server 5"); - shutdown(s5); - - for (String hp : hostPort.split(",")) { - Assert.assertTrue("waiting for server down", - ClientBase.waitForServerDown(hp, - ClientBase.CONNECTION_TIMEOUT)); - LOG.info(hp + " is no longer accepting client connections"); - } - - JMXEnv.tearDown(); - } - - protected void shutdown(QuorumPeer qp) { - QuorumBase.shutdown(qp); - } - - protected TestableZooKeeper createClient() - throws IOException, InterruptedException - { - return createClient(hostPort); - } - - protected TestableZooKeeper createClient(String hp) - throws IOException, InterruptedException - { - CountdownWatcher watcher = new CountdownWatcher(); - return createClient(watcher, hp); - } - - private void verifyElectionTimeTakenJMXAttribute(List<QuorumPeer> peers) - throws Exception { - LOG.info("Verify QuorumPeer#electionTimeTaken jmx bean attribute"); - - for (int i = 1; i <= peers.size(); i++) { - QuorumPeer qp = peers.get(i - 1); - if (qp.getLearnerType() == LearnerType.OBSERVER) { - continue; // Observer don't have electionTimeTaken attribute. - } - Long electionTimeTaken = -1L; - String bean = ""; - if (qp.getPeerState() == ServerState.FOLLOWING) { - bean = String.format( - "%s:name0=ReplicatedServer_id%d,name1=replica.%d,name2=Follower", - CommonNames.DOMAIN, i, i); - } else if (qp.getPeerState() == ServerState.LEADING) { - bean = String.format( - "%s:name0=ReplicatedServer_id%d,name1=replica.%d,name2=Leader", - CommonNames.DOMAIN, i, i); - } - electionTimeTaken = (Long) JMXEnv.ensureBeanAttribute(bean, - "ElectionTimeTaken"); - Assert.assertTrue("Wrong electionTimeTaken value!", - electionTimeTaken >= 0); - } - } - - @Test - public void testHierarchicalQuorum() throws Throwable { - cht.runHammer(5, 10); - } -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/7291e47c/zookeeper-common/src/test/java/org/apache/zookeeper/test/IntegrityCheck.java ---------------------------------------------------------------------- diff --git a/zookeeper-common/src/test/java/org/apache/zookeeper/test/IntegrityCheck.java b/zookeeper-common/src/test/java/org/apache/zookeeper/test/IntegrityCheck.java deleted file mode 100644 index 9a01a65..0000000 --- a/zookeeper-common/src/test/java/org/apache/zookeeper/test/IntegrityCheck.java +++ /dev/null @@ -1,232 +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.zookeeper.test; - -/** - * This is a simple test to check the integrity of ZooKeeper servers. The client - * simply cycles through blasting changes to ZooKeeper and the checking what it - * gets back. - * - * The check is very simple. The value of the last successful read or write is - * stored in lastValue. When we issue a request, that value becomes a possible - * value. The difficulty is that when a communication error happens, the client - * doesn't know if the set actually went through. So, our invariant that we - * check for is that we always read a value that is greater than or equal to - * a value that we have previously read or set. (Each time we set a value, the - * value will be one more than the previous set.) - */ -import java.io.IOException; -import java.util.Date; -import java.util.HashMap; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.apache.zookeeper.CreateMode; -import org.apache.zookeeper.KeeperException; -import org.apache.zookeeper.WatchedEvent; -import org.apache.zookeeper.Watcher; -import org.apache.zookeeper.ZooDefs; -import org.apache.zookeeper.ZooKeeper; -import org.apache.zookeeper.AsyncCallback.DataCallback; -import org.apache.zookeeper.AsyncCallback.StatCallback; -import org.apache.zookeeper.Watcher.Event.KeeperState; -import org.apache.zookeeper.data.Stat; - -public class IntegrityCheck implements Watcher, StatCallback, DataCallback { - private static final Logger LOG = LoggerFactory.getLogger(IntegrityCheck.class); - - ZooKeeper zk; - - HashMap<String, byte[]> lastValue = new HashMap<String, byte[]>(); - - int count; - - String path; - - int iteration; - - int outstanding; - - int errorCount; - - synchronized void incOutstanding() { - outstanding++; - } - - synchronized void decOutstanding() { - outstanding--; - notifyAll(); - } - - synchronized void waitOutstanding() throws InterruptedException { - while (outstanding > 0) { - wait(); - } - } - - IntegrityCheck(String hostPort, String path, int count) throws - IOException { - zk = new ZooKeeper(hostPort, 30000, this); - this.path = path; - this.count = count; - } - - public void run() throws InterruptedException, KeeperException { - try{ - LOG.warn("Creating znodes for "+path); - doCreate(); - LOG.warn("Staring the test loop for "+path); - while (true) { - LOG.warn("Staring write cycle for "+path); - doPopulate(); - waitOutstanding(); - LOG.warn("Staring read cycle for "+path); - readAll(); - waitOutstanding(); - } - }finally{ - LOG.warn("Test loop terminated for "+path); - } - } - - void readAll() { - for (int i = 0; i < count; i++) { - String cpath = path + "/" + i; - zk.getData(cpath, false, this, null); - incOutstanding(); - } - - } - - void doCreate() throws InterruptedException, KeeperException { - // create top level znode - try{ - zk.create(path, null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); - }catch(KeeperException.NodeExistsException e){ - // ignore duplicate create - } - iteration++; - byte v[] = ("" + iteration).getBytes(); - // create child znodes - for (int i = 0; i < count; i++) { - String cpath = path + "/" + i; - try{ - if(i%10==0) - LOG.warn("Creating znode "+cpath); - zk.create(cpath, v, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); - }catch(KeeperException.NodeExistsException e){ - // ignore duplicate create - } - lastValue.put(cpath, v); - } - } - - void doPopulate() { - iteration++; - byte v[] = ("" + iteration).getBytes(); - for (int i = 0; i < count; i++) { - String cpath = path + "/" + i; - zk.setData(cpath, v, -1, this, v); - incOutstanding(); - } - } - - // watcher callback - public void process(WatchedEvent event) { - if(event.getState()==KeeperState.SyncConnected){ - synchronized(this){ - notifyAll(); - } - } - } - - synchronized void ensureConnected(){ - while(zk.getState()!=ZooKeeper.States.CONNECTED){ - try { - wait(); - } catch (InterruptedException e) { - return; - } - } - } - - /** - * @param args - */ - public static void main(String[] args) { - if (args.length < 3) { - System.err.println("USAGE: IntegrityCheck zookeeperHostPort znode #children"); - return; - } - int childrenCount=0; - try { - childrenCount=Integer.parseInt(args[2]); - } catch (NumberFormatException e) { - e.printStackTrace(); - System.exit(1); - } - - try{ - final IntegrityCheck ctest = new IntegrityCheck(args[0], args[1],childrenCount); - Runtime.getRuntime().addShutdownHook(new Thread() { - public void run() { - System.out.println(new Date().toString()+": Error count = " + ctest.errorCount); - } - }); - while(true){ - try{ - ctest.ensureConnected(); - ctest.run(); - } catch (Exception e) { - e.printStackTrace(); - } - } - } catch (Exception e) { - e.printStackTrace(); - System.exit(2); - } - } - - public void processResult(int rc, String path, Object ctx, Stat stat) { - if (rc == 0) { - lastValue.put(path, (byte[]) ctx); - } - decOutstanding(); - } - - public void processResult(int rc, String path, Object ctx, byte[] data, - Stat stat) { - if (rc == 0) { - String string = new String(data); - String lastString = null; - byte[] v = lastValue.get(path); - if (v != null) { - lastString = new String(v); - } - if (lastString != null - && Integer.parseInt(string) < Integer.parseInt(lastString)) { - LOG.error("ERROR: Got " + string + " expected >= " - + lastString); - errorCount++; - } - lastValue.put(path, (byte[]) ctx); - } - decOutstanding(); - } -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/7291e47c/zookeeper-common/src/test/java/org/apache/zookeeper/test/InvalidSnapshotTest.java ---------------------------------------------------------------------- diff --git a/zookeeper-common/src/test/java/org/apache/zookeeper/test/InvalidSnapshotTest.java b/zookeeper-common/src/test/java/org/apache/zookeeper/test/InvalidSnapshotTest.java deleted file mode 100644 index c5a7b4f..0000000 --- a/zookeeper-common/src/test/java/org/apache/zookeeper/test/InvalidSnapshotTest.java +++ /dev/null @@ -1,125 +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.zookeeper.test; - -import static org.apache.zookeeper.test.ClientBase.CONNECTION_TIMEOUT; - -import java.io.File; -import java.util.concurrent.CountDownLatch; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.apache.zookeeper.PortAssignment; -import org.apache.zookeeper.WatchedEvent; -import org.apache.zookeeper.Watcher; -import org.apache.zookeeper.ZKTestCase; -import org.apache.zookeeper.ZooKeeper; -import org.apache.zookeeper.Watcher.Event.KeeperState; -import org.apache.zookeeper.server.LogFormatter; -import org.apache.zookeeper.server.ServerCnxnFactory; -import org.apache.zookeeper.server.SnapshotFormatter; -import org.apache.zookeeper.server.SyncRequestProcessor; -import org.apache.zookeeper.server.ZooKeeperServer; -import org.junit.Assert; -import org.junit.Test; - -public class InvalidSnapshotTest extends ZKTestCase implements Watcher { - private final static Logger LOG = LoggerFactory.getLogger(UpgradeTest.class); - private static final String HOSTPORT = - "127.0.0.1:" + PortAssignment.unique(); - - private static final File testData = new File( - System.getProperty("test.data.dir", "build/test/data")); - private CountDownLatch startSignal; - - /** - * Verify the LogFormatter by running it on a known file. - */ - @Test - public void testLogFormatter() throws Exception { - File snapDir = new File(testData, "invalidsnap"); - File logfile = new File(new File(snapDir, "version-2"), "log.274"); - String[] args = {logfile.getCanonicalFile().toString()}; - LogFormatter.main(args); - } - - - /** - * Verify the SnapshotFormatter by running it on a known file. - */ - @Test - public void testSnapshotFormatter() throws Exception { - File snapDir = new File(testData, "invalidsnap"); - File snapfile = new File(new File(snapDir, "version-2"), "snapshot.272"); - String[] args = {snapfile.getCanonicalFile().toString()}; - SnapshotFormatter.main(args); - } - - /** - * Verify the SnapshotFormatter by running it on a known file with one null data. - */ - @Test - public void testSnapshotFormatterWithNull() throws Exception { - File snapDir = new File(testData, "invalidsnap"); - File snapfile = new File(new File(snapDir, "version-2"), "snapshot.273"); - String[] args = {snapfile.getCanonicalFile().toString()}; - SnapshotFormatter.main(args); - } - - /** - * test the snapshot - * @throws Exception an exception could be expected - */ - @Test - public void testSnapshot() throws Exception { - File snapDir = new File(testData, "invalidsnap"); - ZooKeeperServer zks = new ZooKeeperServer(snapDir, snapDir, 3000); - SyncRequestProcessor.setSnapCount(1000); - final int PORT = Integer.parseInt(HOSTPORT.split(":")[1]); - ServerCnxnFactory f = ServerCnxnFactory.createFactory(PORT, -1); - f.startup(zks); - LOG.info("starting up the zookeeper server .. waiting"); - Assert.assertTrue("waiting for server being up", - ClientBase.waitForServerUp(HOSTPORT, CONNECTION_TIMEOUT)); - ZooKeeper zk = new ZooKeeper(HOSTPORT, 20000, this); - try { - // we know this from the data files - // this node is the last node in the snapshot - - Assert.assertTrue(zk.exists("/9/9/8", false) != null); - } finally { - zk.close(); - } - f.shutdown(); - zks.shutdown(); - Assert.assertTrue("waiting for server down", - ClientBase.waitForServerDown(HOSTPORT, - ClientBase.CONNECTION_TIMEOUT)); - - } - - public void process(WatchedEvent event) { - LOG.info("Event:" + event.getState() + " " + event.getType() + " " + event.getPath()); - if (event.getState() == KeeperState.SyncConnected - && startSignal != null && startSignal.getCount() > 0) - { - startSignal.countDown(); - } - } -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/7291e47c/zookeeper-common/src/test/java/org/apache/zookeeper/test/JMXEnv.java ---------------------------------------------------------------------- diff --git a/zookeeper-common/src/test/java/org/apache/zookeeper/test/JMXEnv.java b/zookeeper-common/src/test/java/org/apache/zookeeper/test/JMXEnv.java deleted file mode 100644 index f67c67c..0000000 --- a/zookeeper-common/src/test/java/org/apache/zookeeper/test/JMXEnv.java +++ /dev/null @@ -1,325 +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.zookeeper.test; - -import java.io.IOException; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; - -import javax.management.MBeanServer; -import javax.management.MBeanServerConnection; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXConnectorServer; -import javax.management.remote.JMXConnectorServerFactory; -import javax.management.remote.JMXServiceURL; - -import junit.framework.TestCase; - -import org.apache.zookeeper.jmx.CommonNames; -import org.apache.zookeeper.jmx.MBeanRegistry; -import org.junit.Assert; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class JMXEnv { - protected static final Logger LOG = LoggerFactory.getLogger(JMXEnv.class); - - private static JMXConnectorServer cs; - private static JMXConnector cc; - - public static void setUp() throws IOException { - MBeanServer mbs = MBeanRegistry.getInstance().getPlatformMBeanServer(); - - JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://"); - cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs); - cs.start(); - - JMXServiceURL addr = cs.getAddress(); - - cc = JMXConnectorFactory.connect(addr); - } - - public static void tearDown() { - try { - if (cc != null) { - cc.close(); - } - } catch (IOException e) { - LOG.warn("Unexpected, ignoring", e); - - } - cc = null; - try { - if (cs != null) { - cs.stop(); - } - } catch (IOException e) { - LOG.warn("Unexpected, ignoring", e); - - } - cs = null; - } - - public static MBeanServerConnection conn() throws IOException { - return cc.getMBeanServerConnection(); - } - - /** - * Ensure that all of the specified names are registered. - * Note that these are components of the name, and in particular - * order matters - you want the more specific name (leafs) specified - * before their parent(s) (since names are hierarchical) - * It waits in a loop up to 60 seconds before failing if there is a - * mismatch. - * @param expectedNames - * @return - * @throws IOException - * @throws MalformedObjectNameException - */ - public static Set<ObjectName> ensureAll(String... expectedNames) - throws IOException, InterruptedException - { - Set<ObjectName> beans; - Set<ObjectName> found; - int nTry = 0; - do { - if (nTry++ > 0) { - Thread.sleep(100); - } - try { - beans = conn().queryNames( - new ObjectName(CommonNames.DOMAIN + ":*"), null); - } catch (MalformedObjectNameException e) { - throw new RuntimeException(e); - } - - found = new HashSet<ObjectName>(); - for (String name : expectedNames) { - LOG.info("expect:" + name); - for (ObjectName bean : beans) { - if (bean.toString().contains(name)) { - LOG.info("found:" + name + " " + bean); - found.add(bean); - break; - } - } - beans.removeAll(found); - } - } while ((expectedNames.length != found.size()) && (nTry < 600)); - TestCase.assertEquals("expected " + Arrays.toString(expectedNames), - expectedNames.length, found.size()); - return beans; - } - - /** - * Ensure that only the specified names are registered. - * Note that these are components of the name, and in particular - * order matters - you want the more specific name (leafs) specified - * before their parent(s) (since names are hierarchical) - * @param expectedNames - * @return - * @throws IOException - * @throws MalformedObjectNameException - */ - public static Set<ObjectName> ensureOnly(String... expectedNames) - throws IOException, InterruptedException - { - LOG.info("ensureOnly:" + Arrays.toString(expectedNames)); - Set<ObjectName> beans = ensureAll(expectedNames); - for (ObjectName bean : beans) { - LOG.info("unexpected:" + bean.toString()); - } - TestCase.assertEquals(0, beans.size()); - return beans; - } - - public static void ensureNone(String... expectedNames) - throws IOException, InterruptedException - { - Set<ObjectName> beans; - int nTry = 0; - boolean foundUnexpected = false; - String unexpectedName = ""; - do { - if (nTry++ > 0) { - Thread.sleep(100); - } - try { - beans = conn().queryNames( - new ObjectName(CommonNames.DOMAIN + ":*"), null); - } catch (MalformedObjectNameException e) { - throw new RuntimeException(e); - } - - foundUnexpected = false; - for (String name : expectedNames) { - for (ObjectName bean : beans) { - if (bean.toString().contains(name)) { - LOG.info("didntexpect:" + name); - foundUnexpected = true; - unexpectedName = name + " " + bean.toString(); - break; - } - } - if (foundUnexpected) { - break; - } - } - } while ((foundUnexpected) && (nTry < 600)); - if (foundUnexpected) { - LOG.info("List of all beans follows:"); - for (ObjectName bean : beans) { - LOG.info("bean:" + bean.toString()); - } - TestCase.fail(unexpectedName); - } - } - - public static void dump() throws IOException { - LOG.info("JMXEnv.dump() follows"); - Set<ObjectName> beans; - try { - beans = conn().queryNames( - new ObjectName(CommonNames.DOMAIN + ":*"), null); - } catch (MalformedObjectNameException e) { - throw new RuntimeException(e); - } - for (ObjectName bean : beans) { - LOG.info("bean:" + bean.toString()); - } - } - - /** - * Ensure that the specified parent names are registered. Note that these - * are components of the name. It waits in a loop up to 60 seconds before - * failing if there is a mismatch. This will return the beans which are not - * matched. - * - * {@link https://issues.apache.org/jira/browse/ZOOKEEPER-1858} - * - * @param expectedNames - * - expected beans - * @return the beans which are not matched with the given expected names - * - * @throws IOException - * @throws InterruptedException - * - */ - public static Set<ObjectName> ensureParent(String... expectedNames) - throws IOException, InterruptedException { - LOG.info("ensureParent:" + Arrays.toString(expectedNames)); - - Set<ObjectName> beans; - int nTry = 0; - Set<ObjectName> found = new HashSet<ObjectName>(); - do { - if (nTry++ > 0) { - Thread.sleep(500); - } - try { - beans = conn().queryNames( - new ObjectName(CommonNames.DOMAIN + ":*"), null); - } catch (MalformedObjectNameException e) { - throw new RuntimeException(e); - } - found.clear(); - for (String name : expectedNames) { - LOG.info("expect:" + name); - for (ObjectName bean : beans) { - // check the existence of name in bean - if (compare(bean.toString(), name)) { - LOG.info("found:" + name + " " + bean); - found.add(bean); - break; - } - } - beans.removeAll(found); - } - } while (expectedNames.length != found.size() && nTry < 120); - TestCase.assertEquals("expected " + Arrays.toString(expectedNames), - expectedNames.length, found.size()); - return beans; - } - - /** - * Comparing that the given name exists in the bean. For component beans, - * the component name will be present at the end of the bean name - * - * For example 'StandaloneServer' will present in the bean name like - * 'org.apache.ZooKeeperService:name0=StandaloneServer_port-1' - */ - private static boolean compare(String bean, String name) { - String[] names = bean.split("="); - if (names.length > 0 && names[names.length - 1].contains(name)) { - return true; - } - return false; - } - - /** - * Ensure that the specified bean name and its attribute is registered. Note - * that these are components of the name. It waits in a loop up to 60 - * seconds before failing if there is a mismatch. This will return the beans - * which are not matched. - * - * @param expectedName - * - expected bean - * @param expectedAttribute - * - expected attribute - * @return the value of the attribute - * - * @throws Exception - */ - public static Object ensureBeanAttribute(String expectedName, - String expectedAttribute) throws Exception { - String value = ""; - LOG.info("ensure bean:{}, attribute:{}", new Object[] { expectedName, - expectedAttribute }); - - Set<ObjectName> beans; - int nTry = 0; - do { - if (nTry++ > 0) { - Thread.sleep(500); - } - try { - beans = conn().queryNames( - new ObjectName(CommonNames.DOMAIN + ":*"), null); - } catch (MalformedObjectNameException e) { - throw new RuntimeException(e); - } - LOG.info("expect:" + expectedName); - for (ObjectName bean : beans) { - // check the existence of name in bean - if (bean.toString().equals(expectedName)) { - LOG.info("found:{} {}", new Object[] { expectedName, bean }); - return conn().getAttribute(bean, expectedAttribute); - } - } - } while (nTry < 120); - Assert.fail("Failed to find bean:" + expectedName + ", attribute:" - + expectedAttribute); - return value; - } - -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/7291e47c/zookeeper-common/src/test/java/org/apache/zookeeper/test/KeeperStateTest.java ---------------------------------------------------------------------- diff --git a/zookeeper-common/src/test/java/org/apache/zookeeper/test/KeeperStateTest.java b/zookeeper-common/src/test/java/org/apache/zookeeper/test/KeeperStateTest.java deleted file mode 100644 index 55dc852..0000000 --- a/zookeeper-common/src/test/java/org/apache/zookeeper/test/KeeperStateTest.java +++ /dev/null @@ -1,76 +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.zookeeper.test; - -import java.util.EnumSet; - -import org.apache.zookeeper.ZKTestCase; -import org.apache.zookeeper.KeeperException.Code; -import org.apache.zookeeper.Watcher.Event.KeeperState; -import org.junit.Assert; -import org.junit.Test; - -public class KeeperStateTest extends ZKTestCase { - - @Test - public void testIntConversion() { - // Ensure that we can convert all valid integers to KeeperStates - EnumSet<KeeperState> allStates = EnumSet.allOf(KeeperState.class); - - for(KeeperState as : allStates) { - Assert.assertEquals(as, KeeperState.fromInt( as.getIntValue() ) ); - } - } - - @Test - public void testInvalidIntConversion() { - try { - KeeperState ks = KeeperState.fromInt(324142); - Assert.fail("Was able to create an invalid KeeperState via an integer"); - } catch(RuntimeException re) { - // we're good. - } - - } - - /** Validate that the deprecated constant still works. There were issues - * found with switch statements - which need compile time constants. - */ - @Test - @SuppressWarnings("deprecation") - public void testDeprecatedCodeOkInSwitch() { - int test = 1; - switch (test) { - case Code.Ok: - Assert.assertTrue(true); - break; - } - } - - /** Verify the enum works (paranoid) */ - @Test - public void testCodeOKInSwitch() { - Code test = Code.OK; - switch (test) { - case OK: - Assert.assertTrue(true); - break; - } - } -}