From 49d60fee49b9f5f7182dcd1557d9b2f886901100 Mon Sep 17 00:00:00 2001 From: Daniel Fuchs Date: Fri, 20 Jan 2023 09:23:37 +0000 Subject: [PATCH] 8300172: java/net/httpclient/MappingResponseSubscriber.java failed with java.net.ConnectException Reviewed-by: jpai --- .../httpclient/MappingResponseSubscriber.java | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/test/jdk/java/net/httpclient/MappingResponseSubscriber.java b/test/jdk/java/net/httpclient/MappingResponseSubscriber.java index cbe936afe93..b7e6f67564e 100644 --- a/test/jdk/java/net/httpclient/MappingResponseSubscriber.java +++ b/test/jdk/java/net/httpclient/MappingResponseSubscriber.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -62,6 +62,8 @@ import java.net.http.HttpResponse.BodySubscribers; import java.net.http.HttpResponse.BodySubscriber; import java.util.function.Function; import javax.net.ssl.SSLContext; + +import jdk.internal.net.http.common.OperationTrackers.Tracker; import jdk.test.lib.net.SimpleSSLContext; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; @@ -92,6 +94,8 @@ public class MappingResponseSubscriber { // a shared executor helps reduce the amount of threads created by the test static final Executor executor = Executors.newCachedThreadPool(); + static final ReferenceTracker TRACKER = ReferenceTracker.INSTANCE; + @DataProvider(name = "variants") public Object[][] variants() { return new Object[][]{ @@ -130,11 +134,30 @@ public class MappingResponseSubscriber { client = newHttpClient(); HttpRequest req = HttpRequest.newBuilder(URI.create(uri)) - .build(); + .build(); BodyHandler handler = new CRSBodyHandler(); HttpResponse response = client.send(req, handler); byte[] body = response.body(); assertEquals(body, bytes); + + // if sameClient we will reuse the client for the next + // operation, so there's nothing more to do. + if (sameClient) continue; + + // if no error and not same client then wait for the + // client to be GC'ed before performing the nex operation + Tracker tracker = TRACKER.getTracker(client); + client = null; + System.gc(); + AssertionError error = TRACKER.check(tracker, 1500); + if (error != null) throw error; // the client didn't shut down properly + } + if (sameClient) { + Tracker tracker = TRACKER.getTracker(client); + client = null; + System.gc(); + AssertionError error = TRACKER.check(tracker,1500); + if (error != null) throw error; // the client didn't shut down properly } }