# HG changeset patch # User dfuchs # Date 1562790803 -7200 # Node ID ad8e3b2956153e8f4aede83820341aca496e5e1a # Parent ba72dac556c31c4d2c7fbf1e4c6a0cdc147b1cbe 8227539: Replace wildcard address with loopback or local host in tests - part 20 Summary: Update some tests to stop using the wildcard address. Reviewed-by: michaelm diff -r ba72dac556c3 -r ad8e3b295615 test/jdk/java/net/HttpURLConnection/HttpResponseCode.java --- a/test/jdk/java/net/HttpURLConnection/HttpResponseCode.java Wed Jul 10 16:45:28 2019 +0000 +++ b/test/jdk/java/net/HttpURLConnection/HttpResponseCode.java Wed Jul 10 22:33:23 2019 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 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 @@ -24,10 +24,14 @@ /** * @test * @bug 4473092 + * @library /test/lib * @summary Method throws IOException when object should be returned + * @run main HttpResponseCode + * @run main/othervm -Djava.net.preferIPv6Addresses=true HttpResponseCode */ import java.net.*; import java.io.*; +import jdk.test.lib.net.URIBuilder; public class HttpResponseCode implements Runnable { ServerSocket ss; @@ -61,14 +65,19 @@ HttpResponseCode() throws Exception { /* start the server */ - ss = new ServerSocket(0); + InetAddress loopback = InetAddress.getLoopbackAddress(); + ss = new ServerSocket(); + ss.bind(new InetSocketAddress(loopback, 0)); (new Thread(this)).start(); /* establish http connection to server */ - String url = "http://localhost:" + - Integer.toString(ss.getLocalPort()) + - "/missing.nothtml"; - URLConnection uc = new URL(url).openConnection(); + URL url = URIBuilder.newBuilder() + .scheme("http") + .loopback() + .port(ss.getLocalPort()) + .path("/missing.nothtml") + .toURL(); + URLConnection uc = url.openConnection(Proxy.NO_PROXY); int respCode1 = ((HttpURLConnection)uc).getResponseCode(); ((HttpURLConnection)uc).disconnect(); int respCode2 = ((HttpURLConnection)uc).getResponseCode(); diff -r ba72dac556c3 -r ad8e3b295615 test/jdk/java/net/HttpURLConnection/HttpURLConWithProxy.java --- a/test/jdk/java/net/HttpURLConnection/HttpURLConWithProxy.java Wed Jul 10 16:45:28 2019 +0000 +++ b/test/jdk/java/net/HttpURLConnection/HttpURLConWithProxy.java Wed Jul 10 22:33:23 2019 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 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 @@ -24,10 +24,12 @@ /* * @test * @bug 8161016 + * @library /test/lib * @summary When proxy is set HttpURLConnection should not use DIRECT connection. * @run main/othervm HttpURLConWithProxy */ import java.io.IOException; +import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.ProxySelector; @@ -38,10 +40,11 @@ import java.net.URLConnection; import java.util.ArrayList; import java.util.List; +import jdk.test.lib.net.URIBuilder; public class HttpURLConWithProxy { - public static void main(String... arg) { + public static void main(String... arg) throws Exception { // Remove the default nonProxyHosts to use localhost for testing System.setProperty("http.nonProxyHosts", ""); @@ -51,11 +54,18 @@ ServerSocket ss; URL url; URLConnection con; + InetAddress loopback = InetAddress.getLoopbackAddress(); + InetSocketAddress address = new InetSocketAddress(loopback, 0); // Test1: using Proxy set by System Property: try { - ss = new ServerSocket(0); - url = new URL("http://localhost:" + ss.getLocalPort()); + ss = new ServerSocket(); + ss.bind(address); + url = URIBuilder.newBuilder() + .scheme("http") + .loopback() + .port(ss.getLocalPort()) + .toURL(); con = url.openConnection(); con.setConnectTimeout(10 * 1000); con.connect(); @@ -69,8 +79,13 @@ MyProxySelector myProxySel = new MyProxySelector(); ProxySelector.setDefault(myProxySel); try { - ss = new ServerSocket(0); - url = new URL("http://localhost:" + ss.getLocalPort()); + ss = new ServerSocket(); + ss.bind(address); + url = URIBuilder.newBuilder() + .scheme("http") + .loopback() + .port(ss.getLocalPort()) + .toURL(); con = url.openConnection(); con.setConnectTimeout(10 * 1000); con.connect(); diff -r ba72dac556c3 -r ad8e3b295615 test/jdk/java/net/Inet6Address/B6558853.java --- a/test/jdk/java/net/Inet6Address/B6558853.java Wed Jul 10 16:45:28 2019 +0000 +++ b/test/jdk/java/net/Inet6Address/B6558853.java Wed Jul 10 22:33:23 2019 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 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,8 +23,11 @@ /* * @test + * @key intermittent * @bug 6558853 * @summary getHostAddress() on connections using IPv6 link-local addrs should have zone id + * This test needs to bind to the wildcard address and as such is succeptible to + * fail intermittently because of port reuse issues. * @library /test/lib * @build jdk.test.lib.NetworkConfiguration * jdk.test.lib.Platform diff -r ba72dac556c3 -r ad8e3b295615 test/jdk/java/net/InetAddress/CheckJNI.java --- a/test/jdk/java/net/InetAddress/CheckJNI.java Wed Jul 10 16:45:28 2019 +0000 +++ b/test/jdk/java/net/InetAddress/CheckJNI.java Wed Jul 10 22:33:23 2019 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 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 @@ -74,7 +74,7 @@ } static void testSocket(InetAddress ia) throws Exception { - ServerSocket server = new ServerSocket(0); + ServerSocket server = new ServerSocket(0, 0, ia); Socket s = new Socket(ia, server.getLocalPort()); s.close(); server.close(); diff -r ba72dac556c3 -r ad8e3b295615 test/jdk/java/net/MulticastSocket/NoLoopbackPackets.java --- a/test/jdk/java/net/MulticastSocket/NoLoopbackPackets.java Wed Jul 10 16:45:28 2019 +0000 +++ b/test/jdk/java/net/MulticastSocket/NoLoopbackPackets.java Wed Jul 10 22:33:23 2019 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 @@ -40,6 +40,7 @@ return osname.contains("Windows"); } + private static final String MESSAGE = "hello world (" + System.nanoTime() + ")"; public static void main(String[] args) throws Exception { if (isWindows()) { System.out.println("The test only run on non-Windows OS. Bye."); @@ -49,6 +50,7 @@ MulticastSocket msock = null; List failedGroups = new ArrayList(); Sender sender = null; + Thread senderThread = null; try { msock = new MulticastSocket(); int port = msock.getLocalPort(); @@ -69,7 +71,8 @@ } sender = new Sender(groups); - new Thread(sender).start(); + senderThread = new Thread(sender); + senderThread.start(); // Now try to receive multicast packets. we should not see any of them // since we disable loopback mode. @@ -77,20 +80,41 @@ msock.setSoTimeout(5000); // 5 seconds byte[] buf = new byte[1024]; + for (int i = 0; i < buf.length; i++) { + buf[i] = (byte) 'z'; + } DatagramPacket packet = new DatagramPacket(buf, 0, buf.length); + byte[] expected = MESSAGE.getBytes(); + assert expected.length <= buf.length; for (SocketAddress group : groups) { + System.out.println("joining group: " + group); msock.joinGroup(group, null); try { - msock.receive(packet); + do { + for (int i = 0; i < buf.length; i++) { + buf[i] = (byte) 'a'; + } + msock.receive(packet); + byte[] data = packet.getData(); + int len = packet.getLength(); - // it is an error if we receive something - failedGroups.add(group); + if (expected(data, len, expected)) { + failedGroups.add(group); + break; + } else { + System.err.println("WARNING: Unexpected packet received from " + + group + ": " + + len + " bytes"); + System.err.println("\t as text: " + new String(data, 0, len)); + } + } while (true); } catch (SocketTimeoutException e) { // we expect this + System.out.println("Received expected exception from " + group + ": " + e); + } finally { + msock.leaveGroup(group, null); } - - msock.leaveGroup(group, null); } } finally { if (msock != null) try { msock.close(); } catch (Exception e) {} @@ -98,13 +122,26 @@ sender.stop(); } } + try { + if (failedGroups.size() > 0) { + System.out.println("We should not receive anything from following groups, but we did:"); + for (SocketAddress group : failedGroups) + System.out.println(group); + throw new RuntimeException("test failed."); + } + } finally { + if (senderThread != null) { + senderThread.join(); + } + } + } - if (failedGroups.size() > 0) { - System.out.println("We should not receive anything from following groups, but we did:"); - for (SocketAddress group : failedGroups) - System.out.println(group); - throw new RuntimeException("test failed."); + static boolean expected(byte[] data, int len, byte[] expected) { + if (len != expected.length) return false; + for (int i = 0; i < len; i++) { + if (data[i] != expected[i]) return false; } + return true; } static class Sender implements Runnable { @@ -116,16 +153,15 @@ } public void run() { - byte[] buf = "hello world".getBytes(); + byte[] buf = MESSAGE.getBytes(); List packets = new ArrayList(); - try { + try (MulticastSocket msock = new MulticastSocket()) { for (SocketAddress group : sendToGroups) { DatagramPacket packet = new DatagramPacket(buf, buf.length, group); packets.add(packet); } - MulticastSocket msock = new MulticastSocket(); msock.setLoopbackMode(true); // disable loopback mode while (!stop) { for (DatagramPacket packet : packets) { diff -r ba72dac556c3 -r ad8e3b295615 test/jdk/java/net/Socket/AsyncShutdown.java --- a/test/jdk/java/net/Socket/AsyncShutdown.java Wed Jul 10 16:45:28 2019 +0000 +++ b/test/jdk/java/net/Socket/AsyncShutdown.java Wed Jul 10 22:33:23 2019 +0200 @@ -29,6 +29,8 @@ */ import java.io.IOException; +import java.net.InetAddress; +import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketTimeoutException; @@ -123,7 +125,7 @@ { Socket s1 = null; Socket s2 = null; - try (ServerSocket ss = new ServerSocket(0)) { + try (ServerSocket ss = createBoundServer()) { s1 = new Socket(); s1.connect(ss.getLocalSocketAddress()); s2 = ss.accept(); @@ -134,4 +136,12 @@ } } + static ServerSocket createBoundServer() throws IOException { + ServerSocket ss = new ServerSocket(); + InetAddress loopback = InetAddress.getLoopbackAddress(); + InetSocketAddress address = new InetSocketAddress(loopback, 0); + ss.bind(address); + return ss; + } + } diff -r ba72dac556c3 -r ad8e3b295615 test/jdk/java/net/Socket/B6210227.java --- a/test/jdk/java/net/Socket/B6210227.java Wed Jul 10 16:45:28 2019 +0000 +++ b/test/jdk/java/net/Socket/B6210227.java Wed Jul 10 22:33:23 2019 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2018, 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 @@ -25,13 +25,17 @@ * @test * @bug 6210227 * @library /test/lib - * @summary REGRESSION: Socket.getLocalAddress() returns address of 0.0.0.0 on outbound TCP + * @summary REGRESSION: Socket.getLocalAddress() returns address of 0.0.0.0 on outbound TCP. + * This test requires binding to the wildcard address. * @run main B6210227 * @run main/othervm -Djava.net.preferIPv4Stack=true B6210227 + * @run main/othervm -Djava.net.preferIPv6Addresses=true B6210227 */ import java.util.*; import java.net.*; +import java.util.stream.IntStream; +import java.util.stream.Collectors; import jdk.test.lib.net.IPSupport; public class B6210227 { @@ -42,15 +46,21 @@ ServerSocket ss = new ServerSocket(0); int port = ss.getLocalPort(); - byte[] bad = {0,0,0,0}; try { InetSocketAddress isa = new InetSocketAddress(InetAddress.getLocalHost(), port); Socket s = new Socket(); s.connect( isa, 1000 ); - InetAddress iaLocal = s.getLocalAddress(); // if this comes back as 0.0. 0.0 this would demonstrate issue + InetAddress iaLocal = s.getLocalAddress(); // if this comes back as 0.0.0.0 this would demonstrate issue String sLocalHostname = iaLocal.getHostName(); - if (Arrays.equals (iaLocal.getAddress(), bad)) { - throw new RuntimeException ("0.0.0.0 returned"); + byte[] address = iaLocal.getAddress(); + if (isWildcard(address)) { + if (iaLocal instanceof Inet6Address) { + String msg = IntStream.range(0, address.length) + .mapToObj(i -> "0").collect(Collectors.joining(":")); + throw new RuntimeException(msg + " returned"); + } else { + throw new RuntimeException ("0.0.0.0 returned"); + } } System.out.println("local hostname is "+sLocalHostname ); } catch(Exception e) { @@ -60,5 +70,11 @@ ss.close(); } } + + private static boolean isWildcard(byte[] bytes) { + for (int i = 0; i < bytes.length ; i++) { + if (bytes[i] != 0) return false; + } + return true; + } } - diff -r ba72dac556c3 -r ad8e3b295615 test/jdk/java/net/Socket/LinkLocal.java --- a/test/jdk/java/net/Socket/LinkLocal.java Wed Jul 10 16:45:28 2019 +0000 +++ b/test/jdk/java/net/Socket/LinkLocal.java Wed Jul 10 22:33:23 2019 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2018, 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 @@ -55,7 +55,8 @@ * Create ServerSocket on wildcard address and then * try to connect Socket to link-local address. */ - ServerSocket ss = new ServerSocket(0); + ServerSocket ss = new ServerSocket(); + ss.bind(new InetSocketAddress(ia, 0)); Socket s = new Socket(); try { @@ -87,7 +88,7 @@ } DatagramSocket ds1 = new DatagramSocket(); - DatagramSocket ds2 = new DatagramSocket(); + DatagramSocket ds2 = new DatagramSocket(0, ia); try { byte b[] = "Hello".getBytes(); diff -r ba72dac556c3 -r ad8e3b295615 test/jdk/java/net/Socket/asyncClose/BrokenPipe.java --- a/test/jdk/java/net/Socket/asyncClose/BrokenPipe.java Wed Jul 10 16:45:28 2019 +0000 +++ b/test/jdk/java/net/Socket/asyncClose/BrokenPipe.java Wed Jul 10 22:33:23 2019 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2018, 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 @@ -57,7 +57,7 @@ public static void main(String[] args) throws Exception { IPSupport.throwSkippedExceptionIfNonOperational(); - ServerSocket ss = new ServerSocket(0); + ServerSocket ss = new ServerSocket(0, 0, InetAddress.getLocalHost()); Socket client = new Socket(InetAddress.getLocalHost(), ss.getLocalPort()); Socket server = ss.accept(); diff -r ba72dac556c3 -r ad8e3b295615 test/jdk/java/net/ipv6tests/B6521014.java --- a/test/jdk/java/net/ipv6tests/B6521014.java Wed Jul 10 16:45:28 2019 +0000 +++ b/test/jdk/java/net/ipv6tests/B6521014.java Wed Jul 10 22:33:23 2019 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 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 @@ -71,7 +71,7 @@ } static void test1(Inet6Address sin) throws Exception { - try (ServerSocket ssock = new ServerSocket(0); + try (ServerSocket ssock = createBoundServer(sin); Socket sock = new Socket()) { int port = ssock.getLocalPort(); sock.connect(new InetSocketAddress(sin, port), 100); @@ -82,7 +82,7 @@ } static void test2(Inet6Address sin) throws Exception { - try (ServerSocket ssock = new ServerSocket(0); + try (ServerSocket ssock = createBoundServer(sin); Socket sock = new Socket()) { int port = ssock.getLocalPort(); ssock.setSoTimeout(100); @@ -94,6 +94,13 @@ } } + static ServerSocket createBoundServer(Inet6Address sin) throws IOException { + ServerSocket ss = new ServerSocket(); + InetSocketAddress address = new InetSocketAddress(sin, 0); + ss.bind(address); + return ss; + } + public static void main(String[] args) throws Exception { Optional oaddr = getLocalAddr(); if (!oaddr.isPresent()) {