From 015d7657e74af5573dd2cb07b2c11b0ecd662c9a Mon Sep 17 00:00:00 2001 From: Chris Hegarty Date: Tue, 13 Mar 2012 09:33:50 +0000 Subject: [PATCH] 7152796: TEST_BUG: java/net/Socks/SocksV4Test.java does not terminate Reviewed-by: alanb --- jdk/test/java/net/Socks/SocksServer.java | 39 +++++++++++++++--------- jdk/test/java/net/Socks/SocksV4Test.java | 18 +++++------ 2 files changed, 33 insertions(+), 24 deletions(-) diff --git a/jdk/test/java/net/Socks/SocksServer.java b/jdk/test/java/net/Socks/SocksServer.java index de2822ab9a9..f6720afd56d 100644 --- a/jdk/test/java/net/Socks/SocksServer.java +++ b/jdk/test/java/net/Socks/SocksServer.java @@ -22,13 +22,14 @@ */ import java.net.*; import java.io.*; +import java.util.HashMap; public class SocksServer extends Thread { // Some useful SOCKS constant - static final int PROTO_VERS4 = 4; + static final int PROTO_VERS4 = 4; static final int PROTO_VERS = 5; - static final int DEFAULT_PORT = 1080; + static final int DEFAULT_PORT = 1080; static final int NO_AUTH = 0; static final int GSSAPI = 1; @@ -36,28 +37,28 @@ public class SocksServer extends Thread { static final int NO_METHODS = -1; static final int CONNECT = 1; - static final int BIND = 2; + static final int BIND = 2; static final int UDP_ASSOC = 3; - static final int IPV4 = 1; - static final int DOMAIN_NAME = 3; - static final int IPV6 = 4; + static final int IPV4 = 1; + static final int DOMAIN_NAME = 3; + static final int IPV6 = 4; static final int REQUEST_OK = 0; static final int GENERAL_FAILURE = 1; - static final int NOT_ALLOWED = 2; + static final int NOT_ALLOWED = 2; static final int NET_UNREACHABLE = 3; static final int HOST_UNREACHABLE = 4; - static final int CONN_REFUSED = 5; - static final int TTL_EXPIRED = 6; + static final int CONN_REFUSED = 5; + static final int TTL_EXPIRED = 6; static final int CMD_NOT_SUPPORTED = 7; static final int ADDR_TYPE_NOT_SUP = 8; private int port; private ServerSocket server; private boolean useV4 = false; - private java.util.Hashtable users = new java.util.Hashtable(); - private boolean done = false; + private HashMap users = new HashMap<>(); + private volatile boolean done = false; // Inner class to handle protocol with client // This is the bulk of the work (protocol handler) class ClientHandler extends Thread { @@ -136,7 +137,7 @@ public class SocksServer extends Thread { System.err.println("User: '" + uname); System.err.println("PSWD: '" + password); if (users.containsKey(uname)) { - String p1 = (String) users.get(uname); + String p1 = users.get(uname); System.err.println("p1 = " + p1); if (p1.equals(password)) { out.write(PROTO_VERS); @@ -492,7 +493,12 @@ public class SocksServer extends Thread { public SocksServer(int port) throws IOException { this.port = port; server = new ServerSocket(); - server.bind(new InetSocketAddress(port)); + if (port == 0) { + server.bind(null); + this.port = server.getLocalPort(); + } else { + server.bind(new InetSocketAddress(port)); + } } public SocksServer() throws IOException { @@ -503,8 +509,13 @@ public class SocksServer extends Thread { users.put(user, passwd); } - public synchronized void terminate() { + public int getPort() { + return port; + } + + public void terminate() { done = true; + try { server.close(); } catch (IOException unused) {} } public void run() { diff --git a/jdk/test/java/net/Socks/SocksV4Test.java b/jdk/test/java/net/Socks/SocksV4Test.java index 0b7cd9ebcdb..d9786a21789 100644 --- a/jdk/test/java/net/Socks/SocksV4Test.java +++ b/jdk/test/java/net/Socks/SocksV4Test.java @@ -26,23 +26,22 @@ * @bug 4727547 * @summary SocksSocketImpl throws NullPointerException * @build SocksServer + * @run main SocksV4Test */ import java.net.*; -import java.io.*; public class SocksV4Test { - public static void main(String[] args) throws IOException { - // Create a SOCKS V4 proxy on port 8888 - SocksServer srvr = new SocksServer(8888, true); + public static void main(String[] args) throws Exception { + // Create a SOCKS V4 proxy + SocksServer srvr = new SocksServer(0, true); srvr.start(); - System.setProperty("socksProxyHost", "localhost"); - System.setProperty("socksProxyPort", "8888"); + Proxy sp = new Proxy(Proxy.Type.SOCKS, + new InetSocketAddress("localhost", srvr.getPort())); // Let's create an unresolved address InetSocketAddress ad = new InetSocketAddress("doesnt.exist.name", 1234); - Socket s = new Socket(); - try { - s.connect(ad,10000); + try (Socket s = new Socket(sp)) { + s.connect(ad, 10000); } catch (UnknownHostException ex) { // OK, that's what we expected } catch (NullPointerException npe) { @@ -50,7 +49,6 @@ public class SocksV4Test { throw new RuntimeException("Got a NUllPointerException"); } finally { srvr.terminate(); - srvr.interrupt(); } } }