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();
   }