--- a/test/jdk/java/net/URLConnection/SetIfModifiedSince.java Thu Oct 17 20:27:44 2019 +0100
+++ b/test/jdk/java/net/URLConnection/SetIfModifiedSince.java Thu Oct 17 20:53:35 2019 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 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,6 +23,7 @@
/* @test
* @bug 4397096
+ * @library /test/lib
* @run main/othervm SetIfModifiedSince
* @summary setIfModifiedSince() of HttpURLConnection sets invalid date of default locale
*/
@@ -31,7 +32,11 @@
import java.io.*;
import java.util.*;
+import jdk.test.lib.net.URIBuilder;
+
public class SetIfModifiedSince {
+ static volatile boolean successfulHeaderCheck = false;
+ static final String MARKER = "A-test-name";
static class XServer extends Thread {
ServerSocket srv;
@@ -48,46 +53,82 @@
}
public void run() {
- try {
+ boolean foundMarker = false;
+ while (!foundMarker) {
String x;
- s = srv.accept ();
- is = s.getInputStream ();
- BufferedReader r = new BufferedReader(new InputStreamReader(is));
- os = s.getOutputStream ();
- while ((x=r.readLine()) != null) {
- String header = "If-Modified-Since: ";
- if (x.startsWith(header)) {
- if (x.charAt(header.length()) == '?') {
- s.close ();
- srv.close (); // or else the HTTPURLConnection will retry
- throw new RuntimeException
- ("Invalid HTTP date specification");
+ try {
+ s = srv.accept();
+ System.out.println("Server: accepting connection from: " + s);
+ is = s.getInputStream ();
+ } catch (IOException io) {
+ System.err.println("Server: Failed to accept connection: " + io);
+ io.printStackTrace();
+ try { srv.close(); } catch (IOException ioc) { }
+ break;
+ }
+ try {
+ BufferedReader r = new BufferedReader(new InputStreamReader(is));
+ os = s.getOutputStream ();
+ boolean foundHeader;
+ while ((x=r.readLine()) != null) {
+ String testname = MARKER + ": ";
+ String header = "If-Modified-Since: ";
+ if (x.startsWith(header)) {
+ foundHeader = true;
+ System.out.println("Server: found header: " + x);
+ if (x.charAt(header.length()) == '?') {
+ s.close ();
+ srv.close (); // or else the HTTPURLConnection will retry
+ throw new RuntimeException
+ ("Invalid HTTP date specification");
+ }
+ if (foundMarker) break;
+ } else if (x.startsWith(testname)) {
+ foundMarker = true;
+ System.out.println("Server: found marker: " + x);
}
- break;
}
- }
- s.close ();
- srv.close (); // or else the HTTPURLConnection will retry
- } catch (IOException e) {}
+ successfulHeaderCheck = true;
+ s.close ();
+ // only close server if connected from this test.
+ if (foundMarker) {
+ srv.close (); // or else the HTTPURLConnection will retry
+ }
+ } catch (IOException e) {}
+ }
}
}
- public static void main (String[] args) {
+ public static void main(String[] args) throws Exception {
Locale reservedLocale = Locale.getDefault();
try {
Locale.setDefault(Locale.JAPAN);
- ServerSocket serversocket = new ServerSocket (0);
+ ServerSocket serversocket = new ServerSocket();
+ serversocket.bind(new InetSocketAddress(InetAddress.getLoopbackAddress(), 0));
int port = serversocket.getLocalPort ();
XServer server = new XServer (serversocket);
server.start ();
Thread.sleep (2000);
- URL url = new URL ("http://localhost:"+port+"/index.html");
- URLConnection urlc = url.openConnection ();
+ URL url = URIBuilder.newBuilder()
+ .scheme("http")
+ .loopback()
+ .port(port)
+ .path("/index.html")
+ .toURLUnchecked();
+ URLConnection urlc = url.openConnection(Proxy.NO_PROXY);
+ urlc.setRequestProperty(MARKER, "SetIfModifiedSince");
urlc.setIfModifiedSince (10000000);
InputStream is = urlc.getInputStream ();
- int i=0, c;
- Thread.sleep (5000);
- } catch (Exception e) {
+ int i = 0, c;
+ Thread.sleep(5000);
+ if (!successfulHeaderCheck) {
+ throw new RuntimeException("Header check was unsuccessful");
+ }
+ } catch (SocketException ce) {
+ if (!successfulHeaderCheck) {
+ throw ce;
+ }
+ System.out.println("ConnectionException expected on successful check of If-modified-since header");
} finally {
// restore the reserved locale
Locale.setDefault(reservedLocale);