changeset 3844:339342f311cc

7025105: TEST_BUG test/com/sun/jndi/ldap/NoWaitForReplyTest.java should be cleaned up Reviewed-by: alanb
author coffeys
date Mon, 07 Mar 2011 14:43:11 +0000
parents 28bedf6eba87
children 62b0337d1369
files test/com/sun/jndi/ldap/NoWaitForReplyTest.java
diffstat 1 files changed, 70 insertions(+), 57 deletions(-) [+]
line wrap: on
line diff
--- a/test/com/sun/jndi/ldap/NoWaitForReplyTest.java	Fri Mar 04 21:28:35 2011 +0000
+++ b/test/com/sun/jndi/ldap/NoWaitForReplyTest.java	Mon Mar 07 14:43:11 2011 +0000
@@ -38,81 +38,94 @@
 
     public static void main(String[] args) throws Exception {
 
-    boolean passed = false;
-
-    // Set up the environment for creating the initial context
-    Hashtable env = new Hashtable(11);
-        env.put(Context.PROVIDER_URL, "ldap://localhost:22001");
-    env.put(Context.INITIAL_CONTEXT_FACTORY,
-        "com.sun.jndi.ldap.LdapCtxFactory");
-
-    // Wait up to 10 seconds for a response from the LDAP server
-    env.put("com.sun.jndi.ldap.read.timeout", "10000");
-
-    // Don't wait until the first search reply is received
-    env.put("com.sun.jndi.ldap.search.waitForReply", "false");
-
-    // Send the LDAP search request without first authenticating (no bind)
-    env.put("java.naming.ldap.version", "3");
-
-    DummyServer ldapServer = new DummyServer();
-
-    try {
+        boolean passed = false;
 
         // start the LDAP server
+        DummyServer ldapServer = new DummyServer();
         ldapServer.start();
 
-        // Create initial context
-        System.out.println("Client: connecting to the server");
-        DirContext ctx = new InitialDirContext(env);
+        // Set up the environment for creating the initial context
+        Hashtable env = new Hashtable(11);
+        env.put(Context.PROVIDER_URL, "ldap://localhost:" +
+            ldapServer.getPortNumber());
+        env.put(Context.INITIAL_CONTEXT_FACTORY,
+            "com.sun.jndi.ldap.LdapCtxFactory");
 
-        SearchControls scl = new SearchControls();
-        scl.setSearchScope(SearchControls.SUBTREE_SCOPE);
-        System.out.println("Client: performing search");
-        NamingEnumeration answer =
-        ctx.search("ou=People,o=JNDITutorial", "(objectClass=*)", scl);
+        // Wait up to 10 seconds for a response from the LDAP server
+        env.put("com.sun.jndi.ldap.read.timeout", "10000");
 
-        // Server will never reply: either we waited in the call above until
-        // the timeout (fail) or we did not wait and reached here (pass).
-        passed = true;
-        System.out.println("Client: did not wait until first reply");
+        // Don't wait until the first search reply is received
+        env.put("com.sun.jndi.ldap.search.waitForReply", "false");
 
-        // Close the context when we're done
-        ctx.close();
+        // Send the LDAP search request without first authenticating (no bind)
+        env.put("java.naming.ldap.version", "3");
 
-    } catch (NamingException e) {
-        // timeout (ignore)
-    }
-    ldapServer.interrupt();
 
-    if (!passed) {
-        throw new Exception(
-        "Test FAILED: should not have waited until first search reply");
-    }
-    System.out.println("Test PASSED");
+        try {
+
+            // Create initial context
+            System.out.println("Client: connecting to the server");
+            DirContext ctx = new InitialDirContext(env);
+
+            SearchControls scl = new SearchControls();
+            scl.setSearchScope(SearchControls.SUBTREE_SCOPE);
+            System.out.println("Client: performing search");
+            NamingEnumeration answer =
+            ctx.search("ou=People,o=JNDITutorial", "(objectClass=*)", scl);
+
+            // Server will never reply: either we waited in the call above until
+            // the timeout (fail) or we did not wait and reached here (pass).
+            passed = true;
+            System.out.println("Client: did not wait until first reply");
+
+            // Close the context when we're done
+            ctx.close();
+
+        } catch (NamingException e) {
+            // timeout (ignore)
+        }
+        ldapServer.interrupt();
+
+        if (!passed) {
+            throw new Exception(
+                "Test FAILED: should not have waited until first search reply");
+        }
+        System.out.println("Test PASSED");
     }
 
     static class DummyServer extends Thread {
 
-        static int serverPort = 22001;
+        private final ServerSocket serverSocket;
 
-    DummyServer() {
-    }
+        DummyServer() throws IOException {
+            this.serverSocket = new ServerSocket(0);
+            System.out.println("Server: listening on port " + serverSocket.getLocalPort());
+        }
 
-    public void run() {
-        try {
-        ServerSocket serverSock = new ServerSocket(serverPort);
-                Socket socket = serverSock.accept();
+        public int getPortNumber() {
+            return serverSocket.getLocalPort();
+        }
+
+        public void run() {
+            try (Socket socket = serverSocket.accept()) {
                 System.out.println("Server: accepted a connection");
-                BufferedInputStream bin =
-            new BufferedInputStream(socket.getInputStream());
+                InputStream in = socket.getInputStream();
 
-                while (true) {
-                    bin.read();
+                while (!isInterrupted()) {
+                   in.skip(in.available());
                 }
-        } catch (IOException e) {
-        // ignore
+
+            } catch (Exception e) {
+                // ignore
+
+            } finally {
+                System.out.println("Server: shutting down");
+                try {
+                    serverSocket.close();
+                } catch (IOException e) {
+                    // ignore
+                }
+            }
         }
     }
 }
-}