SOLR-599: Better thread clean-up in unit tests (#2259)
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientProxyTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientProxyTest.java
index fd9ef53..6b48b17 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientProxyTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientProxyTest.java
@@ -17,7 +17,11 @@
package org.apache.solr.client.solrj.impl;
import com.carrotsearch.randomizedtesting.RandomizedTest;
+import java.util.Arrays;
+import java.util.Objects;
import java.util.Properties;
+import java.util.Set;
+import java.util.stream.Collectors;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.cloud.SocketProxy;
@@ -85,6 +89,16 @@
}
// This is a workaround for java.net.http.HttpClient not implementing closeable/autoclosable
// until Java 21.
+ Thread[] threads = new Thread[Thread.currentThread().getThreadGroup().activeCount()];
+ Thread.currentThread().getThreadGroup().enumerate(threads);
+ Set<Thread> tSet =
+ Arrays.stream(threads)
+ .filter(Objects::nonNull)
+ .filter(t -> t.getName().startsWith("HttpClient-"))
+ .collect(Collectors.toSet());
+ for (Thread t : tSet) {
+ t.interrupt();
+ }
System.gc();
}
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpJdkSolrClientTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpJdkSolrClientTest.java
index 5c61492..d9e9e7a 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpJdkSolrClientTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpJdkSolrClientTest.java
@@ -24,9 +24,13 @@
import java.net.http.HttpClient;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
+import java.util.Arrays;
import java.util.Collections;
+import java.util.Objects;
+import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLEngine;
@@ -73,6 +77,16 @@
@After
public void workaroundToReleaseThreads_noClosableUntilJava21() {
+ Thread[] threads = new Thread[Thread.currentThread().getThreadGroup().activeCount()];
+ Thread.currentThread().getThreadGroup().enumerate(threads);
+ Set<Thread> tSet =
+ Arrays.stream(threads)
+ .filter(Objects::nonNull)
+ .filter(t -> t.getName().startsWith("HttpClient-"))
+ .collect(Collectors.toSet());
+ for (Thread t : tSet) {
+ t.interrupt();
+ }
System.gc();
}