8226514: Replace wildcard address with loopback or local host in tests - part 14
Summary: Improve test stabilty by getting rid of the wildcard address whenever possible.
Reviewed-by: chegar, vtewari
--- a/test/jdk/java/net/HttpCookie/IllegalCookieNameTest.java Fri Jun 28 17:10:22 2019 +0300
+++ b/test/jdk/java/net/HttpCookie/IllegalCookieNameTest.java Fri Jun 28 15:58:10 2019 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019, 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
@@ -23,25 +23,35 @@
/* @test
* @bug 7183292
+ * @library /test/lib
* @modules jdk.httpserver
+ * @run main IllegalCookieNameTest
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true IllegalCookieNameTest
*/
import java.net.*;
import java.util.*;
import java.io.*;
import com.sun.net.httpserver.*;
+import jdk.test.lib.net.URIBuilder;
public class IllegalCookieNameTest {
- public static void main(String[] args) throws IOException {
+ public static void main(String[] args) throws Exception {
HttpServer s = null;
try {
- InetSocketAddress addr = new InetSocketAddress(0);
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ InetSocketAddress addr = new InetSocketAddress(loopback, 0);
s = HttpServer.create(addr, 10);
s.createContext("/", new HHandler());
s.start();
- String u = "http://127.0.0.1:" + s.getAddress().getPort() + "/";
+ String u = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(s.getAddress().getPort())
+ .path("/")
+ .build().toString();
CookieHandler.setDefault(new TestCookieHandler());
URL url = new URL(u);
- HttpURLConnection c = (HttpURLConnection) url.openConnection();
+ HttpURLConnection c = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
c.getHeaderFields();
System.out.println ("OK");
} finally {
--- a/test/jdk/java/net/HttpURLConnection/SetAuthenticator/HTTPTest.java Fri Jun 28 17:10:22 2019 +0300
+++ b/test/jdk/java/net/HttpURLConnection/SetAuthenticator/HTTPTest.java Fri Jun 28 15:58:10 2019 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2019, 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
@@ -258,14 +258,27 @@
public static URL url(HttpProtocolType protocol, InetSocketAddress address,
String path) throws MalformedURLException {
return new URL(protocol(protocol),
- address.getHostString(),
+ address.getAddress().getHostAddress(),
address.getPort(), path);
}
public static Proxy proxy(HTTPTestServer server, HttpAuthType authType) {
- return (authType == HttpAuthType.PROXY)
- ? new Proxy(Proxy.Type.HTTP, server.getAddress())
- : null;
+ if (authType != HttpAuthType.PROXY) return null;
+
+ InetSocketAddress proxyAddress = server.getProxyAddress();
+ if (!proxyAddress.isUnresolved()) {
+ // Forces the proxy to use an unresolved address created
+ // from the actual IP address to avoid using the proxy
+ // address hostname which would result in resolving to
+ // a posibly different address. For instance we want to
+ // avoid cases such as:
+ // ::1 => "localhost" => 127.0.0.1
+ proxyAddress = InetSocketAddress.
+ createUnresolved(proxyAddress.getAddress().getHostAddress(),
+ proxyAddress.getPort());
+ }
+
+ return new Proxy(Proxy.Type.HTTP, proxyAddress);
}
public static HttpURLConnection openConnection(URL url,
--- a/test/jdk/java/net/HttpURLConnection/SetAuthenticator/HTTPTestServer.java Fri Jun 28 17:10:22 2019 +0300
+++ b/test/jdk/java/net/HttpURLConnection/SetAuthenticator/HTTPTestServer.java Fri Jun 28 15:58:10 2019 +0100
@@ -391,6 +391,10 @@
return serverImpl.getAddress();
}
+ public InetSocketAddress getProxyAddress() {
+ return serverImpl.getAddress();
+ }
+
public void stop() {
serverImpl.stop(0);
if (redirect != null) {
@@ -1019,7 +1023,7 @@
}
@Override
- public InetSocketAddress getAddress() {
+ public InetSocketAddress getProxyAddress() {
return new InetSocketAddress(ss.getInetAddress(), ss.getLocalPort());
}
@@ -1047,7 +1051,7 @@
Socket clientConnection = null;
try {
while (true) {
- System.out.println("Tunnel: Waiting for client");
+ System.out.println("Tunnel: Waiting for client at: " + ss);
Socket previous = clientConnection;
try {
clientConnection = ss.accept();
--- a/test/jdk/sun/net/ftp/FtpURLConnectionLeak.java Fri Jun 28 17:10:22 2019 +0300
+++ b/test/jdk/sun/net/ftp/FtpURLConnectionLeak.java Fri Jun 28 15:58:10 2019 +0100
@@ -27,7 +27,7 @@
* @summary FtpURLConnection doesn't close FTP connection when FileNotFoundException is thrown
* @library ../www/ftptest/
* @build FtpServer FtpCommandHandler FtpAuthHandler FtpFileSystemHandler
- * @run main FtpURLConnectionLeak
+ * @run main/othervm FtpURLConnectionLeak
*/
import java.io.FileNotFoundException;
import java.io.InputStream;
--- a/test/jdk/sun/net/www/http/HttpClient/RetryPost.java Fri Jun 28 17:10:22 2019 +0300
+++ b/test/jdk/sun/net/www/http/HttpClient/RetryPost.java Fri Jun 28 15:58:10 2019 +0100
@@ -54,23 +54,19 @@
MyHandler httpHandler;
ExecutorService executorService;
- public static void main(String[] args) {
+ public static void main(String[] args) throws Exception {
if (args.length == 1 && args[0].equals("noRetry"))
shouldRetry = false;
new RetryPost();
}
- public RetryPost() {
- try {
- startHttpServer(shouldRetry);
- doClient();
- } catch (IOException ioe) {
- System.err.println(ioe);
- }
+ public RetryPost() throws Exception {
+ startHttpServer(shouldRetry);
+ doClient();
}
- void doClient() {
+ void doClient() throws Exception {
try {
InetSocketAddress address = httpServer.getAddress();
URL url = URIBuilder.newBuilder()
@@ -95,8 +91,6 @@
else if (!shouldRetry && httpHandler.getCallCount() != 1)
throw new RuntimeException("Failed: Handler should have only been called once" +
"It was called "+ httpHandler.getCallCount() + " times");
- } catch (IOException e) {
- e.printStackTrace();
} finally {
httpServer.stop(1);
executorService.shutdown();
@@ -119,8 +113,8 @@
}
class MyHandler implements HttpHandler {
- int callCount = 0;
- boolean shouldRetry;
+ volatile int callCount = 0;
+ final boolean shouldRetry;
public MyHandler(boolean shouldRetry) {
this.shouldRetry = shouldRetry;
--- a/test/jdk/sun/net/www/protocol/http/B5017051.java Fri Jun 28 17:10:22 2019 +0300
+++ b/test/jdk/sun/net/www/protocol/http/B5017051.java Fri Jun 28 15:58:10 2019 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2019, 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
@@ -25,7 +25,9 @@
* @test
* @bug 5017051 6360774
* @modules jdk.httpserver
+ * @library /test/lib
* @run main/othervm B5017051
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true B5017051
* @summary Tests CR 5017051 & 6360774
*/
@@ -35,6 +37,7 @@
import com.sun.net.httpserver.*;
import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;
+import jdk.test.lib.net.URIBuilder;
/*
* Part 1:
@@ -55,42 +58,47 @@
public class B5017051
{
- com.sun.net.httpserver.HttpServer httpServer;
+ HttpServer httpServer;
ExecutorService executorService;
- public static void main(String[] args)
- {
+ public static void main(String[] args) throws Exception {
new B5017051();
}
- public B5017051()
- {
- try {
- startHttpServer();
- doClient();
- } catch (IOException ioe) {
- System.err.println(ioe);
- }
+ public B5017051() throws Exception {
+ startHttpServer();
+ doClient();
}
- void doClient() {
+ void doClient() throws Exception {
java.net.Authenticator.setDefault(new MyAuthenticator());
CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));
+ ProxySelector.setDefault(ProxySelector.of(null));
try {
InetSocketAddress address = httpServer.getAddress();
// Part 1
- URL url = new URL("http://" + address.getHostName() + ":" + address.getPort() + "/test/");
+ URL url = URIBuilder.newBuilder()
+ .scheme("http")
+ .host(address.getAddress())
+ .port(address.getPort())
+ .path("/test/")
+ .toURL();
HttpURLConnection uc = (HttpURLConnection)url.openConnection();
int resp = uc.getResponseCode();
if (resp != 200)
- throw new RuntimeException("Failed: Part 1, Response code is not 200");
+ throw new RuntimeException("Failed: Part 1, Response code is not 200: " + resp);
System.out.println("Response code from Part 1 = 200 OK");
// Part 2
- URL url2 = new URL("http://" + address.getHostName() + ":" + address.getPort() + "/test2/");
+ URL url2 = URIBuilder.newBuilder()
+ .scheme("http")
+ .host(address.getAddress())
+ .port(address.getPort())
+ .path("/test2/")
+ .toURL();
// can use the global CookieHandler used for the first test as the URL's are different
CookieHandler ch = CookieHandler.getDefault();
@@ -106,15 +114,10 @@
uc = (HttpURLConnection)url2.openConnection();
resp = uc.getResponseCode();
if (resp != 200)
- throw new RuntimeException("Failed: Part 2, Response code is not 200");
+ throw new RuntimeException("Failed: Part 2, Response code is not 200: " + resp);
System.out.println("Response code from Part 2 = 200 OK");
-
- } catch (IOException e) {
- e.printStackTrace();
- } catch (URISyntaxException ue) {
- ue.printStackTrace();
} finally {
httpServer.stop(1);
executorService.shutdown();
@@ -125,7 +128,8 @@
* Http Server
*/
public void startHttpServer() throws IOException {
- httpServer = com.sun.net.httpserver.HttpServer.create(new InetSocketAddress(0), 0);
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ httpServer = HttpServer.create(new InetSocketAddress(loopback, 0), 0);
// create HttpServer context for Part 1.
HttpContext ctx = httpServer.createContext("/test/", new MyHandler());
--- a/test/jdk/sun/net/www/protocol/http/B6296310.java Fri Jun 28 17:10:22 2019 +0300
+++ b/test/jdk/sun/net/www/protocol/http/B6296310.java Fri Jun 28 15:58:10 2019 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2019, 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
@@ -28,6 +28,7 @@
* @library ../../httptest/
* @build HttpCallback TestHttpServer HttpTransaction
* @run main/othervm B6296310
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true B6296310
* @summary REGRESSION: AppletClassLoader.getResourceAsStream() behaviour is wrong in some cases
*/
@@ -45,32 +46,26 @@
static SimpleHttpTransaction httpTrans;
static TestHttpServer server;
- public static void main(String[] args)
+ public static void main(String[] args) throws Exception
{
ResponseCache.setDefault(new MyCacheHandler());
startHttpServer();
-
makeHttpCall();
}
- public static void startHttpServer() {
- try {
- httpTrans = new SimpleHttpTransaction();
- server = new TestHttpServer(httpTrans, 1, 10, 0);
- } catch (IOException e) {
- e.printStackTrace();
- }
+ public static void startHttpServer() throws IOException {
+ httpTrans = new SimpleHttpTransaction();
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ server = new TestHttpServer(httpTrans, 1, 10, loopback, 0);
}
- public static void makeHttpCall() {
+ public static void makeHttpCall() throws IOException {
try {
System.out.println("http server listen on: " + server.getLocalPort());
- URL url = new URL("http" , InetAddress.getLocalHost().getHostAddress(),
+ URL url = new URL("http" , InetAddress.getLoopbackAddress().getHostAddress(),
server.getLocalPort(), "/");
- HttpURLConnection uc = (HttpURLConnection)url.openConnection();
+ HttpURLConnection uc = (HttpURLConnection)url.openConnection(Proxy.NO_PROXY);
System.out.println(uc.getResponseCode());
- } catch (IOException e) {
- e.printStackTrace();
} finally {
server.terminate();
}
--- a/test/jdk/sun/net/www/protocol/http/B6299712.java Fri Jun 28 17:10:22 2019 +0300
+++ b/test/jdk/sun/net/www/protocol/http/B6299712.java Fri Jun 28 15:58:10 2019 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2019, 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
@@ -26,6 +26,7 @@
* @bug 6299712 7150552
* @modules jdk.httpserver
* @run main/othervm B6299712
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true B6299712
* @summary NullPointerException in sun.net.www.protocol.http.HttpURLConnection.followRedirect
*/
@@ -54,13 +55,15 @@
public static void main(String[] args) throws Exception {
ResponseCache.setDefault(new DeployCacheHandler());
+ ProxySelector.setDefault(ProxySelector.of(null)); // no proxy
startHttpServer();
makeHttpCall();
}
public static void startHttpServer() throws IOException {
- server = HttpServer.create(new InetSocketAddress(0), 0);
+ InetAddress address = InetAddress.getLocalHost();
+ server = HttpServer.create(new InetSocketAddress(address, 0), 0);
server.createContext("/", new DefaultHandler());
server.createContext("/redirect", new RedirectHandler());
server.start();
--- a/test/jdk/sun/net/www/protocol/http/NoNTLM.java Fri Jun 28 17:10:22 2019 +0300
+++ b/test/jdk/sun/net/www/protocol/http/NoNTLM.java Fri Jun 28 15:58:10 2019 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, 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
@@ -29,6 +29,7 @@
* @modules java.base/sun.net.www
* java.base/sun.net.www.protocol.http:open
* @run main/othervm NoNTLM
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true NoNTLM
*/
import java.io.IOException;
@@ -155,8 +156,8 @@
System.out.println("====================================");
System.out.println("Expect client to choose: " + expected);
System.out.println(reply);
-
- try (ServerSocket ss = new ServerSocket(0)) {
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ try (ServerSocket ss = new ServerSocket(0, 0, loopback)) {
Client.start(ss.getLocalPort());
// client ---- GET ---> server
@@ -198,7 +199,8 @@
System.out.println("Expect client to fail with 401 Unauthorized");
System.out.println(reply);
- try (ServerSocket ss = new ServerSocket(0)) {
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ try (ServerSocket ss = new ServerSocket(0, 0, loopback)) {
Client client = new Client(ss.getLocalPort());
Thread thr = new Thread(client);
thr.start();
@@ -225,13 +227,14 @@
}
public static void main(String[] args) throws Exception {
+ boolean ntlmSupported = false;
try {
Class<?> ntlmProxyClass = Class.forName("sun.net.www.protocol.http.NTLMAuthenticationProxy", true, NoNTLM.class.getClassLoader());
Field ntlmSupportedField = ntlmProxyClass.getDeclaredField("supported");
ntlmSupportedField.setAccessible(true);
if (ntlmSupportedField.getBoolean(null)) {
- System.out.println("NTLM is supported. Nothing to do. Exiting.");
- return;
+ System.out.println("NTLM is supported.");
+ ntlmSupported = true;
}
} catch (ClassNotFoundException okay) { }
@@ -247,15 +250,26 @@
test("Basic");
test("Digest");
test("Basic", "Digest");
- test("Basic", "NTLM");
+
+ if (ntlmSupported) {
+ System.out.println("====================================");
+ System.out.println("NTLM is supported: client would select NTLM: skipping `test(\"Basic\", \"NTLM\")`..");
+ } else {
+ test("Basic", "NTLM");
+ }
+
test("Digest", "NTLM");
test("Basic", "Digest", "NTLM");
- // test NTLM only, this should fail with "401 Unauthorized"
- testNTLM();
+ if (ntlmSupported) {
+ System.out.println("====================================");
+ System.out.println("NTLM is supported: client would select NTLM: skipping `testNTLM()`..");
+ } else {
+ // test NTLM only, this should fail with "401 Unauthorized"
+ testNTLM();
+ }
System.out.println();
System.out.println("TEST PASSED");
}
}
-
--- a/test/jdk/sun/net/www/protocol/http/UserAgent.java Fri Jun 28 17:10:22 2019 +0300
+++ b/test/jdk/sun/net/www/protocol/http/UserAgent.java Fri Jun 28 15:58:10 2019 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2002, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -27,6 +27,7 @@
* @library /test/lib
* @modules java.base/sun.net.www
* @run main/othervm -Dhttp.agent=foo UserAgent
+ * @run main/othervm -Dhttp.agent=foo -Djava.net.preferIPv6Addresses=true UserAgent
* @summary HTTP header "User-Agent" format incorrect
*/
@@ -87,7 +88,9 @@
public class UserAgent {
public static void main(String[] args) throws Exception {
- ServerSocket server = new ServerSocket (0);
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ ServerSocket server = new ServerSocket ();
+ server.bind(new InetSocketAddress(loopback, 0));
Server s = new Server (server);
s.start ();
int port = server.getLocalPort ();
@@ -97,7 +100,7 @@
.port(port)
.toURL();
System.out.println("URL: " + url);
- URLConnection urlc = url.openConnection ();
+ URLConnection urlc = url.openConnection (Proxy.NO_PROXY);
urlc.getInputStream ();
s.join ();
if (!s.succeeded()) {
--- a/test/jdk/sun/net/www/protocol/http/ZoneId.java Fri Jun 28 17:10:22 2019 +0300
+++ b/test/jdk/sun/net/www/protocol/http/ZoneId.java Fri Jun 28 15:58:10 2019 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2019, 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
@@ -60,7 +60,7 @@
out.println("Found an appropriate IPv6 address: " + address);
out.println("Starting http server...");
- HttpServer server = HttpServer.create(new InetSocketAddress(0), 0);
+ HttpServer server = HttpServer.create(new InetSocketAddress(address, 0), 0);
CompletableFuture<Headers> headers = new CompletableFuture<>();
server.createContext("/", createCapturingHandler(headers));
server.start();
--- a/test/jdk/sun/net/www/protocol/https/NewImpl/JavaxHTTPSConnection.java Fri Jun 28 17:10:22 2019 +0300
+++ b/test/jdk/sun/net/www/protocol/https/NewImpl/JavaxHTTPSConnection.java Fri Jun 28 15:58:10 2019 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, 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
@@ -25,7 +25,9 @@
* @test
* @bug 4474255
* @summary Can no longer obtain a com.sun.net.ssl.HttpsURLConnection
+ * @library /test/lib
* @run main/othervm JavaxHTTPSConnection
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true JavaxHTTPSConnection
*
* SunJSSE does not support dynamic system properties, no way to re-use
* system properties in samevm/agentvm mode.
@@ -36,6 +38,7 @@
import java.net.*;
import java.security.cert.*;
import javax.net.ssl.*;
+import jdk.test.lib.net.URIBuilder;
/**
* See if we can obtain a javax.net.ssl.HttpsURLConnection,
@@ -138,10 +141,13 @@
*/
void doServerSide() throws Exception {
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ InetSocketAddress serverAddress = new InetSocketAddress(loopback, serverPort);
SSLServerSocketFactory sslssf =
(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket sslServerSocket =
- (SSLServerSocket) sslssf.createServerSocket(serverPort);
+ (SSLServerSocket) sslssf.createServerSocket();
+ sslServerSocket.bind(serverAddress);
serverPort = sslServerSocket.getLocalPort();
/*
@@ -204,9 +210,14 @@
}
HttpsURLConnection.setDefaultHostnameVerifier(new NameVerifier());
- URL url = new URL("https://" + "localhost:" + serverPort +
- "/etc/hosts");
- URLConnection urlc = url.openConnection();
+ URL url = URIBuilder.newBuilder()
+ .scheme("https")
+ .loopback()
+ .port(serverPort)
+ .path("/etc/hosts")
+ .toURL();
+ System.out.println("Client opening: " + url);
+ URLConnection urlc = url.openConnection(Proxy.NO_PROXY);
if (!(urlc instanceof javax.net.ssl.HttpsURLConnection)) {
throw new Exception("URLConnection ! instanceof " +