--- a/jdk/test/java/nio/charset/coders/StreamTimeout.java Tue Apr 17 07:14:14 2012 -0700
+++ b/jdk/test/java/nio/charset/coders/StreamTimeout.java Tue Apr 17 15:46:04 2012 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2012, 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,51 +27,56 @@
* when the underlying byte stream times out
*/
-import java.net.*;
-import java.io.*;
-
+import java.io.Closeable;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.InterruptedIOException;
+import java.io.OutputStreamWriter;
+import java.io.PrintStream;
+import java.io.Reader;
+import java.io.Writer;
+import java.net.ServerSocket;
+import java.net.Socket;
public class StreamTimeout {
+ static final PrintStream log = System.err;
+ static String charset = "US-ASCII";
- private static PrintStream log = System.err;
-
- private static String charset = "US-ASCII";
+ private static class Client extends Thread implements Closeable {
+ private final Socket so;
- private static Object lock = new Object();
- private static synchronized void waitABit(int millisec) {
- synchronized(lock) {
- try {
- lock.wait(millisec);
- } catch (InterruptedException e) {
- //ignore
- }
+ Client(int port) throws IOException {
+ so = new Socket("127.0.0.1", port);
}
- }
- private static class Client extends Thread {
+ @Override
public void run() {
try {
- Socket so = new Socket("127.0.0.1", 22222);
Writer wr = new OutputStreamWriter(so.getOutputStream(),
- charset);
+ charset);
wr.write("ab");
wr.flush();
} catch (IOException x) {
log.print("Unexpected exception in writer: ");
x.printStackTrace();
- System.exit(1);
}
}
+
+ @Override
+ public void close() throws IOException {
+ so.close();
+ }
}
private static void gobble(InputStream is, Reader rd,
- int ec, boolean force)
- throws Exception
- {
+ int ec, boolean force)
+ throws Exception
+ {
int a = is.available();
boolean r = rd.ready();
log.print("" + a + " bytes available, "
- + "reader " + (r ? "" : "not ") + "ready");
+ + "reader " + (r ? "" : "not ") + "ready");
if (!r && !force) {
log.println();
return;
@@ -84,10 +89,10 @@
throw x;
}
log.println(", read() ==> "
- + (c >= 0 ? ("'" + (char)c + "'" ): "EOF"));
+ + (c >= 0 ? ("'" + (char)c + "'" ): "EOF"));
if (c != ec)
throw new Exception("Incorrect value read: Expected "
- + ec + ", read " + (char)c);
+ + ec + ", read " + (char)c);
}
public static void main(String[] args) throws Exception {
@@ -95,43 +100,49 @@
if (args.length > 0)
charset = args[0];
- ServerSocket ss = new ServerSocket(22222);
- Thread cl = new Client();
- cl.start();
- Socket s = ss.accept();
- s.setSoTimeout(150);
- InputStream is = s.getInputStream();
- Reader rd = new InputStreamReader(is, charset);
+ try(ServerSocket ss = new ServerSocket(0);
+ Client cl = new Client(ss.getLocalPort())) {
+
+ cl.start();
+
+ try(Socket s = ss.accept()) {
+ s.setSoTimeout(150);
- while (is.available() <= 0)
- Thread.yield();
+ try(InputStream is = s.getInputStream();
+ Reader rd = new InputStreamReader(is, charset)) {
- gobble(is, rd, 'a', false);
- gobble(is, rd, 'b', false);
- gobble(is, rd, -1, false);
+ while (is.available() <= 0)
+ Thread.yield();
+
+ gobble(is, rd, 'a', false);
+ gobble(is, rd, 'b', false);
+ gobble(is, rd, -1, false);
- boolean caught = false;
- try {
- gobble(is, rd, -1, true);
- } catch (InterruptedIOException e) {
- log.println("Read timed out, as expected");
- caught = true;
- }
- if (!caught) {
- log.println("Read did not time out, test inapplicable");
- return;
- }
+ boolean caught = false;
+ try {
+ gobble(is, rd, -1, true);
+ } catch (InterruptedIOException e) {
+ log.println("Read timed out, as expected");
+ caught = true;
+ }
+ if (!caught) {
+ log.println("Read did not time out, test inapplicable");
+ return;
+ }
- caught = false;
- try {
- gobble(is, rd, -1, true);
- } catch (InterruptedIOException x) {
- log.println("Second read timed out, as expected");
- caught = true;
+ caught = false;
+ try {
+ gobble(is, rd, -1, true);
+ } catch (InterruptedIOException x) {
+ log.println("Second read timed out, as expected");
+ caught = true;
+ }
+ if (!caught)
+ throw new Exception("Second read completed");
+ }
+ }
+
+ cl.join();
}
- if (!caught)
- throw new Exception("Second read completed");
-
}
-
}