14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 package jdk.internal.net.http;
25
26 import java.io.IOException;
27 import java.lang.management.ManagementFactory;
28 import java.net.Authenticator;
29 import java.net.CookieHandler;
30 import java.net.InetSocketAddress;
31 import java.net.ProxySelector;
32 import java.nio.ByteBuffer;
33 import java.nio.channels.SocketChannel;
34 import java.util.Arrays;
35 import java.util.List;
36 import java.util.Optional;
37 import java.util.Random;
38 import java.util.concurrent.CompletableFuture;
39 import java.util.concurrent.Executor;
40 import java.util.concurrent.Flow;
41 import java.util.stream.IntStream;
42 import java.time.Instant;
43 import java.time.temporal.ChronoUnit;
44 import javax.net.ssl.SSLContext;
45 import javax.net.ssl.SSLParameters;
46 import java.net.http.HttpClient;
47 import java.net.http.HttpRequest;
48 import java.net.http.HttpResponse;
49 import jdk.internal.net.http.common.FlowTube;
50
51 /**
52 * @summary Verifies that the ConnectionPool correctly handle
53 * connection deadlines and purges the right connections
267 final FlowTubeStub flow;
268 volatile boolean closed;
269
270 // All these return something
271 @Override boolean connected() {return !closed;}
272 @Override boolean isSecure() {return secured;}
273 @Override boolean isProxied() {return proxy!=null;}
274 @Override ConnectionPool.CacheKey cacheKey() {return key;}
275 @Override
276 public void close() {
277 closed=true;
278 System.out.println("closed: " + this);
279 }
280 @Override
281 public String toString() {
282 return "HttpConnectionStub: " + address + " proxy: " + proxy;
283 }
284
285 // All these throw errors
286 @Override public HttpPublisher publisher() {return error();}
287 @Override public CompletableFuture<Void> connectAsync() {return error();}
288 @Override SocketChannel channel() {return error();}
289 @Override
290 FlowTube getConnectionFlow() {return flow;}
291 }
292 // Emulates an HttpClient that has a strong reference to its connection pool.
293 static class HttpClientStub extends HttpClient {
294 public HttpClientStub(ConnectionPool pool) {
295 this.pool = pool;
296 }
297 final ConnectionPool pool;
298 @Override public Optional<CookieHandler> cookieHandler() {return error();}
299 @Override public HttpClient.Redirect followRedirects() {return error();}
300 @Override public Optional<ProxySelector> proxy() {return error();}
301 @Override public SSLContext sslContext() {return error();}
302 @Override public SSLParameters sslParameters() {return error();}
303 @Override public Optional<Authenticator> authenticator() {return error();}
304 @Override public HttpClient.Version version() {return HttpClient.Version.HTTP_1_1;}
305 @Override public Optional<Executor> executor() {return error();}
306 @Override
307 public <T> HttpResponse<T> send(HttpRequest req,
308 HttpResponse.BodyHandler<T> responseBodyHandler)
309 throws IOException, InterruptedException {
310 return error();
311 }
312 @Override
313 public <T> CompletableFuture<HttpResponse<T>> sendAsync(HttpRequest req,
314 HttpResponse.BodyHandler<T> responseBodyHandler) {
315 return error();
316 }
317 @Override
318 public <T> CompletableFuture<HttpResponse<T>> sendAsync(HttpRequest req,
|
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 package jdk.internal.net.http;
25
26 import java.io.IOException;
27 import java.lang.management.ManagementFactory;
28 import java.net.Authenticator;
29 import java.net.CookieHandler;
30 import java.net.InetSocketAddress;
31 import java.net.ProxySelector;
32 import java.nio.ByteBuffer;
33 import java.nio.channels.SocketChannel;
34 import java.time.Duration;
35 import java.util.Arrays;
36 import java.util.List;
37 import java.util.Optional;
38 import java.util.Random;
39 import java.util.concurrent.CompletableFuture;
40 import java.util.concurrent.Executor;
41 import java.util.concurrent.Flow;
42 import java.util.stream.IntStream;
43 import java.time.Instant;
44 import java.time.temporal.ChronoUnit;
45 import javax.net.ssl.SSLContext;
46 import javax.net.ssl.SSLParameters;
47 import java.net.http.HttpClient;
48 import java.net.http.HttpRequest;
49 import java.net.http.HttpResponse;
50 import jdk.internal.net.http.common.FlowTube;
51
52 /**
53 * @summary Verifies that the ConnectionPool correctly handle
54 * connection deadlines and purges the right connections
268 final FlowTubeStub flow;
269 volatile boolean closed;
270
271 // All these return something
272 @Override boolean connected() {return !closed;}
273 @Override boolean isSecure() {return secured;}
274 @Override boolean isProxied() {return proxy!=null;}
275 @Override ConnectionPool.CacheKey cacheKey() {return key;}
276 @Override
277 public void close() {
278 closed=true;
279 System.out.println("closed: " + this);
280 }
281 @Override
282 public String toString() {
283 return "HttpConnectionStub: " + address + " proxy: " + proxy;
284 }
285
286 // All these throw errors
287 @Override public HttpPublisher publisher() {return error();}
288 @Override public CompletableFuture<Void> connectAsync(Exchange<?> e) {return error();}
289 @Override public CompletableFuture<Void> finishConnect() {return error();}
290 @Override SocketChannel channel() {return error();}
291 @Override
292 FlowTube getConnectionFlow() {return flow;}
293 }
294 // Emulates an HttpClient that has a strong reference to its connection pool.
295 static class HttpClientStub extends HttpClient {
296 public HttpClientStub(ConnectionPool pool) {
297 this.pool = pool;
298 }
299 final ConnectionPool pool;
300 @Override public Optional<CookieHandler> cookieHandler() {return error();}
301 @Override public Optional<Duration> connectTimeout() {return error();}
302 @Override public HttpClient.Redirect followRedirects() {return error();}
303 @Override public Optional<ProxySelector> proxy() {return error();}
304 @Override public SSLContext sslContext() {return error();}
305 @Override public SSLParameters sslParameters() {return error();}
306 @Override public Optional<Authenticator> authenticator() {return error();}
307 @Override public HttpClient.Version version() {return HttpClient.Version.HTTP_1_1;}
308 @Override public Optional<Executor> executor() {return error();}
309 @Override
310 public <T> HttpResponse<T> send(HttpRequest req,
311 HttpResponse.BodyHandler<T> responseBodyHandler)
312 throws IOException, InterruptedException {
313 return error();
314 }
315 @Override
316 public <T> CompletableFuture<HttpResponse<T>> sendAsync(HttpRequest req,
317 HttpResponse.BodyHandler<T> responseBodyHandler) {
318 return error();
319 }
320 @Override
321 public <T> CompletableFuture<HttpResponse<T>> sendAsync(HttpRequest req,
|