< prev index next >

test/jdk/java/net/httpclient/http2/server/Http2TestExchange.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 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.

@@ -19,150 +19,54 @@
  * 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.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.io.IOException;
 import java.net.URI;
 import java.net.InetSocketAddress;
+import java.util.concurrent.CompletableFuture;
+import java.util.function.Consumer;
 import javax.net.ssl.SSLSession;
 import jdk.incubator.http.internal.common.HttpHeadersImpl;
-import jdk.incubator.http.internal.frame.HeaderFrame;
-import jdk.incubator.http.internal.frame.HeadersFrame;
 
-public class Http2TestExchange {
+public interface Http2TestExchange {
+
+    HttpHeadersImpl getRequestHeaders();
+
+    HttpHeadersImpl getResponseHeaders();
+
+    URI getRequestURI();
+
+    String getRequestMethod();
+
+    SSLSession getSSLSession();
+
+    void close();
+
+    InputStream getRequestBody();
 
-    final HttpHeadersImpl reqheaders;
-    final HttpHeadersImpl rspheaders;
-    final URI uri;
-    final String method;
-    final InputStream is;
-    final BodyOutputStream os;
-    final SSLSession sslSession;
-    final int streamid;
-    final boolean pushAllowed;
-    final Http2TestServerConnection conn;
-    final Http2TestServer server;
-
-    int responseCode = -1;
-    long responseLength;
-
-    Http2TestExchange(int streamid,
-                      String method,
-                      HttpHeadersImpl reqheaders,
-                      HttpHeadersImpl rspheaders,
-                      URI uri,
-                      InputStream is,
-                      SSLSession sslSession,
-                      BodyOutputStream os,
-                      Http2TestServerConnection conn,
-                      boolean pushAllowed) {
-        this.reqheaders = reqheaders;
-        this.rspheaders = rspheaders;
-        this.uri = uri;
-        this.method = method;
-        this.is = is;
-        this.streamid = streamid;
-        this.os = os;
-        this.sslSession = sslSession;
-        this.pushAllowed = pushAllowed;
-        this.conn = conn;
-        this.server = conn.server;
-    }
-
-    public HttpHeadersImpl getRequestHeaders() {
-        return reqheaders;
-    }
-
-    public HttpHeadersImpl getResponseHeaders() {
-        return rspheaders;
-    }
-
-    public URI getRequestURI() {
-        return uri;
-    }
-
-    public String getRequestMethod() {
-        return method;
-    }
-
-    public SSLSession getSSLSession() {
-        return sslSession;
-    }
-
-    public void close() {
-        try {
-            is.close();
-            os.close();
-        } catch (IOException e) {
-            System.err.println("TestServer: HttpExchange.close exception: " + e);
-            e.printStackTrace();
-        }
-    }
-
-    public InputStream getRequestBody() {
-        return is;
-    }
-
-    public OutputStream getResponseBody() {
-        return os;
-    }
-
-    public void sendResponseHeaders(int rCode, long responseLength) throws IOException {
-        this.responseLength = responseLength;
-        if (responseLength > 0 || responseLength < 0) {
-                long clen = responseLength > 0 ? responseLength : 0;
-            rspheaders.setHeader("Content-length", Long.toString(clen));
-        }
-
-        rspheaders.setHeader(":status", Integer.toString(rCode));
-
-        Http2TestServerConnection.ResponseHeaders response
-                = new Http2TestServerConnection.ResponseHeaders(rspheaders);
-        response.streamid(streamid);
-        response.setFlag(HeaderFrame.END_HEADERS);
-        if (responseLength < 0) {
-            response.setFlag(HeadersFrame.END_STREAM);
-            os.closeInternal();
-        }
-        conn.outputQ.put(response);
-        os.goodToGo();
-        System.err.println("Sent response headers " + rCode);
-    }
-
-    public InetSocketAddress getRemoteAddress() {
-        return (InetSocketAddress) conn.socket.getRemoteSocketAddress();
-    }
-
-    public int getResponseCode() {
-        return responseCode;
-    }
-
-    public InetSocketAddress getLocalAddress() {
-        return server.getAddress();
-    }
-
-    public String getProtocol() {
-        return "HTTP/2";
-    }
-
-    public boolean serverPushAllowed() {
-        return pushAllowed;
-    }
-
-    public void serverPush(URI uri, HttpHeadersImpl headers, InputStream content) {
-        OutgoingPushPromise pp = new OutgoingPushPromise(
-                streamid, uri, headers, content);
-        headers.setHeader(":method", "GET");
-        headers.setHeader(":scheme", uri.getScheme());
-        headers.setHeader(":authority", uri.getAuthority());
-        headers.setHeader(":path", uri.getPath());
-        try {
-            conn.outputQ.put(pp);
-            // writeLoop will spin up thread to read the InputStream
-        } catch (IOException ex) {
-            System.err.println("TestServer: pushPromise exception: " + ex);
-        }
-    }
+    OutputStream getResponseBody();
+
+    void sendResponseHeaders(int rCode, long responseLength) throws IOException;
+
+    InetSocketAddress getRemoteAddress();
+
+    int getResponseCode();
+
+    InetSocketAddress getLocalAddress();
+
+    String getProtocol();
+
+    boolean serverPushAllowed();
+
+    void serverPush(URI uri, HttpHeadersImpl headers, InputStream content);
+
+    /**
+     * Send a PING on this exchanges connection, and completes the returned CF
+     * with the number of milliseconds it took to get a valid response.
+     * It may also complete exceptionally
+     */
+    CompletableFuture<Long> sendPing();
 }
< prev index next >