test/jdk/java/net/httpclient/HttpSlowServerTest.java
author dfuchs
Wed, 16 Oct 2019 14:50:53 +0100
changeset 58649 6b6bf0de534b
permissions -rw-r--r--
8231449: HttpClient’s client ssl certificate authentication seems to be broken. Summary: SSLFlowDelegate.Reader and SubscriberWrapper are changed to better cooperate on when more demand should be requested from upstream. The issue encountered in this scenario was triggered by a large certificate which caused the SSLFlowDelegate to stop requesting data from upstream during the handshake although the engine handshake status was NEED_UNWRAP. Reviewed-by: chegar
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
58649
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
     1
/*
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
     2
 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
     4
 *
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
     7
 * published by the Free Software Foundation.
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
     8
 *
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    13
 * accompanied this code).
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    14
 *
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    18
 *
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    21
 * questions.
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    22
 */
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    23
import com.sun.net.httpserver.HttpServer;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    24
import com.sun.net.httpserver.HttpsConfigurator;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    25
import com.sun.net.httpserver.HttpsServer;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    26
import jdk.test.lib.net.SimpleSSLContext;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    27
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    28
import javax.net.ssl.SSLContext;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    29
import java.io.IOException;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    30
import java.io.InputStream;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    31
import java.io.OutputStream;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    32
import java.net.InetAddress;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    33
import java.net.InetSocketAddress;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    34
import java.net.Proxy;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    35
import java.net.ProxySelector;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    36
import java.net.SocketAddress;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    37
import java.net.URI;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    38
import java.net.http.HttpClient;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    39
import java.net.http.HttpRequest;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    40
import java.net.http.HttpResponse;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    41
import java.nio.charset.StandardCharsets;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    42
import java.time.Duration;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    43
import java.util.List;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    44
import java.util.Set;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    45
import java.util.concurrent.CompletableFuture;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    46
import java.util.concurrent.CopyOnWriteArrayList;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    47
import java.util.concurrent.CopyOnWriteArraySet;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    48
import java.util.concurrent.ExecutorService;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    49
import java.util.concurrent.LinkedBlockingQueue;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    50
import java.util.concurrent.ThreadPoolExecutor;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    51
import java.util.concurrent.TimeUnit;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    52
import java.util.concurrent.atomic.AtomicLong;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    53
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    54
/**
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    55
 * @test
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    56
 * @summary This test verifies that the HttpClient works correctly when connected to a
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    57
 *          slow server.
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    58
 * @library /test/lib http2/server
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    59
 * @build jdk.test.lib.net.SimpleSSLContext HttpServerAdapters DigestEchoServer HttpSlowServerTest
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    60
 * @modules java.net.http/jdk.internal.net.http.common
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    61
 *          java.net.http/jdk.internal.net.http.frame
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    62
 *          java.net.http/jdk.internal.net.http.hpack
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    63
 *          java.logging
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    64
 *          java.base/sun.net.www.http
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    65
 *          java.base/sun.net.www
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    66
 *          java.base/sun.net
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    67
 * @run main/othervm -Dtest.requiresHost=true
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    68
 *                   -Djdk.httpclient.HttpClient.log=headers
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    69
 *                   -Djdk.internal.httpclient.debug=false
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    70
 *                   HttpSlowServerTest
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    71
 *
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    72
 */
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    73
public class HttpSlowServerTest implements HttpServerAdapters {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    74
    static final List<String> data = List.of(
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    75
            "Lorem ipsum",
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    76
            "dolor sit amet",
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    77
            "consectetur adipiscing elit, sed do eiusmod tempor",
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    78
            "quis nostrud exercitation ullamco",
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    79
            "laboris nisi",
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    80
            "ut",
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    81
            "aliquip ex ea commodo consequat.",
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    82
            "Duis aute irure dolor in reprehenderit in voluptate velit esse",
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    83
            "cillum dolore eu fugiat nulla pariatur.",
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    84
            "Excepteur sint occaecat cupidatat non proident."
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    85
    );
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    86
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    87
    static final SSLContext context;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    88
    static {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    89
        try {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    90
            context = new SimpleSSLContext().get();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    91
            SSLContext.setDefault(context);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    92
        } catch (Exception x) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    93
            throw new ExceptionInInitializerError(x);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    94
        }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    95
    }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    96
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    97
    final AtomicLong requestCounter = new AtomicLong();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    98
    final AtomicLong responseCounter = new AtomicLong();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
    99
    HttpTestServer http1Server;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   100
    HttpTestServer http2Server;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   101
    HttpTestServer https1Server;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   102
    HttpTestServer https2Server;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   103
    DigestEchoServer.TunnelingProxy proxy;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   104
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   105
    URI http1URI;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   106
    URI https1URI;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   107
    URI http2URI;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   108
    URI https2URI;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   109
    InetSocketAddress proxyAddress;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   110
    ProxySelector proxySelector;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   111
    HttpClient client;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   112
    List<CompletableFuture<?>>  futures = new CopyOnWriteArrayList<>();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   113
    Set<URI> pending = new CopyOnWriteArraySet<>();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   114
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   115
    final ExecutorService executor = new ThreadPoolExecutor(12, 60, 10,
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   116
            TimeUnit.SECONDS, new LinkedBlockingQueue<>()); // Shared by HTTP/1.1 servers
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   117
    final ExecutorService clientexec = new ThreadPoolExecutor(6, 12, 1,
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   118
            TimeUnit.SECONDS, new LinkedBlockingQueue<>()); // Used by the client
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   119
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   120
    public HttpClient newHttpClient(ProxySelector ps) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   121
        HttpClient.Builder builder = HttpClient
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   122
                .newBuilder()
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   123
                .sslContext(context)
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   124
                .executor(clientexec)
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   125
                .proxy(ps);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   126
        return builder.build();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   127
    }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   128
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   129
    public void setUp() throws Exception {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   130
        try {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   131
            InetSocketAddress sa = new InetSocketAddress(InetAddress.getLoopbackAddress(), 0);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   132
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   133
            // HTTP/1.1
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   134
            HttpServer server1 = HttpServer.create(sa, 0);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   135
            server1.setExecutor(executor);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   136
            http1Server = HttpTestServer.of(server1);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   137
            http1Server.addHandler(new HttpTestSlowHandler(), "/HttpSlowServerTest/http1/");
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   138
            http1Server.start();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   139
            http1URI = new URI("http://" + http1Server.serverAuthority() + "/HttpSlowServerTest/http1/");
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   140
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   141
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   142
            // HTTPS/1.1
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   143
            HttpsServer sserver1 = HttpsServer.create(sa, 100);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   144
            sserver1.setExecutor(executor);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   145
            sserver1.setHttpsConfigurator(new HttpsConfigurator(context));
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   146
            https1Server = HttpTestServer.of(sserver1);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   147
            https1Server.addHandler(new HttpTestSlowHandler(), "/HttpSlowServerTest/https1/");
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   148
            https1Server.start();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   149
            https1URI = new URI("https://" + https1Server.serverAuthority() + "/HttpSlowServerTest/https1/");
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   150
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   151
            // HTTP/2.0
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   152
            http2Server = HttpTestServer.of(
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   153
                    new Http2TestServer("localhost", false, 0));
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   154
            http2Server.addHandler(new HttpTestSlowHandler(), "/HttpSlowServerTest/http2/");
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   155
            http2Server.start();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   156
            http2URI = new URI("http://" + http2Server.serverAuthority() + "/HttpSlowServerTest/http2/");
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   157
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   158
            // HTTPS/2.0
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   159
            https2Server = HttpTestServer.of(
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   160
                    new Http2TestServer("localhost", true, 0));
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   161
            https2Server.addHandler(new HttpTestSlowHandler(), "/HttpSlowServerTest/https2/");
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   162
            https2Server.start();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   163
            https2URI = new URI("https://" + https2Server.serverAuthority() + "/HttpSlowServerTest/https2/");
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   164
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   165
            proxy = DigestEchoServer.createHttpsProxyTunnel(
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   166
                    DigestEchoServer.HttpAuthSchemeType.NONE);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   167
            proxyAddress = proxy.getProxyAddress();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   168
            proxySelector = new HttpProxySelector(proxyAddress);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   169
            client = newHttpClient(proxySelector);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   170
            System.out.println("Setup: done");
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   171
        } catch (Exception x) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   172
            tearDown(); throw x;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   173
        } catch (Error e) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   174
            tearDown(); throw e;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   175
        }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   176
    }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   177
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   178
    public static void main(String[] args) throws Exception {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   179
        HttpSlowServerTest test = new HttpSlowServerTest();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   180
        test.setUp();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   181
        long start = System.nanoTime();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   182
        try {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   183
            test.run(args);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   184
        } finally {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   185
            try {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   186
                long elapsed = System.nanoTime() - start;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   187
                System.out.println("*** Elapsed: " + Duration.ofNanos(elapsed));
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   188
            } finally {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   189
                test.tearDown();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   190
            }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   191
        }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   192
    }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   193
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   194
    public void run(String... args) throws Exception {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   195
        List<URI> serverURIs = List.of(http1URI, http2URI, https1URI, https2URI);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   196
        for (int i=0; i<20; i++) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   197
            for (URI base : serverURIs) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   198
                if (base.getScheme().equalsIgnoreCase("https")) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   199
                    URI proxy = i % 1 == 0 ? base.resolve(URI.create("proxy/foo?n="+requestCounter.incrementAndGet()))
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   200
                    : base.resolve(URI.create("direct/foo?n="+requestCounter.incrementAndGet()));
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   201
                    test(proxy);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   202
                }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   203
            }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   204
            for (URI base : serverURIs) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   205
                URI direct = base.resolve(URI.create("direct/foo?n="+requestCounter.incrementAndGet()));
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   206
                test(direct);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   207
            }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   208
        }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   209
        CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   210
    }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   211
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   212
    public void test(URI uri) throws Exception {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   213
        System.out.println("Testing with " + uri);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   214
        pending.add(uri);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   215
        HttpRequest request = HttpRequest.newBuilder(uri).build();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   216
        CompletableFuture<HttpResponse<String>> resp =
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   217
                client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   218
                .whenComplete((r, t) -> this.requestCompleted(request, r, t));
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   219
        futures.add(resp);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   220
    }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   221
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   222
    private void requestCompleted(HttpRequest request, HttpResponse<?> r, Throwable t) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   223
        responseCounter.incrementAndGet();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   224
        pending.remove(request.uri());
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   225
        System.out.println(request + " -> " + (t == null ? r : t)
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   226
                + " [still pending: " + (requestCounter.get() - responseCounter.get()) +"]");
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   227
        if (pending.size() < 5 && requestCounter.get() > 100) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   228
            pending.forEach(u -> System.out.println("\tpending: " + u));
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   229
        }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   230
    }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   231
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   232
    public void tearDown() {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   233
        proxy = stop(proxy, DigestEchoServer.TunnelingProxy::stop);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   234
        http1Server = stop(http1Server, HttpTestServer::stop);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   235
        https1Server = stop(https1Server, HttpTestServer::stop);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   236
        http2Server = stop(http2Server, HttpTestServer::stop);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   237
        https2Server = stop(https2Server, HttpTestServer::stop);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   238
        client = null;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   239
        try {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   240
            executor.awaitTermination(2000, TimeUnit.MILLISECONDS);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   241
        } catch (Throwable x) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   242
        } finally {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   243
            executor.shutdownNow();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   244
        }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   245
        try {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   246
            clientexec.awaitTermination(2000, TimeUnit.MILLISECONDS);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   247
        } catch (Throwable x) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   248
        } finally {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   249
            clientexec.shutdownNow();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   250
        }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   251
        System.out.println("Teardown: done");
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   252
    }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   253
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   254
    private interface Stoppable<T> { public void stop(T service) throws Exception; }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   255
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   256
    static <T>  T stop(T service, Stoppable<T> stop) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   257
        try { if (service != null) stop.stop(service); } catch (Throwable x) { };
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   258
        return null;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   259
    }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   260
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   261
    static class HttpProxySelector extends ProxySelector {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   262
        private static final List<Proxy> NO_PROXY = List.of(Proxy.NO_PROXY);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   263
        private final List<Proxy> proxyList;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   264
        HttpProxySelector(InetSocketAddress proxyAddress) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   265
            proxyList = List.of(new Proxy(Proxy.Type.HTTP, proxyAddress));
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   266
        }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   267
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   268
        @Override
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   269
        public List<Proxy> select(URI uri) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   270
            // our proxy only supports tunneling
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   271
            if (uri.getScheme().equalsIgnoreCase("https")) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   272
                if (uri.getPath().contains("/proxy/")) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   273
                    return proxyList;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   274
                }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   275
            }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   276
            return NO_PROXY;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   277
        }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   278
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   279
        @Override
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   280
        public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   281
            System.err.println("Connection to proxy failed: " + ioe);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   282
            System.err.println("Proxy: " + sa);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   283
            System.err.println("\tURI: " + uri);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   284
            ioe.printStackTrace();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   285
        }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   286
    }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   287
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   288
    public static class HttpTestSlowHandler implements HttpTestHandler {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   289
        static final AtomicLong respCounter = new AtomicLong();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   290
        @Override
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   291
        public void handle(HttpTestExchange t) throws IOException {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   292
            try (InputStream is = t.getRequestBody();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   293
                 OutputStream os = t.getResponseBody()) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   294
                byte[] bytes = is.readAllBytes();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   295
                assert bytes.length == 0;
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   296
                URI u = t.getRequestURI();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   297
                long responseID = Long.parseLong(u.getQuery().substring(2));
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   298
                System.out.println("Server " + t.getRequestURI() + " sending response " + responseID);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   299
                t.sendResponseHeaders(200, -1);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   300
                for (String part : data) {
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   301
                    bytes = part.getBytes(StandardCharsets.UTF_8);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   302
                    os.write(bytes);
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   303
                    os.flush();
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   304
                    System.out.println("\tresp:" + responseID + ": wrote " + bytes.length + " bytes");
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   305
                    // wait...
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   306
                    try { Thread.sleep(300); } catch (InterruptedException x) {};
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   307
                }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   308
                System.out.println("\tresp:" + responseID + ": done");
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   309
            }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   310
        }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   311
    }
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   312
6b6bf0de534b 8231449: HttpClient’s client ssl certificate authentication seems to be broken.
dfuchs
parents:
diff changeset
   313
}