Repository: zookeeper Updated Branches: refs/heads/master c3babb942 -> 1c488cec0
ZOOKEEPER-3193: Flaky: org.apache.zookeeper.test.SaslAuthFailNotifyTest 1. Refactor SASL auth tests to use single file, 2. Use CountDownLatch to sync with watcher More context: https://issues.apache.org/jira/browse/ZOOKEEPER-3193 Author: Andor Molnar <[email protected]> Reviewers: [email protected] Closes #706 from anmolnar/ZOOKEEPER-3193 Project: http://git-wip-us.apache.org/repos/asf/zookeeper/repo Commit: http://git-wip-us.apache.org/repos/asf/zookeeper/commit/1c488cec Tree: http://git-wip-us.apache.org/repos/asf/zookeeper/tree/1c488cec Diff: http://git-wip-us.apache.org/repos/asf/zookeeper/diff/1c488cec Branch: refs/heads/master Commit: 1c488cec08809a76202f6c66be9e46533e7c409c Parents: c3babb9 Author: Andor Molnar <[email protected]> Authored: Tue Nov 27 09:55:53 2018 +0100 Committer: Andor Molnar <[email protected]> Committed: Tue Nov 27 09:55:53 2018 +0100 ---------------------------------------------------------------------- .../zookeeper/test/SaslAuthFailNotifyTest.java | 98 -------------------- .../apache/zookeeper/test/SaslAuthFailTest.java | 46 ++++++--- 2 files changed, 32 insertions(+), 112 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/zookeeper/blob/1c488cec/zookeeper-server/src/test/java/org/apache/zookeeper/test/SaslAuthFailNotifyTest.java ---------------------------------------------------------------------- diff --git a/zookeeper-server/src/test/java/org/apache/zookeeper/test/SaslAuthFailNotifyTest.java b/zookeeper-server/src/test/java/org/apache/zookeeper/test/SaslAuthFailNotifyTest.java deleted file mode 100644 index 2b00d86..0000000 --- a/zookeeper-server/src/test/java/org/apache/zookeeper/test/SaslAuthFailNotifyTest.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.zookeeper.test; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.util.concurrent.atomic.AtomicInteger; - -import org.apache.zookeeper.CreateMode; -import org.apache.zookeeper.TestableZooKeeper; -import org.apache.zookeeper.WatchedEvent; -import org.apache.zookeeper.ZooKeeper; -import org.apache.zookeeper.Watcher.Event.KeeperState; -import org.apache.zookeeper.ZooDefs.Ids; -import org.junit.Test; -import org.junit.Assert; - -public class SaslAuthFailNotifyTest extends ClientBase { - static { - System.setProperty("zookeeper.authProvider.1","org.apache.zookeeper.server.auth.SASLAuthenticationProvider"); - System.setProperty("zookeeper.allowSaslFailedClients","true"); - - try { - File tmpDir = createTmpDir(); - File saslConfFile = new File(tmpDir, "jaas.conf"); - FileWriter fwriter = new FileWriter(saslConfFile); - - fwriter.write("" + - "Server {\n" + - " org.apache.zookeeper.server.auth.DigestLoginModule required\n" + - " user_super=\"test\";\n" + - "};\n" + - "Client {\n" + - " org.apache.zookeeper.server.auth.DigestLoginModule required\n" + - " username=\"super\"\n" + - " password=\"test1\";\n" + // NOTE: wrong password ('test' != 'test1') : this is to test SASL authentication failure. - "};" + "\n"); - fwriter.close(); - System.setProperty("java.security.auth.login.config",saslConfFile.getAbsolutePath()); - } - catch (IOException e) { - // could not create tmp directory to hold JAAS conf file. - } - } - - private AtomicInteger authFailed = new AtomicInteger(0); - - @Override - protected TestableZooKeeper createClient(String hp) - throws IOException, InterruptedException - { - MyWatcher watcher = new MyWatcher(); - return createClient(watcher, hp); - } - - private class MyWatcher extends CountdownWatcher { - @Override - public synchronized void process(WatchedEvent event) { - if (event.getState() == KeeperState.AuthFailed) { - synchronized(authFailed) { - authFailed.incrementAndGet(); - authFailed.notify(); - } - } - else { - super.process(event); - } - } - } - - @Test - public void testBadSaslAuthNotifiesWatch() throws Exception { - ZooKeeper zk = createClient(); - // wait for authFailed event from client's EventThread. - synchronized(authFailed) { - authFailed.wait(); - } - Assert.assertEquals(authFailed.get(),1); - zk.close(); - } -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/1c488cec/zookeeper-server/src/test/java/org/apache/zookeeper/test/SaslAuthFailTest.java ---------------------------------------------------------------------- diff --git a/zookeeper-server/src/test/java/org/apache/zookeeper/test/SaslAuthFailTest.java b/zookeeper-server/src/test/java/org/apache/zookeeper/test/SaslAuthFailTest.java index 33a505e..d0847fb 100644 --- a/zookeeper-server/src/test/java/org/apache/zookeeper/test/SaslAuthFailTest.java +++ b/zookeeper-server/src/test/java/org/apache/zookeeper/test/SaslAuthFailTest.java @@ -18,19 +18,18 @@ package org.apache.zookeeper.test; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.util.concurrent.atomic.AtomicInteger; - import org.apache.zookeeper.CreateMode; -import org.apache.zookeeper.TestableZooKeeper; import org.apache.zookeeper.WatchedEvent; -import org.apache.zookeeper.ZooKeeper; import org.apache.zookeeper.Watcher.Event.KeeperState; import org.apache.zookeeper.ZooDefs.Ids; -import org.junit.Test; +import org.apache.zookeeper.ZooKeeper; import org.junit.Assert; +import org.junit.Test; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.concurrent.CountDownLatch; public class SaslAuthFailTest extends ClientBase { static { @@ -59,18 +58,37 @@ public class SaslAuthFailTest extends ClientBase { // could not create tmp directory to hold JAAS conf file. } } + + private CountDownLatch authFailed = new CountDownLatch(1); + + private class MyWatcher extends CountdownWatcher { + @Override + public synchronized void process(WatchedEvent event) { + if (event.getState() == KeeperState.AuthFailed) { + authFailed.countDown(); + } + else { + super.process(event); + } + } + } @Test - public void testAuthFail() throws Exception { - ZooKeeper zk = createClient(); - try { + public void testAuthFail() { + try (ZooKeeper zk = createClient()) { zk.create("/path1", null, Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT); Assert.fail("Should have gotten exception."); - } catch(Exception e ) { + } catch (Exception e) { // ok, exception as expected. LOG.info("Got exception as expected: " + e); - } finally { - zk.close(); + } + } + + @Test + public void testBadSaslAuthNotifiesWatch() throws Exception { + try (ZooKeeper ignored = createClient(new MyWatcher(), hostPort)) { + // wait for authFailed event from client's EventThread. + authFailed.await(); } } }
