Github user eolivelli commented on a diff in the pull request:

    https://github.com/apache/zookeeper/pull/457#discussion_r168303288
  
    --- Diff: src/java/test/org/apache/zookeeper/test/WatcherAuthTest.java ---
    @@ -0,0 +1,84 @@
    +package org.apache.zookeeper.test;
    +
    +import org.apache.zookeeper.WatchedEvent;
    +import org.apache.zookeeper.ZooKeeper;
    +import org.apache.zookeeper.client.ZKClientConfig;
    +import org.junit.Assert;
    +import org.junit.Before;
    +import org.junit.Ignore;
    +import org.junit.Test;
    +import org.slf4j.Logger;
    +import org.slf4j.LoggerFactory;
    +
    +import java.io.File;
    +import java.io.FileWriter;
    +import java.io.IOException;
    +import java.util.concurrent.LinkedBlockingQueue;
    +
    +import static org.apache.zookeeper.test.ClientBase.createTmpDir;
    +
    +public class WatcherAuthTest {
    +
    +    protected static final Logger LOG = 
LoggerFactory.getLogger(WatcherTest.class);
    +
    +    private class MyWatcher extends ClientBase.CountdownWatcher {
    +        LinkedBlockingQueue<WatchedEvent> events =
    +                new LinkedBlockingQueue<WatchedEvent>();
    +
    +        @Override
    +        public void process(WatchedEvent event) {
    +            super.process(event);
    +            if (event.getState() == Event.KeeperState.AuthFailed) {
    +                try {
    +                    events.put(event);
    +                } catch (InterruptedException e) {
    +                    LOG.warn("ignoring interrupt during event.put");
    +                }
    +            }
    +        }
    +    }
    +
    +    @Before
    +    public void setUp() throws Exception {
    +        // Reset to default value since some test cases set this to true.
    +        // Needed for JDK7 since unit test can run is random order
    +        System.setProperty(ZKClientConfig.DISABLE_AUTO_WATCH_RESET, 
"false");
    +    }
    +
    +    // Note: This test only works with a real ZKServer, running with 
TestServer masks the bug
    +    @Ignore
    +    @Test
    +    public void testWatcherCanGetAuthFailedEvents() throws Exception {
    +        MyWatcher myWatcher = new MyWatcher();
    +        
System.setProperty("zookeeper.authProvider.1","org.apache.zookeeper.server.auth.SASLAuthenticationProvider");
    +        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.
    +        }
    +
    +        // Specify your ZK Server endpoints here
    +        ZooKeeper zk = new ZooKeeper("127.0.0.1:2281", 20000, myWatcher);
    --- End diff --
    
    We should close this handle


---

Reply via email to