author | dfuchs |
Wed, 23 Oct 2019 15:54:39 +0100 | |
changeset 58758 | 2b13d126a2d8 |
permissions | -rw-r--r-- |
58758
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
1 |
/* |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
2 |
* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
4 |
* |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
5 |
* This code is free software; you can redistribute it and/or modify it |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation. |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
8 |
* |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
9 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
10 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
11 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
12 |
* version 2 for more details (a copy is included in the LICENSE file that |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
13 |
* accompanied this code). |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
14 |
* |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
15 |
* You should have received a copy of the GNU General Public License version |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
16 |
* 2 along with this work; if not, write to the Free Software Foundation, |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
17 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
18 |
* |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
19 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
20 |
* or visit www.oracle.com if you need additional information or have any |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
21 |
* questions. |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
22 |
*/ |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
23 |
import com.sun.net.httpserver.HttpServer; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
24 |
import com.sun.net.httpserver.HttpsConfigurator; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
25 |
import com.sun.net.httpserver.HttpsServer; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
26 |
import jdk.test.lib.net.SimpleSSLContext; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
27 |
import org.testng.annotations.BeforeClass; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
28 |
import org.testng.annotations.AfterClass; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
29 |
import org.testng.annotations.DataProvider; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
30 |
import org.testng.annotations.Test; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
31 |
import static org.testng.Assert.*; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
32 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
33 |
import javax.net.ssl.SSLContext; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
34 |
import java.io.IOException; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
35 |
import java.io.InputStream; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
36 |
import java.io.OutputStream; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
37 |
import java.net.InetAddress; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
38 |
import java.net.InetSocketAddress; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
39 |
import java.net.Proxy; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
40 |
import java.net.ProxySelector; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
41 |
import java.net.SocketAddress; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
42 |
import java.net.URI; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
43 |
import java.net.URISyntaxException; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
44 |
import java.net.http.HttpClient; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
45 |
import java.net.http.HttpRequest; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
46 |
import java.net.http.HttpResponse; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
47 |
import java.nio.charset.StandardCharsets; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
48 |
import java.util.List; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
49 |
import java.util.Map; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
50 |
import java.util.Random; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
51 |
import java.util.Set; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
52 |
import java.util.concurrent.CompletableFuture; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
53 |
import java.util.concurrent.CopyOnWriteArrayList; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
54 |
import java.util.concurrent.CopyOnWriteArraySet; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
55 |
import java.util.concurrent.ExecutorService; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
56 |
import java.util.concurrent.LinkedBlockingQueue; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
57 |
import java.util.concurrent.ThreadPoolExecutor; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
58 |
import java.util.concurrent.TimeUnit; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
59 |
import java.util.concurrent.atomic.AtomicLong; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
60 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
61 |
/** |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
62 |
* @test |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
63 |
* @bug 8232625 |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
64 |
* @summary This test verifies that the HttpClient works correctly when redirecting a post request. |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
65 |
* @library /test/lib http2/server |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
66 |
* @build jdk.test.lib.net.SimpleSSLContext HttpServerAdapters DigestEchoServer HttpRedirectTest |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
67 |
* @modules java.net.http/jdk.internal.net.http.common |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
68 |
* java.net.http/jdk.internal.net.http.frame |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
69 |
* java.net.http/jdk.internal.net.http.hpack |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
70 |
* java.logging |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
71 |
* java.base/sun.net.www.http |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
72 |
* java.base/sun.net.www |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
73 |
* java.base/sun.net |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
74 |
* @run testng/othervm -Dtest.requiresHost=true |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
75 |
* -Djdk.httpclient.HttpClient.log=headers |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
76 |
* -Djdk.internal.httpclient.debug=false |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
77 |
* HttpRedirectTest |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
78 |
* |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
79 |
*/ |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
80 |
public class HttpRedirectTest implements HttpServerAdapters { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
81 |
static final String GET_RESPONSE_BODY = "Lorem ipsum dolor sit amet"; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
82 |
static final String REQUEST_BODY = "Here it goes"; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
83 |
static final SSLContext context; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
84 |
static { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
85 |
try { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
86 |
context = new SimpleSSLContext().get(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
87 |
SSLContext.setDefault(context); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
88 |
} catch (Exception x) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
89 |
throw new ExceptionInInitializerError(x); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
90 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
91 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
92 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
93 |
final AtomicLong requestCounter = new AtomicLong(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
94 |
final AtomicLong responseCounter = new AtomicLong(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
95 |
HttpTestServer http1Server; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
96 |
HttpTestServer http2Server; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
97 |
HttpTestServer https1Server; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
98 |
HttpTestServer https2Server; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
99 |
DigestEchoServer.TunnelingProxy proxy; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
100 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
101 |
URI http1URI; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
102 |
URI https1URI; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
103 |
URI http2URI; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
104 |
URI https2URI; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
105 |
InetSocketAddress proxyAddress; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
106 |
ProxySelector proxySelector; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
107 |
HttpClient client; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
108 |
List<CompletableFuture<?>> futures = new CopyOnWriteArrayList<>(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
109 |
Set<URI> pending = new CopyOnWriteArraySet<>(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
110 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
111 |
final ExecutorService executor = new ThreadPoolExecutor(12, 60, 10, |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
112 |
TimeUnit.SECONDS, new LinkedBlockingQueue<>()); // Shared by HTTP/1.1 servers |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
113 |
final ExecutorService clientexec = new ThreadPoolExecutor(6, 12, 1, |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
114 |
TimeUnit.SECONDS, new LinkedBlockingQueue<>()); // Used by the client |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
115 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
116 |
public HttpClient newHttpClient(ProxySelector ps) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
117 |
HttpClient.Builder builder = HttpClient |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
118 |
.newBuilder() |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
119 |
.sslContext(context) |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
120 |
.executor(clientexec) |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
121 |
.followRedirects(HttpClient.Redirect.ALWAYS) |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
122 |
.proxy(ps); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
123 |
return builder.build(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
124 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
125 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
126 |
@DataProvider(name="uris") |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
127 |
Object[][] testURIs() throws URISyntaxException { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
128 |
List<URI> uris = List.of( |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
129 |
http1URI.resolve("direct/orig/"), |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
130 |
https1URI.resolve("direct/orig/"), |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
131 |
https1URI.resolve("proxy/orig/"), |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
132 |
http2URI.resolve("direct/orig/"), |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
133 |
https2URI.resolve("direct/orig/"), |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
134 |
https2URI.resolve("proxy/orig/")); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
135 |
List<Map.Entry<Integer, String>> redirects = List.of( |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
136 |
Map.entry(301, "GET"), |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
137 |
Map.entry(308, "POST"), |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
138 |
Map.entry(302, "GET"), |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
139 |
Map.entry(303, "GET"), |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
140 |
Map.entry(307, "POST"), |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
141 |
Map.entry(300, "DO_NOT_FOLLOW"), |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
142 |
Map.entry(304, "DO_NOT_FOLLOW"), |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
143 |
Map.entry(305, "DO_NOT_FOLLOW"), |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
144 |
Map.entry(306, "DO_NOT_FOLLOW"), |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
145 |
Map.entry(309, "DO_NOT_FOLLOW"), |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
146 |
Map.entry(new Random().nextInt(90) + 310, "DO_NOT_FOLLOW") |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
147 |
); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
148 |
Object[][] tests = new Object[redirects.size() * uris.size()][3]; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
149 |
int count = 0; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
150 |
for (int i=0; i < uris.size(); i++) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
151 |
URI u = uris.get(i); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
152 |
for (int j=0; j < redirects.size() ; j++) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
153 |
int code = redirects.get(j).getKey(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
154 |
String m = redirects.get(j).getValue(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
155 |
tests[count][0] = u.resolve(code +"/"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
156 |
tests[count][1] = code; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
157 |
tests[count][2] = m; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
158 |
count++; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
159 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
160 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
161 |
return tests; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
162 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
163 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
164 |
@BeforeClass |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
165 |
public void setUp() throws Exception { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
166 |
try { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
167 |
InetSocketAddress sa = new InetSocketAddress(InetAddress.getLoopbackAddress(), 0); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
168 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
169 |
// HTTP/1.1 |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
170 |
HttpServer server1 = HttpServer.create(sa, 0); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
171 |
server1.setExecutor(executor); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
172 |
http1Server = HttpTestServer.of(server1); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
173 |
http1Server.addHandler(new HttpTestRedirectHandler("http", http1Server), |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
174 |
"/HttpRedirectTest/http1/"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
175 |
http1Server.start(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
176 |
http1URI = new URI("http://" + http1Server.serverAuthority() + "/HttpRedirectTest/http1/"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
177 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
178 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
179 |
// HTTPS/1.1 |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
180 |
HttpsServer sserver1 = HttpsServer.create(sa, 100); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
181 |
sserver1.setExecutor(executor); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
182 |
sserver1.setHttpsConfigurator(new HttpsConfigurator(context)); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
183 |
https1Server = HttpTestServer.of(sserver1); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
184 |
https1Server.addHandler(new HttpTestRedirectHandler("https", https1Server), |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
185 |
"/HttpRedirectTest/https1/"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
186 |
https1Server.start(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
187 |
https1URI = new URI("https://" + https1Server.serverAuthority() + "/HttpRedirectTest/https1/"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
188 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
189 |
// HTTP/2.0 |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
190 |
http2Server = HttpTestServer.of( |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
191 |
new Http2TestServer("localhost", false, 0)); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
192 |
http2Server.addHandler(new HttpTestRedirectHandler("http", http2Server), |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
193 |
"/HttpRedirectTest/http2/"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
194 |
http2Server.start(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
195 |
http2URI = new URI("http://" + http2Server.serverAuthority() + "/HttpRedirectTest/http2/"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
196 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
197 |
// HTTPS/2.0 |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
198 |
https2Server = HttpTestServer.of( |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
199 |
new Http2TestServer("localhost", true, 0)); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
200 |
https2Server.addHandler(new HttpTestRedirectHandler("https", https2Server), |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
201 |
"/HttpRedirectTest/https2/"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
202 |
https2Server.start(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
203 |
https2URI = new URI("https://" + https2Server.serverAuthority() + "/HttpRedirectTest/https2/"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
204 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
205 |
proxy = DigestEchoServer.createHttpsProxyTunnel( |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
206 |
DigestEchoServer.HttpAuthSchemeType.NONE); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
207 |
proxyAddress = proxy.getProxyAddress(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
208 |
proxySelector = new HttpProxySelector(proxyAddress); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
209 |
client = newHttpClient(proxySelector); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
210 |
System.out.println("Setup: done"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
211 |
} catch (Exception x) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
212 |
tearDown(); throw x; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
213 |
} catch (Error e) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
214 |
tearDown(); throw e; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
215 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
216 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
217 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
218 |
private void testNonIdempotent(URI u, HttpRequest request, |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
219 |
int code, String method) throws Exception { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
220 |
System.out.println("Testing with " + u); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
221 |
CompletableFuture<HttpResponse<String>> respCf = |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
222 |
client.sendAsync(request, HttpResponse.BodyHandlers.ofString()); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
223 |
HttpResponse<String> resp = respCf.join(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
224 |
if (method.equals("DO_NOT_FOLLOW")) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
225 |
assertEquals(resp.statusCode(), code, u + ": status code"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
226 |
} else { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
227 |
assertEquals(resp.statusCode(), 200, u + ": status code"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
228 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
229 |
if (method.equals("POST")) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
230 |
assertEquals(resp.body(), REQUEST_BODY, u + ": body"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
231 |
} else if (code == 304) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
232 |
assertEquals(resp.body(), "", u + ": body"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
233 |
} else if (method.equals("DO_NOT_FOLLOW")) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
234 |
assertNotEquals(resp.body(), GET_RESPONSE_BODY, u + ": body"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
235 |
assertNotEquals(resp.body(), REQUEST_BODY, u + ": body"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
236 |
} else { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
237 |
assertEquals(resp.body(), GET_RESPONSE_BODY, u + ": body"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
238 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
239 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
240 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
241 |
public void testIdempotent(URI u, HttpRequest request, |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
242 |
int code, String method) throws Exception { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
243 |
CompletableFuture<HttpResponse<String>> respCf = |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
244 |
client.sendAsync(request, HttpResponse.BodyHandlers.ofString()); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
245 |
HttpResponse<String> resp = respCf.join(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
246 |
if (method.equals("DO_NOT_FOLLOW")) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
247 |
assertEquals(resp.statusCode(), code, u + ": status code"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
248 |
} else { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
249 |
assertEquals(resp.statusCode(), 200, u + ": status code"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
250 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
251 |
if (method.equals("POST")) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
252 |
assertEquals(resp.body(), REQUEST_BODY, u + ": body"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
253 |
} else if (code == 304) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
254 |
assertEquals(resp.body(), "", u + ": body"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
255 |
} else if (method.equals("DO_NOT_FOLLOW")) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
256 |
assertNotEquals(resp.body(), GET_RESPONSE_BODY, u + ": body"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
257 |
assertNotEquals(resp.body(), REQUEST_BODY, u + ": body"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
258 |
} else if (code == 303) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
259 |
assertEquals(resp.body(), GET_RESPONSE_BODY, u + ": body"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
260 |
} else { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
261 |
assertEquals(resp.body(), REQUEST_BODY, u + ": body"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
262 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
263 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
264 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
265 |
@Test(dataProvider = "uris") |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
266 |
public void testPOST(URI uri, int code, String method) throws Exception { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
267 |
URI u = uri.resolve("foo?n=" + requestCounter.incrementAndGet()); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
268 |
HttpRequest request = HttpRequest.newBuilder(u) |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
269 |
.POST(HttpRequest.BodyPublishers.ofString(REQUEST_BODY)).build(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
270 |
// POST is not considered idempotent. |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
271 |
testNonIdempotent(u, request, code, method); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
272 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
273 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
274 |
@Test(dataProvider = "uris") |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
275 |
public void testPUT(URI uri, int code, String method) throws Exception { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
276 |
URI u = uri.resolve("foo?n=" + requestCounter.incrementAndGet()); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
277 |
System.out.println("Testing with " + u); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
278 |
HttpRequest request = HttpRequest.newBuilder(u) |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
279 |
.PUT(HttpRequest.BodyPublishers.ofString(REQUEST_BODY)).build(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
280 |
// PUT is considered idempotent. |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
281 |
testIdempotent(u, request, code, method); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
282 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
283 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
284 |
@Test(dataProvider = "uris") |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
285 |
public void testFoo(URI uri, int code, String method) throws Exception { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
286 |
URI u = uri.resolve("foo?n=" + requestCounter.incrementAndGet()); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
287 |
System.out.println("Testing with " + u); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
288 |
HttpRequest request = HttpRequest.newBuilder(u) |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
289 |
.method("FOO", |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
290 |
HttpRequest.BodyPublishers.ofString(REQUEST_BODY)).build(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
291 |
// FOO is considered idempotent. |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
292 |
testIdempotent(u, request, code, method); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
293 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
294 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
295 |
@Test(dataProvider = "uris") |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
296 |
public void testGet(URI uri, int code, String method) throws Exception { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
297 |
URI u = uri.resolve("foo?n=" + requestCounter.incrementAndGet()); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
298 |
System.out.println("Testing with " + u); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
299 |
HttpRequest request = HttpRequest.newBuilder(u) |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
300 |
.method("GET", |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
301 |
HttpRequest.BodyPublishers.ofString(REQUEST_BODY)).build(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
302 |
CompletableFuture<HttpResponse<String>> respCf = |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
303 |
client.sendAsync(request, HttpResponse.BodyHandlers.ofString()); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
304 |
HttpResponse<String> resp = respCf.join(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
305 |
// body will be preserved except for 304 and 303: this is a GET. |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
306 |
if (method.equals("DO_NOT_FOLLOW")) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
307 |
assertEquals(resp.statusCode(), code, u + ": status code"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
308 |
} else { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
309 |
assertEquals(resp.statusCode(), 200, u + ": status code"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
310 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
311 |
if (code == 304) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
312 |
assertEquals(resp.body(), "", u + ": body"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
313 |
} else if (method.equals("DO_NOT_FOLLOW")) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
314 |
assertNotEquals(resp.body(), GET_RESPONSE_BODY, u + ": body"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
315 |
assertNotEquals(resp.body(), REQUEST_BODY, u + ": body"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
316 |
} else if (code == 303) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
317 |
assertEquals(resp.body(), GET_RESPONSE_BODY, u + ": body"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
318 |
} else { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
319 |
assertEquals(resp.body(), REQUEST_BODY, u + ": body"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
320 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
321 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
322 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
323 |
@AfterClass |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
324 |
public void tearDown() { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
325 |
proxy = stop(proxy, DigestEchoServer.TunnelingProxy::stop); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
326 |
http1Server = stop(http1Server, HttpTestServer::stop); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
327 |
https1Server = stop(https1Server, HttpTestServer::stop); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
328 |
http2Server = stop(http2Server, HttpTestServer::stop); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
329 |
https2Server = stop(https2Server, HttpTestServer::stop); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
330 |
client = null; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
331 |
try { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
332 |
executor.awaitTermination(2000, TimeUnit.MILLISECONDS); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
333 |
} catch (Throwable x) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
334 |
} finally { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
335 |
executor.shutdownNow(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
336 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
337 |
try { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
338 |
clientexec.awaitTermination(2000, TimeUnit.MILLISECONDS); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
339 |
} catch (Throwable x) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
340 |
} finally { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
341 |
clientexec.shutdownNow(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
342 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
343 |
System.out.println("Teardown: done"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
344 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
345 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
346 |
private interface Stoppable<T> { public void stop(T service) throws Exception; } |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
347 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
348 |
static <T> T stop(T service, Stoppable<T> stop) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
349 |
try { if (service != null) stop.stop(service); } catch (Throwable x) { }; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
350 |
return null; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
351 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
352 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
353 |
static class HttpProxySelector extends ProxySelector { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
354 |
private static final List<Proxy> NO_PROXY = List.of(Proxy.NO_PROXY); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
355 |
private final List<Proxy> proxyList; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
356 |
HttpProxySelector(InetSocketAddress proxyAddress) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
357 |
proxyList = List.of(new Proxy(Proxy.Type.HTTP, proxyAddress)); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
358 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
359 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
360 |
@Override |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
361 |
public List<Proxy> select(URI uri) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
362 |
// our proxy only supports tunneling |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
363 |
if (uri.getScheme().equalsIgnoreCase("https")) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
364 |
if (uri.getPath().contains("/proxy/")) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
365 |
return proxyList; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
366 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
367 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
368 |
return NO_PROXY; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
369 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
370 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
371 |
@Override |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
372 |
public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
373 |
System.err.println("Connection to proxy failed: " + ioe); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
374 |
System.err.println("Proxy: " + sa); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
375 |
System.err.println("\tURI: " + uri); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
376 |
ioe.printStackTrace(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
377 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
378 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
379 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
380 |
public static class HttpTestRedirectHandler implements HttpTestHandler { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
381 |
static final AtomicLong respCounter = new AtomicLong(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
382 |
final String scheme; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
383 |
final HttpTestServer server; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
384 |
HttpTestRedirectHandler(String scheme, HttpTestServer server) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
385 |
this.scheme = scheme; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
386 |
this.server = server; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
387 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
388 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
389 |
@Override |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
390 |
public void handle(HttpTestExchange t) throws IOException { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
391 |
try (InputStream is = t.getRequestBody()) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
392 |
byte[] bytes = is.readAllBytes(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
393 |
URI u = t.getRequestURI(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
394 |
long responseID = Long.parseLong(u.getQuery().substring(2)); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
395 |
String path = u.getPath(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
396 |
int i = path.lastIndexOf('/'); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
397 |
String file = path.substring(i+1); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
398 |
String parent = path.substring(0, i); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
399 |
int code = 200; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
400 |
if (file.equals("foo")) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
401 |
i = parent.lastIndexOf("/"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
402 |
code = Integer.parseInt(parent.substring(i+1)); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
403 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
404 |
String response; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
405 |
if (code == 200) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
406 |
if (t.getRequestMethod().equals("GET")) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
407 |
if (bytes.length == 0) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
408 |
response = GET_RESPONSE_BODY; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
409 |
} else { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
410 |
response = new String(bytes, StandardCharsets.UTF_8); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
411 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
412 |
} else if (t.getRequestMethod().equals("POST")) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
413 |
response = new String(bytes, StandardCharsets.UTF_8); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
414 |
} else { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
415 |
response = new String(bytes, StandardCharsets.UTF_8); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
416 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
417 |
} else if (code < 300 || code > 399) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
418 |
response = "Unexpected code: " + code; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
419 |
code = 400; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
420 |
} else { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
421 |
try { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
422 |
URI reloc = new URI(scheme, server.serverAuthority(), parent + "/bar", u.getQuery(), null); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
423 |
t.getResponseHeaders().addHeader("Location", reloc.toASCIIString()); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
424 |
if (code != 304) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
425 |
response = "Code: " + code; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
426 |
} else response = null; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
427 |
} catch (URISyntaxException x) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
428 |
x.printStackTrace(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
429 |
x.printStackTrace(System.out); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
430 |
code = 400; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
431 |
response = x.toString(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
432 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
433 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
434 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
435 |
System.out.println("Server " + t.getRequestURI() + " sending response " + responseID); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
436 |
System.out.println("code: " + code + " body: " + response); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
437 |
t.sendResponseHeaders(code, code == 304 ? 0: -1); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
438 |
if (code != 304) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
439 |
try (OutputStream os = t.getResponseBody()) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
440 |
bytes = response.getBytes(StandardCharsets.UTF_8); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
441 |
os.write(bytes); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
442 |
os.flush(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
443 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
444 |
} else { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
445 |
bytes = new byte[0]; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
446 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
447 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
448 |
System.out.println("\tresp:" + responseID + ": wrote " + bytes.length + " bytes"); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
449 |
} catch (Throwable e) { |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
450 |
e.printStackTrace(); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
451 |
e.printStackTrace(System.out); |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
452 |
throw e; |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
453 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
454 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
455 |
} |
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
456 |
|
2b13d126a2d8
8232625: HttpClient redirect policy should be more conservative
dfuchs
parents:
diff
changeset
|
457 |
} |