< prev index next >
test/jdk/com/sun/jndi/ldap/RemoveNamingListenerTest.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 18,34 ****
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
! import java.io.BufferedInputStream;
import java.io.IOException;
! import java.io.OutputStreamWriter;
! import java.io.PrintWriter;
! import java.net.ServerSocket;
import java.net.Socket;
- import java.nio.charset.StandardCharsets;
import java.util.ConcurrentModificationException;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
--- 18,31 ----
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
!
import java.io.IOException;
! import java.io.OutputStream;
import java.net.Socket;
import java.util.ConcurrentModificationException;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
*** 42,51 ****
--- 39,49 ----
* @test
* @bug 8176192
* @summary Incorrect usage of Iterator in Java 8 In com.sun.jndi.ldap.
* EventSupport.removeNamingListener
* @modules java.naming
+ * @library lib/
* @run main RemoveNamingListenerTest
*/
public class RemoveNamingListenerTest {
private static volatile Exception exception;
*** 87,97 ****
System.out.println("Test run OK!!!");
} finally {
if (ctx != null) {
ctx.close();
}
! server.stopServer();
}
}
/**
* Helper thread that removes the naming listener.
--- 85,95 ----
System.out.println("Test run OK!!!");
} finally {
if (ctx != null) {
ctx.close();
}
! server.close();
}
}
/**
* Helper thread that removes the naming listener.
*** 128,241 ****
//do nothing
}
}
}
! class TestLDAPServer extends Thread {
!
! private final int LDAP_PORT;
! private final ServerSocket serverSocket;
! private volatile boolean isRunning;
!
! TestLDAPServer() throws IOException {
! serverSocket = new ServerSocket(0);
! isRunning = true;
! LDAP_PORT = serverSocket.getLocalPort();
! setDaemon(true);
! }
!
! public int getPort() {
! return LDAP_PORT;
! }
!
! public void stopServer() {
! isRunning = false;
! if (serverSocket != null && !serverSocket.isClosed()) {
! try {
! // this will cause ServerSocket.accept() to throw SocketException.
! serverSocket.close();
! } catch (IOException ignored) {
! }
! }
! }
!
! @Override
! public void run() {
! try {
! while (isRunning) {
! Socket clientSocket = serverSocket.accept();
! Thread handler = new Thread(new LDAPServerHandler(clientSocket));
! handler.setDaemon(true);
! handler.start();
! }
! } catch (IOException iOException) {
! //do not throw exception if server is not running.
! if (isRunning) {
! throw new RuntimeException(iOException);
! }
! } finally {
! stopServer();
! }
! }
! }
!
! class LDAPServerHandler implements Runnable {
! private final Socket clientSocket;
! public LDAPServerHandler(final Socket clientSocket) {
! this.clientSocket = clientSocket;
}
@Override
! public void run() {
! BufferedInputStream in = null;
! PrintWriter out = null;
! byte[] bindResponse = {0x30, 0x0C, 0x02, 0x01, 0x01, 0x61, 0x07, 0x0A, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00};
! byte[] searchResponse = {0x30, 0x0C, 0x02, 0x01, 0x02, 0x65, 0x07, 0x0A, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00};
! try {
! in = new BufferedInputStream(clientSocket.getInputStream());
! out = new PrintWriter(new OutputStreamWriter(
! clientSocket.getOutputStream(), StandardCharsets.UTF_8), true);
! while (true) {
!
! // Read the LDAP BindRequest
! while (in.read() != -1) {
! in.skip(in.available());
! break;
! }
!
// Write an LDAP BindResponse
! out.write(new String(bindResponse));
! out.flush();
!
! // Read the LDAP SearchRequest
! while (in.read() != -1) {
! in.skip(in.available());
break;
! }
!
// Write an LDAP SearchResponse
! out.write(new String(searchResponse));
! out.flush();
! }
! } catch (IOException iOException) {
! throw new RuntimeException(iOException);
! } finally {
! if (in != null) {
! try {
! in.close();
! } catch (IOException ignored) {
! }
! }
! if (out != null) {
! out.close();
! }
! if (clientSocket != null) {
! try {
! clientSocket.close();
! } catch (IOException ignored) {
! }
! }
}
}
}
--- 126,155 ----
//do nothing
}
}
}
! class TestLDAPServer extends BaseLdapServer {
! private byte[] bindResponse = {0x30, 0x0C, 0x02, 0x01, 0x01, 0x61, 0x07, 0x0A, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00};
! private byte[] searchResponse = {0x30, 0x0C, 0x02, 0x01, 0x02, 0x65, 0x07, 0x0A, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00};
! public TestLDAPServer() throws IOException {
}
@Override
! protected void handleRequest(Socket socket, LdapMessage request,
! OutputStream out) throws IOException {
! switch (request.getOperation()) {
! case BIND_REQUEST:
// Write an LDAP BindResponse
! out.write(bindResponse);
break;
! case SEARCH_REQUEST:
// Write an LDAP SearchResponse
! out.write(searchResponse);
! break;
! default:
! break;
}
}
}
< prev index next >