jdk/test/com/sun/jndi/ldap/ReadTimeoutTest.java
author duke
Sat, 01 Dec 2007 00:00:00 +0000
changeset 2 90ce3da70b43
child 8177 7f5ce6c05820
permissions -rw-r--r--
Initial load

/**
 * @test
 * @bug 6176036
 * @summary Read-timeout specification for LDAP operations
 */

import java.net.Socket;
import java.net.ServerSocket;
import java.io.*;
import javax.naming.*;
import javax.naming.directory.*;
import java.util.Hashtable;

public class ReadTimeoutTest {

    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.INITIAL_CONTEXT_FACTORY,
            "com.sun.jndi.ldap.LdapCtxFactory");
        env.put("com.sun.jndi.ldap.read.timeout", "1000");
        env.put(Context.PROVIDER_URL, "ldap://localhost:2001");

        Server s = new Server();

        try {

            // start the server
            s.start();

            // Create initial context
            DirContext ctx = new InitialDirContext(env);
            System.out.println("LDAP Client: Connected to the Server");

            SearchControls scl = new SearchControls();
            scl.setSearchScope(SearchControls.SUBTREE_SCOPE);
            System.out.println("Performing Search");
            NamingEnumeration answer =
                ctx.search("ou=People,o=JNDITutorial", "(objectClass=*)", scl);

            // Close the context when we're done
            ctx.close();
        } catch (NamingException e) {
            passed = true;
            e.printStackTrace();
        }
        s.interrupt();
        if (!passed) {
            throw new Exception("Read timeout test failed," +
                         " read timeout exception not thrown");
        }
        System.out.println("The test PASSED");
    }

    static class Server extends Thread {

        static int serverPort = 2001;

        Server() {
        }

        public void run() {
            try {
                ServerSocket serverSock = new ServerSocket(serverPort);
                Socket socket = serverSock.accept();
                System.out.println("Server: Connection accepted");

                BufferedInputStream bin = new BufferedInputStream(socket.
                                getInputStream());
                while (true) {
                    bin.read();
                }
            } catch (IOException e) {
                // ignore
            }
    }
}
}