8023462: TEST_BUG: test/com/sun/net/httpserver/bugs/B6433018.java fails on slow/single core machine
authortyan
Fri, 08 Nov 2013 18:54:29 +0000
changeset 21632 82c2718908e5
parent 21631 73fa744f1283
child 21633 6cc4c9a56216
8023462: TEST_BUG: test/com/sun/net/httpserver/bugs/B6433018.java fails on slow/single core machine Reviewed-by: chegar
jdk/test/com/sun/net/httpserver/bugs/B6433018.java
--- a/jdk/test/com/sun/net/httpserver/bugs/B6433018.java	Fri Nov 08 09:43:01 2013 -0800
+++ b/jdk/test/com/sun/net/httpserver/bugs/B6433018.java	Fri Nov 08 18:54:29 2013 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2013 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,20 +29,19 @@
 
 import com.sun.net.httpserver.*;
 
-import java.util.*;
 import java.util.concurrent.*;
 import java.io.*;
 import java.net.*;
 
 public class B6433018 {
 
-    static String CRLF = "\r\n";
+    static final String CRLF = "\r\n";
 
     /* invalid HTTP POST with extra CRLF at end */
     /* This checks that the server is able to handle it
      * and recognise the second request */
 
-    static String cmd =
+    static final String cmd =
         "POST /test/item HTTP/1.1"+CRLF+
         "Keep-Alive: 300"+CRLF+
         "Proxy-Connection: keep-alive"+CRLF+
@@ -61,45 +60,47 @@
         "Pragma: no-cache"+CRLF+
         "Cache-Control: no-cache"+CRLF+CRLF;
 
-    public static void main (String[] args) throws Exception {
-        Handler handler = new Handler();
-        InetSocketAddress addr = new InetSocketAddress (0);
-        HttpServer server = HttpServer.create (addr, 0);
-        HttpContext ctx = server.createContext ("/test", handler);
-
-        server.start ();
-
-        Socket s = new Socket ("localhost", server.getAddress().getPort());
+    public static void main(String[] args) throws Exception {
+        CountDownLatch finished = new CountDownLatch(2);
+        Handler handler = new Handler(finished);
+        InetSocketAddress addr = new InetSocketAddress(0);
+        HttpServer server = HttpServer.create(addr, 0);
+        HttpContext ctx = server.createContext("/test", handler);
 
-        try {
-            OutputStream os = s.getOutputStream();
-            os.write (cmd.getBytes());
-            Thread.sleep (3000);
-            s.close();
-        } catch (IOException e) { }
-        server.stop(2);
-        if (requests != 2) {
-            throw new RuntimeException ("did not receive the 2 requests");
+        server.start();
+        int port = server.getAddress().getPort();
+        try (Socket s = new Socket("localhost", port);
+             OutputStream os = s.getOutputStream()) {
+            os.write(cmd.getBytes());
+            finished.await(30, TimeUnit.SECONDS);
+        } finally {
+            server.stop(2);
         }
-        System.out.println ("OK");
+
+        if (finished.getCount() != 0)
+            throw new RuntimeException("did not receive the 2 requests");
+
+        System.out.println("OK");
     }
 
-    public static boolean error = false;
-    static int requests = 0;
+    static class Handler implements HttpHandler {
+        private final CountDownLatch finished;
+
+        Handler(CountDownLatch finished) {
+            this.finished = finished;
+        }
 
-    static class Handler implements HttpHandler {
-        int invocation = 1;
-        public void handle (HttpExchange t)
-            throws IOException
-        {
-            InputStream is = t.getRequestBody();
-            Headers map = t.getRequestHeaders();
-            Headers rmap = t.getResponseHeaders();
-            while (is.read () != -1) ;
-            is.close();
-            t.sendResponseHeaders (200, -1);
+        @Override
+        public void handle(HttpExchange t) throws IOException {
+            try (InputStream is = t.getRequestBody()) {
+                Headers map = t.getRequestHeaders();
+                Headers rmap = t.getResponseHeaders();
+                while (is.read() != -1);
+            }
+            t.sendResponseHeaders(200, -1);
             t.close();
-            requests ++;
+            finished.countDown();
         }
     }
 }
+