changeset 17237:78c003bd010f

8181867: [tests] Reorganize EchoHandlers Summary: This fix reorganize some test files and rename some test classes. Several classes named EchoHandler in the unnamed package are renamed to make it clear what classes (and sources) tests that use these EchoHandler implementations effectively depend on. Reviewed-by: chegar
author dfuchs
date Fri, 09 Jun 2017 16:52:07 +0100
parents 9a344811dba9
children 42f18c931bd4
files test/com/sun/net/httpserver/EchoHandler.java test/com/sun/net/httpserver/FileServerHandler.java test/com/sun/net/httpserver/SimpleFileServer.java test/java/net/httpclient/HttpEchoHandler.java test/java/net/httpclient/LightWeightHttpServer.java test/java/net/httpclient/ManyRequests.java test/java/net/httpclient/ManyRequests2.java test/java/net/httpclient/RequestBodyTest.java test/java/net/httpclient/SmokeTest.java test/java/net/httpclient/http2/BasicTest.java test/java/net/httpclient/http2/ErrorTest.java test/java/net/httpclient/http2/FixedThreadPoolTest.java test/java/net/httpclient/http2/RedirectTest.java test/java/net/httpclient/http2/server/Http2EchoHandler.java
diffstat 14 files changed, 442 insertions(+), 197 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/com/sun/net/httpserver/EchoHandler.java	Fri Jun 09 16:52:07 2017 +0100
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2005, 2017, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.util.*;
+import java.util.concurrent.*;
+import java.util.logging.*;
+import java.io.*;
+import java.net.*;
+import java.security.*;
+import javax.net.ssl.*;
+import com.sun.net.httpserver.*;
+
+/**
+ * Implements a basic static EchoHandler for an HTTP server
+ */
+public class EchoHandler implements HttpHandler {
+
+    byte[] read(InputStream is) throws IOException {
+        byte[] buf = new byte[1024];
+        byte[] result = new byte[0];
+
+        while (true) {
+            int n = is.read(buf);
+            if (n > 0) {
+                byte[] b1 = new byte[result.length + n];
+                System.arraycopy(result, 0, b1, 0, result.length);
+                System.arraycopy(buf, 0, b1, result.length, n);
+                result = b1;
+            } else if (n == -1) {
+                return result;
+            }
+        }
+    }
+
+    public void handle (HttpExchange t)
+        throws IOException
+    {
+        InputStream is = t.getRequestBody();
+        Headers map = t.getRequestHeaders();
+        String fixedrequest = map.getFirst ("XFixed");
+
+        // return the number of bytes received (no echo)
+        String summary = map.getFirst ("XSummary");
+        if (fixedrequest != null && summary == null)  {
+            byte[] in = read(is);
+            t.sendResponseHeaders(200, in.length);
+            OutputStream os = t.getResponseBody();
+            os.write(in);
+            close(os);
+            close(is);
+        } else {
+            OutputStream os = t.getResponseBody();
+            byte[] buf = new byte[64 * 1024];
+            t.sendResponseHeaders(200, 0);
+            int n, count=0;;
+
+            while ((n = is.read(buf)) != -1) {
+                if (summary == null) {
+                    os.write(buf, 0, n);
+                }
+                count += n;
+            }
+            if (summary != null) {
+                String s = Integer.toString(count);
+                os.write(s.getBytes());
+            }
+            close(os);
+            close(is);
+        }
+    }
+
+    protected void close(OutputStream os) throws IOException {
+            os.close();
+    }
+    protected void close(InputStream is) throws IOException {
+            is.close();
+    }
+}
--- a/test/com/sun/net/httpserver/FileServerHandler.java	Thu Jun 08 23:11:21 2017 +0000
+++ b/test/com/sun/net/httpserver/FileServerHandler.java	Fri Jun 09 16:52:07 2017 +0100
@@ -31,216 +31,122 @@
 import com.sun.net.httpserver.*;
 
 /**
- * Implements a basic static content HTTP server
+ * Implements a basic static content HTTP file server handler
  * which understands text/html, text/plain content types
  *
  * Must be given an abs pathname to the document root.
  * Directory listings together with text + html files
  * can be served.
  *
- * File Server created on files sub-path
- *
- * Echo server created on echo sub-path
  */
 public class FileServerHandler implements HttpHandler {
 
-        public static void main (String[] args) throws Exception {
-            if (args.length != 3) {
-                System.out.println ("usage: java FileServerHandler rootDir port logfilename");
-                System.exit(1);
-            }
-            Logger logger = Logger.getLogger("com.sun.net.httpserver");
-            ConsoleHandler ch = new ConsoleHandler();
-            logger.setLevel(Level.ALL);
-            ch.setLevel(Level.ALL);
-            logger.addHandler(ch);
+    String docroot;
 
-            String rootDir = args[0];
-            int port = Integer.parseInt (args[1]);
-            String logfile = args[2];
-            HttpServer server = HttpServer.create (new InetSocketAddress (port), 0);
-            HttpHandler h = new FileServerHandler (rootDir);
-            HttpHandler h1 = new EchoHandler ();
+    public FileServerHandler (String docroot) {
+        this.docroot = docroot;
+    }
 
-            HttpContext c = server.createContext ("/files", h);
-            c.getFilters().add (new LogFilter (new File (logfile)));
-            HttpContext c1 = server.createContext ("/echo", h1);
-            c.getFilters().add (new LogFilter (new File (logfile)));
-            c1.getFilters().add (new LogFilter (new File (logfile)));
-            server.setExecutor (Executors.newCachedThreadPool());
-            server.start ();
+    int invocation = 1;
+    public void handle (HttpExchange t)
+        throws IOException
+    {
+        InputStream is = t.getRequestBody();
+        Headers map = t.getRequestHeaders();
+        Headers rmap = t.getResponseHeaders();
+        URI uri = t.getRequestURI();
+        String path = uri.getPath();
+
+        int x = 0;
+        while (is.read () != -1) x++;
+        is.close();
+        File f = new File (docroot, path);
+        if (!f.exists()) {
+            notfound (t, path);
+            return;
+        }
+        String fixedrequest = map.getFirst ("XFixed");
+
+        String method = t.getRequestMethod();
+        if (method.equals ("HEAD")) {
+            rmap.set ("Content-Length", Long.toString (f.length()));
+            t.sendResponseHeaders (200, -1);
+            t.close();
+        } else if (!method.equals("GET")) {
+            t.sendResponseHeaders (405, -1);
+            t.close();
+            return;
         }
 
-        String docroot;
-
-        FileServerHandler (String docroot) {
-            this.docroot = docroot;
+        if (path.endsWith (".html") || path.endsWith (".htm")) {
+            rmap.set ("Content-Type", "text/html");
+        } else {
+            rmap.set ("Content-Type", "text/plain");
         }
-
-        int invocation = 1;
-        public void handle (HttpExchange t)
-            throws IOException
-        {
-            InputStream is = t.getRequestBody();
-            Headers map = t.getRequestHeaders();
-            Headers rmap = t.getResponseHeaders();
-            URI uri = t.getRequestURI();
-            String path = uri.getPath();
-
-            int x = 0;
-            while (is.read () != -1) x++;
-            is.close();
-            File f = new File (docroot, path);
-            if (!f.exists()) {
-                notfound (t, path);
+        if (f.isDirectory()) {
+            if (!path.endsWith ("/")) {
+                moved (t);
                 return;
             }
-            String fixedrequest = map.getFirst ("XFixed");
-
-            String method = t.getRequestMethod();
-            if (method.equals ("HEAD")) {
-                rmap.set ("Content-Length", Long.toString (f.length()));
-                t.sendResponseHeaders (200, -1);
-                t.close();
-            } else if (!method.equals("GET")) {
-                t.sendResponseHeaders (405, -1);
-                t.close();
-                return;
+            rmap.set ("Content-Type", "text/html");
+            t.sendResponseHeaders (200, 0);
+            String[] list = f.list();
+            OutputStream os = t.getResponseBody();
+            PrintStream p = new PrintStream (os);
+            p.println ("<h2>Directory listing for: " + path+ "</h2>");
+            p.println ("<ul>");
+            for (int i=0; i<list.length; i++) {
+                p.println ("<li><a href=\""+list[i]+"\">"+list[i]+"</a></li>");
             }
-
-            if (path.endsWith (".html") || path.endsWith (".htm")) {
-                rmap.set ("Content-Type", "text/html");
+            p.println ("</ul><p><hr>");
+            p.flush();
+            p.close();
+        } else {
+            int clen;
+            if (fixedrequest != null) {
+                clen = (int) f.length();
             } else {
-                rmap.set ("Content-Type", "text/plain");
+                clen = 0;
             }
-            if (f.isDirectory()) {
-                if (!path.endsWith ("/")) {
-                    moved (t);
-                    return;
-                }
-                rmap.set ("Content-Type", "text/html");
-                t.sendResponseHeaders (200, 0);
-                String[] list = f.list();
-                OutputStream os = t.getResponseBody();
-                PrintStream p = new PrintStream (os);
-                p.println ("<h2>Directory listing for: " + path+ "</h2>");
-                p.println ("<ul>");
-                for (int i=0; i<list.length; i++) {
-                    p.println ("<li><a href=\""+list[i]+"\">"+list[i]+"</a></li>");
-                }
-                p.println ("</ul><p><hr>");
-                p.flush();
-                p.close();
-            } else {
-                int clen;
-                if (fixedrequest != null) {
-                    clen = (int) f.length();
-                } else {
-                    clen = 0;
-                }
-                t.sendResponseHeaders (200, clen);
-                OutputStream os = t.getResponseBody();
-                FileInputStream fis = new FileInputStream (f);
-                int count = 0;
-                try {
+            t.sendResponseHeaders (200, clen);
+            OutputStream os = t.getResponseBody();
+            FileInputStream fis = new FileInputStream (f);
+            int count = 0;
+            try {
                 byte[] buf = new byte [16 * 1024];
                 int len;
                 while ((len=fis.read (buf)) != -1) {
                     os.write (buf, 0, len);
                     count += len;
                 }
-                } catch (IOException e) {
-                        e.printStackTrace();
-                }
-                fis.close();
-                os.close();
+            } catch (IOException e) {
+                e.printStackTrace();
             }
-        }
-
-        void moved (HttpExchange t) throws IOException {
-            Headers req = t.getRequestHeaders();
-            Headers map = t.getResponseHeaders();
-            URI uri = t.getRequestURI();
-            String host = req.getFirst ("Host");
-            String location = "http://"+host+uri.getPath() + "/";
-            map.set ("Content-Type", "text/html");
-            map.set ("Location", location);
-            t.sendResponseHeaders (301, -1);
-            t.close();
-        }
-
-        void notfound (HttpExchange t, String p) throws IOException {
-            t.getResponseHeaders().set ("Content-Type", "text/html");
-            t.sendResponseHeaders (404, 0);
-            OutputStream os = t.getResponseBody();
-            String s = "<h2>File not found</h2>";
-            s = s + p + "<p>";
-            os.write (s.getBytes());
+            fis.close();
             os.close();
-            t.close();
         }
     }
 
-class EchoHandler implements HttpHandler {
-
-    byte[] read(InputStream is) throws IOException {
-        byte[] buf = new byte[1024];
-        byte[] result = new byte[0];
-
-        while (true) {
-            int n = is.read(buf);
-            if (n > 0) {
-                byte[] b1 = new byte[result.length + n];
-                System.arraycopy(result, 0, b1, 0, result.length);
-                System.arraycopy(buf, 0, b1, result.length, n);
-                result = b1;
-            } else if (n == -1) {
-                return result;
-            }
-        }
+    void moved (HttpExchange t) throws IOException {
+        Headers req = t.getRequestHeaders();
+        Headers map = t.getResponseHeaders();
+        URI uri = t.getRequestURI();
+        String host = req.getFirst ("Host");
+        String location = "http://"+host+uri.getPath() + "/";
+        map.set ("Content-Type", "text/html");
+        map.set ("Location", location);
+        t.sendResponseHeaders (301, -1);
+        t.close();
     }
 
-    public void handle (HttpExchange t)
-        throws IOException
-    {
-        InputStream is = t.getRequestBody();
-        Headers map = t.getRequestHeaders();
-        String fixedrequest = map.getFirst ("XFixed");
-
-        // return the number of bytes received (no echo)
-        String summary = map.getFirst ("XSummary");
-        if (fixedrequest != null && summary == null)  {
-            byte[] in = read(is);
-            t.sendResponseHeaders(200, in.length);
-            OutputStream os = t.getResponseBody();
-            os.write(in);
-            close(os);
-            close(is);
-        } else {
-            OutputStream os = t.getResponseBody();
-            byte[] buf = new byte[64 * 1024];
-            t.sendResponseHeaders(200, 0);
-            int n, count=0;;
-
-            while ((n = is.read(buf)) != -1) {
-                if (summary == null) {
-                    os.write(buf, 0, n);
-                }
-                count += n;
-            }
-            if (summary != null) {
-                String s = Integer.toString(count);
-                os.write(s.getBytes());
-            }
-            close(os);
-            close(is);
-        }
+    void notfound (HttpExchange t, String p) throws IOException {
+        t.getResponseHeaders().set ("Content-Type", "text/html");
+        t.sendResponseHeaders (404, 0);
+        OutputStream os = t.getResponseBody();
+        String s = "<h2>File not found</h2>";
+        s = s + p + "<p>";
+        os.write (s.getBytes());
+        os.close();
+        t.close();
     }
-
-    protected void close(OutputStream os) throws IOException {
-            os.close();
-    }
-    protected void close(InputStream is) throws IOException {
-            is.close();
-        }
-    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/com/sun/net/httpserver/SimpleFileServer.java	Fri Jun 09 16:52:07 2017 +0100
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2005, 2017, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.util.*;
+import java.util.concurrent.*;
+import java.util.logging.*;
+import java.io.*;
+import java.net.*;
+import java.security.*;
+import javax.net.ssl.*;
+import com.sun.net.httpserver.*;
+
+/**
+ * Implements a basic static content HTTP server
+ * which understands text/html, text/plain content types
+ *
+ * Must be given an abs pathname to the document root.
+ * Directory listings together with text + html files
+ * can be served.
+ *
+ * File Server created on files sub-path
+ *
+ * Echo server created on echo sub-path
+ */
+public class SimpleFileServer {
+
+    public static void main (String[] args) throws Exception {
+        if (args.length != 3) {
+            System.out.println ("usage: java FileServerHandler rootDir port logfilename");
+            System.exit(1);
+        }
+        Logger logger = Logger.getLogger("com.sun.net.httpserver");
+        ConsoleHandler ch = new ConsoleHandler();
+        logger.setLevel(Level.ALL);
+        ch.setLevel(Level.ALL);
+        logger.addHandler(ch);
+
+        String rootDir = args[0];
+        int port = Integer.parseInt (args[1]);
+        String logfile = args[2];
+        HttpServer server = HttpServer.create (new InetSocketAddress (port), 0);
+        HttpHandler h = new FileServerHandler (rootDir);
+        HttpHandler h1 = new EchoHandler ();
+
+        HttpContext c = server.createContext ("/files", h);
+        c.getFilters().add (new LogFilter (new File (logfile)));
+        HttpContext c1 = server.createContext ("/echo", h1);
+        c.getFilters().add (new LogFilter (new File (logfile)));
+        c1.getFilters().add (new LogFilter (new File (logfile)));
+        server.setExecutor (Executors.newCachedThreadPool());
+        server.start ();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/net/httpclient/HttpEchoHandler.java	Fri Jun 09 16:52:07 2017 +0100
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2015, 2017, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import com.sun.net.httpserver.*;
+import java.net.*;
+import jdk.incubator.http.*;
+import java.io.*;
+import java.util.concurrent.*;
+import javax.net.ssl.*;
+import java.nio.file.*;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Random;
+import jdk.testlibrary.SimpleSSLContext;
+import static jdk.incubator.http.HttpRequest.*;
+import static jdk.incubator.http.HttpResponse.*;
+import java.util.logging.ConsoleHandler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class HttpEchoHandler implements HttpHandler {
+    public HttpEchoHandler() {}
+
+    @Override
+    public void handle(HttpExchange t)
+            throws IOException {
+        try {
+            System.err.println("EchoHandler received request to " + t.getRequestURI());
+            InputStream is = t.getRequestBody();
+            Headers map = t.getRequestHeaders();
+            Headers map1 = t.getResponseHeaders();
+            map1.add("X-Hello", "world");
+            map1.add("X-Bye", "universe");
+            String fixedrequest = map.getFirst("XFixed");
+            File outfile = File.createTempFile("foo", "bar");
+            FileOutputStream fos = new FileOutputStream(outfile);
+            int count = (int) is.transferTo(fos);
+            is.close();
+            fos.close();
+            InputStream is1 = new FileInputStream(outfile);
+            OutputStream os = null;
+            // return the number of bytes received (no echo)
+            String summary = map.getFirst("XSummary");
+            if (fixedrequest != null && summary == null) {
+                t.sendResponseHeaders(200, count);
+                os = t.getResponseBody();
+                is1.transferTo(os);
+            } else {
+                t.sendResponseHeaders(200, 0);
+                os = t.getResponseBody();
+                is1.transferTo(os);
+
+                if (summary != null) {
+                    String s = Integer.toString(count);
+                    os.write(s.getBytes());
+                }
+            }
+            outfile.delete();
+            os.close();
+            is1.close();
+        } catch (Throwable e) {
+            e.printStackTrace();
+            throw new IOException(e);
+        }
+    }
+}
--- a/test/java/net/httpclient/LightWeightHttpServer.java	Thu Jun 08 23:11:21 2017 +0000
+++ b/test/java/net/httpclient/LightWeightHttpServer.java	Fri Jun 09 16:52:07 2017 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, 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,9 @@
 
 /**
  * library /lib/testlibrary/ /
- * build jdk.testlibrary.SimpleSSLContext ProxyServer EchoHandler
+ * build jdk.testlibrary.SimpleSSLContext ProxyServer
  * compile ../../../com/sun/net/httpserver/LogFilter.java
+ * compile ../../../com/sun/net/httpserver/EchoHandler.java
  * compile ../../../com/sun/net/httpserver/FileServerHandler.java
  */
 import com.sun.net.httpserver.Headers;
--- a/test/java/net/httpclient/ManyRequests.java	Thu Jun 08 23:11:21 2017 +0000
+++ b/test/java/net/httpclient/ManyRequests.java	Fri Jun 09 16:52:07 2017 +0100
@@ -28,8 +28,9 @@
  *          java.logging
  *          jdk.httpserver
  * @library /lib/testlibrary/ /
- * @build jdk.testlibrary.SimpleSSLContext EchoHandler
+ * @build jdk.testlibrary.SimpleSSLContext
  * @compile ../../../com/sun/net/httpserver/LogFilter.java
+ * @compile ../../../com/sun/net/httpserver/EchoHandler.java
  * @compile ../../../com/sun/net/httpserver/FileServerHandler.java
  * @run main/othervm/timeout=40 -Djdk.httpclient.HttpClient.log=ssl ManyRequests
  * @run main/othervm/timeout=40 -Dtest.insertDelay=true ManyRequests
--- a/test/java/net/httpclient/ManyRequests2.java	Thu Jun 08 23:11:21 2017 +0000
+++ b/test/java/net/httpclient/ManyRequests2.java	Fri Jun 09 16:52:07 2017 +0100
@@ -28,8 +28,9 @@
  *          java.logging
  *          jdk.httpserver
  * @library /lib/testlibrary/ /
- * @build jdk.testlibrary.SimpleSSLContext EchoHandler
+ * @build jdk.testlibrary.SimpleSSLContext
  * @compile ../../../com/sun/net/httpserver/LogFilter.java
+ * @compile ../../../com/sun/net/httpserver/EchoHandler.java
  * @compile ../../../com/sun/net/httpserver/FileServerHandler.java
  * @build ManyRequests ManyRequests2
  * @run main/othervm/timeout=40 -Dtest.XFixed=true ManyRequests2
--- a/test/java/net/httpclient/RequestBodyTest.java	Thu Jun 08 23:11:21 2017 +0000
+++ b/test/java/net/httpclient/RequestBodyTest.java	Fri Jun 09 16:52:07 2017 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, 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 @@
  *          jdk.httpserver
  * @library /lib/testlibrary/
  * @compile ../../../com/sun/net/httpserver/LogFilter.java
+ * @compile ../../../com/sun/net/httpserver/EchoHandler.java
  * @compile ../../../com/sun/net/httpserver/FileServerHandler.java
  * @build LightWeightHttpServer
  * @build jdk.testlibrary.SimpleSSLContext
--- a/test/java/net/httpclient/SmokeTest.java	Thu Jun 08 23:11:21 2017 +0000
+++ b/test/java/net/httpclient/SmokeTest.java	Fri Jun 09 16:52:07 2017 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, 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,8 +28,9 @@
  *          java.logging
  *          jdk.httpserver
  * @library /lib/testlibrary/ /
- * @build jdk.testlibrary.SimpleSSLContext ProxyServer EchoHandler
+ * @build jdk.testlibrary.SimpleSSLContext ProxyServer
  * @compile ../../../com/sun/net/httpserver/LogFilter.java
+ * @compile ../../../com/sun/net/httpserver/EchoHandler.java
  * @compile ../../../com/sun/net/httpserver/FileServerHandler.java
  * @run main/othervm -Djdk.httpclient.HttpClient.log=errors,trace SmokeTest
  */
--- a/test/java/net/httpclient/http2/BasicTest.java	Thu Jun 08 23:11:21 2017 +0000
+++ b/test/java/net/httpclient/http2/BasicTest.java	Fri Jun 09 16:52:07 2017 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, 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
@@ -62,11 +62,11 @@
             sslContext = sslct.get();
             client = getClient();
             httpServer = new Http2TestServer(false, 0, exec, sslContext);
-            httpServer.addHandler(new EchoHandler(), "/");
+            httpServer.addHandler(new Http2EchoHandler(), "/");
             httpPort = httpServer.getAddress().getPort();
 
             httpsServer = new Http2TestServer(true, 0, exec, sslContext);
-            httpsServer.addHandler(new EchoHandler(), "/");
+            httpsServer.addHandler(new Http2EchoHandler(), "/");
 
             httpsPort = httpsServer.getAddress().getPort();
             httpURIString = "http://127.0.0.1:" + httpPort + "/foo/";
--- a/test/java/net/httpclient/http2/ErrorTest.java	Thu Jun 08 23:11:21 2017 +0000
+++ b/test/java/net/httpclient/http2/ErrorTest.java	Fri Jun 09 16:52:07 2017 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, 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
@@ -83,7 +83,7 @@
                                               0,
                                               exec,
                                               serverContext);
-            httpsServer.addHandler(new EchoHandler(), "/");
+            httpsServer.addHandler(new Http2EchoHandler(), "/");
             int httpsPort = httpsServer.getAddress().getPort();
             String httpsURIString = "https://127.0.0.1:" + httpsPort + "/bar/";
 
--- a/test/java/net/httpclient/http2/FixedThreadPoolTest.java	Thu Jun 08 23:11:21 2017 +0000
+++ b/test/java/net/httpclient/http2/FixedThreadPoolTest.java	Fri Jun 09 16:52:07 2017 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, 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
@@ -62,11 +62,11 @@
             sslContext = sslct.get();
             client = getClient();
             httpServer = new Http2TestServer(false, 0, exec, sslContext);
-            httpServer.addHandler(new EchoHandler(), "/");
+            httpServer.addHandler(new Http2EchoHandler(), "/");
             httpPort = httpServer.getAddress().getPort();
 
             httpsServer = new Http2TestServer(true, 0, exec, sslContext);
-            httpsServer.addHandler(new EchoHandler(), "/");
+            httpsServer.addHandler(new Http2EchoHandler(), "/");
 
             httpsPort = httpsServer.getAddress().getPort();
             httpURIString = "http://127.0.0.1:" + httpPort + "/foo/";
--- a/test/java/net/httpclient/http2/RedirectTest.java	Thu Jun 08 23:11:21 2017 +0000
+++ b/test/java/net/httpclient/http2/RedirectTest.java	Fri Jun 09 16:52:07 2017 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, 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
@@ -79,7 +79,7 @@
 
             httpServer.addHandler(new RedirectHandler(sup(altURIString1)), "/foo");
             altServer.addHandler(new RedirectHandler(sup(altURIString2)), "/redir");
-            altServer.addHandler(new EchoHandler(), "/redir/again");
+            altServer.addHandler(new Http2EchoHandler(), "/redir/again");
 
             httpServer.start();
             altServer.start();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/net/httpclient/http2/server/Http2EchoHandler.java	Fri Jun 09 16:52:07 2017 +0100
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2005, 2017, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.*;
+import jdk.incubator.http.internal.common.HttpHeadersImpl;
+
+public class Http2EchoHandler implements Http2Handler {
+    public Http2EchoHandler() {}
+
+    @Override
+    public void handle(Http2TestExchange t)
+            throws IOException {
+        try {
+            System.err.println("EchoHandler received request to " + t.getRequestURI());
+            InputStream is = t.getRequestBody();
+            HttpHeadersImpl map = t.getRequestHeaders();
+            HttpHeadersImpl map1 = t.getResponseHeaders();
+            map1.addHeader("X-Hello", "world");
+            map1.addHeader("X-Bye", "universe");
+            String fixedrequest = map.firstValue("XFixed").orElse(null);
+            File outfile = File.createTempFile("foo", "bar");
+            //System.err.println ("QQQ = " + outfile.toString());
+            FileOutputStream fos = new FileOutputStream(outfile);
+            int count = (int) is.transferTo(fos);
+            System.err.printf("EchoHandler read %d bytes\n", count);
+            is.close();
+            fos.close();
+            InputStream is1 = new FileInputStream(outfile);
+            OutputStream os = null;
+            // return the number of bytes received (no echo)
+            String summary = map.firstValue("XSummary").orElse(null);
+            if (fixedrequest != null && summary == null) {
+                t.sendResponseHeaders(200, count);
+                os = t.getResponseBody();
+                int count1 = (int)is1.transferTo(os);
+                System.err.printf("EchoHandler wrote %d bytes\n", count1);
+            } else {
+                t.sendResponseHeaders(200, 0);
+                os = t.getResponseBody();
+                int count1 = (int)is1.transferTo(os);
+                System.err.printf("EchoHandler wrote %d bytes\n", count1);
+
+                if (summary != null) {
+                    String s = Integer.toString(count);
+                    os.write(s.getBytes());
+                }
+            }
+            outfile.delete();
+            os.close();
+            is1.close();
+        } catch (Throwable e) {
+            e.printStackTrace();
+            throw new IOException(e);
+        }
+    }
+}