diff --git a/src/test/java/com/cloudbees/jenkins/support/CheckFilterTest.java b/src/test/java/com/cloudbees/jenkins/support/CheckFilterTest.java index bac3b0875..2290aef12 100644 --- a/src/test/java/com/cloudbees/jenkins/support/CheckFilterTest.java +++ b/src/test/java/com/cloudbees/jenkins/support/CheckFilterTest.java @@ -78,10 +78,7 @@ public class CheckFilterTest { @After public void stopAgents() throws Exception { - for (var agent : j.jenkins.getNodes()) { - System.err.println("Stopping " + agent); - agent.toComputer().disconnect(null).get(); - } + SupportTestUtils.stopAgents(); } @Test diff --git a/src/test/java/com/cloudbees/jenkins/support/Security2186Test.java b/src/test/java/com/cloudbees/jenkins/support/Security2186Test.java index e374f35e4..ef56304da 100644 --- a/src/test/java/com/cloudbees/jenkins/support/Security2186Test.java +++ b/src/test/java/com/cloudbees/jenkins/support/Security2186Test.java @@ -54,10 +54,7 @@ public void setup() throws Exception { @After public void stopAgents() throws Exception { - for (var agent : j.jenkins.getNodes()) { - System.err.println("Stopping " + agent); - agent.toComputer().disconnect(null).get(); - } + SupportTestUtils.stopAgents(); } @Test diff --git a/src/test/java/com/cloudbees/jenkins/support/SupportActionTest.java b/src/test/java/com/cloudbees/jenkins/support/SupportActionTest.java index e61e27668..78b7bce91 100644 --- a/src/test/java/com/cloudbees/jenkins/support/SupportActionTest.java +++ b/src/test/java/com/cloudbees/jenkins/support/SupportActionTest.java @@ -87,10 +87,7 @@ public void setUp() { @After public void stopAgents() throws Exception { - for (var agent : j.jenkins.getNodes()) { - System.err.println("Stopping " + agent); - agent.toComputer().disconnect(null).get(); - } + SupportTestUtils.stopAgents(); } @Test diff --git a/src/test/java/com/cloudbees/jenkins/support/SupportTestUtils.java b/src/test/java/com/cloudbees/jenkins/support/SupportTestUtils.java index c5393d819..f080b9b2b 100644 --- a/src/test/java/com/cloudbees/jenkins/support/SupportTestUtils.java +++ b/src/test/java/com/cloudbees/jenkins/support/SupportTestUtils.java @@ -20,7 +20,10 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; +import java.nio.file.DirectoryStream; import java.nio.file.Files; +import java.nio.file.LinkOption; +import java.nio.file.Path; import java.util.Map; import java.util.Objects; import java.util.Set; @@ -48,6 +51,7 @@ * @since 2.26 */ public class SupportTestUtils { + private static final Logger LOGGER = Logger.getLogger(SupportTestUtils.class.getName()); /** * Invoke a component, and return the component contents as a String. @@ -337,4 +341,37 @@ public static void testPermissionToDisplayAction( public static boolean isJava8OrBelow() { return System.getProperty("java.specification.version").startsWith("1."); } + + public static void stopAgents() throws Exception { + for (var agent : Jenkins.get().getNodes()) { + LOGGER.info("stopping " + agent); + agent.toComputer().disconnect(null).get(); + } + var dir = Jenkins.get().getRootDir().toPath().resolve("agent-work-dirs"); + for (int i = 0; i < 60; i++) { + try { + delete(dir); + LOGGER.info("successfully deleted " + dir); + return; + } catch (IOException x) { + LOGGER.log(Level.WARNING, "failed to delete " + dir + " on attempt #" + i, x); + Thread.sleep(1000); + } + } + LOGGER.warning("never managed to delete " + dir); + } + + private static void delete(Path p) throws IOException { + LOGGER.info(() -> "deleting " + p); + if (Files.isDirectory(p, LinkOption.NOFOLLOW_LINKS)) { + try (DirectoryStream children = Files.newDirectoryStream(p)) { + for (Path child : children) { + delete(child); + } + } + } + Files.deleteIfExists(p); + } + + private SupportTestUtils() {} } diff --git a/src/test/java/com/cloudbees/jenkins/support/actions/SupportComputerActionTest.java b/src/test/java/com/cloudbees/jenkins/support/actions/SupportComputerActionTest.java index 6743156c5..832bd94d0 100644 --- a/src/test/java/com/cloudbees/jenkins/support/actions/SupportComputerActionTest.java +++ b/src/test/java/com/cloudbees/jenkins/support/actions/SupportComputerActionTest.java @@ -29,10 +29,7 @@ public class SupportComputerActionTest { @After public void stopAgents() throws Exception { - for (var agent : j.jenkins.getNodes()) { - System.err.println("Stopping " + agent); - agent.toComputer().disconnect(null).get(); - } + SupportTestUtils.stopAgents(); } @Test diff --git a/src/test/java/com/cloudbees/jenkins/support/configfiles/AgentsConfigFileTest.java b/src/test/java/com/cloudbees/jenkins/support/configfiles/AgentsConfigFileTest.java index 09b136764..c913dcc8e 100644 --- a/src/test/java/com/cloudbees/jenkins/support/configfiles/AgentsConfigFileTest.java +++ b/src/test/java/com/cloudbees/jenkins/support/configfiles/AgentsConfigFileTest.java @@ -48,10 +48,7 @@ public class AgentsConfigFileTest { @After public void stopAgents() throws Exception { - for (var agent : j.jenkins.getNodes()) { - System.err.println("Stopping " + agent); - agent.toComputer().disconnect(null).get(); - } + SupportTestUtils.stopAgents(); } @Test diff --git a/src/test/java/com/cloudbees/jenkins/support/filter/SensitiveContentFilterTest.java b/src/test/java/com/cloudbees/jenkins/support/filter/SensitiveContentFilterTest.java index 73b29c77e..987a727aa 100644 --- a/src/test/java/com/cloudbees/jenkins/support/filter/SensitiveContentFilterTest.java +++ b/src/test/java/com/cloudbees/jenkins/support/filter/SensitiveContentFilterTest.java @@ -25,6 +25,7 @@ import static org.assertj.core.api.Assertions.assertThat; +import com.cloudbees.jenkins.support.SupportTestUtils; import hudson.model.FreeStyleProject; import hudson.model.ListView; import hudson.model.User; @@ -42,10 +43,7 @@ public class SensitiveContentFilterTest { @After public void stopAgents() throws Exception { - for (var agent : j.jenkins.getNodes()) { - System.err.println("Stopping " + agent); - agent.toComputer().disconnect(null).get(); - } + SupportTestUtils.stopAgents(); } @Issue("JENKINS-21670") diff --git a/src/test/java/com/cloudbees/jenkins/support/impl/AboutJenkinsTest.java b/src/test/java/com/cloudbees/jenkins/support/impl/AboutJenkinsTest.java index 48b4eb6c5..265198f0f 100644 --- a/src/test/java/com/cloudbees/jenkins/support/impl/AboutJenkinsTest.java +++ b/src/test/java/com/cloudbees/jenkins/support/impl/AboutJenkinsTest.java @@ -34,10 +34,7 @@ public class AboutJenkinsTest { @After public void stopAgents() throws Exception { - for (var agent : j.jenkins.getNodes()) { - System.err.println("Stopping " + agent); - agent.toComputer().disconnect(null).get(); - } + SupportTestUtils.stopAgents(); } @Test diff --git a/src/test/java/com/cloudbees/jenkins/support/impl/DumpExportTableTest.java b/src/test/java/com/cloudbees/jenkins/support/impl/DumpExportTableTest.java index 51f5c8f48..c4639ef2e 100644 --- a/src/test/java/com/cloudbees/jenkins/support/impl/DumpExportTableTest.java +++ b/src/test/java/com/cloudbees/jenkins/support/impl/DumpExportTableTest.java @@ -26,10 +26,7 @@ public class DumpExportTableTest { @After public void stopAgents() throws Exception { - for (var agent : j.jenkins.getNodes()) { - System.err.println("Stopping " + agent); - agent.toComputer().disconnect(null).get(); - } + SupportTestUtils.stopAgents(); } @Test diff --git a/src/test/java/com/cloudbees/jenkins/support/impl/FileDescriptorLimitTest.java b/src/test/java/com/cloudbees/jenkins/support/impl/FileDescriptorLimitTest.java index 7f224f877..8d33e60c3 100644 --- a/src/test/java/com/cloudbees/jenkins/support/impl/FileDescriptorLimitTest.java +++ b/src/test/java/com/cloudbees/jenkins/support/impl/FileDescriptorLimitTest.java @@ -47,10 +47,7 @@ public class FileDescriptorLimitTest { @After public void stopAgents() throws Exception { - for (var agent : j.jenkins.getNodes()) { - System.err.println("Stopping " + agent); - agent.toComputer().disconnect(null).get(); - } + SupportTestUtils.stopAgents(); } @Test diff --git a/src/test/java/com/cloudbees/jenkins/support/impl/NodeExecutorsTest.java b/src/test/java/com/cloudbees/jenkins/support/impl/NodeExecutorsTest.java index 5e5c4561a..304314c40 100644 --- a/src/test/java/com/cloudbees/jenkins/support/impl/NodeExecutorsTest.java +++ b/src/test/java/com/cloudbees/jenkins/support/impl/NodeExecutorsTest.java @@ -41,10 +41,7 @@ public class NodeExecutorsTest { @After public void stopAgents() throws Exception { - for (var agent : j.jenkins.getNodes()) { - System.err.println("Stopping " + agent); - agent.toComputer().disconnect(null).get(); - } + SupportTestUtils.stopAgents(); } @Test diff --git a/src/test/java/com/cloudbees/jenkins/support/impl/NodeRemoteDirectoryComponentTest.java b/src/test/java/com/cloudbees/jenkins/support/impl/NodeRemoteDirectoryComponentTest.java index 6f5c0e92c..471e2f655 100644 --- a/src/test/java/com/cloudbees/jenkins/support/impl/NodeRemoteDirectoryComponentTest.java +++ b/src/test/java/com/cloudbees/jenkins/support/impl/NodeRemoteDirectoryComponentTest.java @@ -22,10 +22,7 @@ public class NodeRemoteDirectoryComponentTest { @After public void stopAgents() throws Exception { - for (var agent : j.jenkins.getNodes()) { - System.err.println("Stopping " + agent); - agent.toComputer().disconnect(null).get(); - } + SupportTestUtils.stopAgents(); } /* diff --git a/src/test/java/com/cloudbees/jenkins/support/impl/SlaveCommandStatisticsTest.java b/src/test/java/com/cloudbees/jenkins/support/impl/SlaveCommandStatisticsTest.java index a329272f3..72388714b 100644 --- a/src/test/java/com/cloudbees/jenkins/support/impl/SlaveCommandStatisticsTest.java +++ b/src/test/java/com/cloudbees/jenkins/support/impl/SlaveCommandStatisticsTest.java @@ -60,10 +60,7 @@ public class SlaveCommandStatisticsTest { @After public void stopAgents() throws Exception { - for (var agent : j.jenkins.getNodes()) { - System.err.println("Stopping " + agent); - agent.toComputer().disconnect(null).get(); - } + SupportTestUtils.stopAgents(); } @Test diff --git a/src/test/java/com/cloudbees/jenkins/support/impl/SlaveLaunchLogsRestartTest.java b/src/test/java/com/cloudbees/jenkins/support/impl/SlaveLaunchLogsRestartTest.java index aacdf4feb..97a7913e5 100644 --- a/src/test/java/com/cloudbees/jenkins/support/impl/SlaveLaunchLogsRestartTest.java +++ b/src/test/java/com/cloudbees/jenkins/support/impl/SlaveLaunchLogsRestartTest.java @@ -59,10 +59,7 @@ public void twoAgents() throws Throwable { allOf( containsString("Z agent1] Remoting version: "), containsString("Z agent2] Remoting version: "))); - for (var agent : r.jenkins.getNodes()) { - System.err.println("Stopping " + agent); - agent.toComputer().disconnect(null).get(); - } + SupportTestUtils.stopAgents(); }); } } diff --git a/src/test/java/com/cloudbees/jenkins/support/impl/SlaveLaunchLogsTest.java b/src/test/java/com/cloudbees/jenkins/support/impl/SlaveLaunchLogsTest.java index bbf085cff..38aa0c672 100644 --- a/src/test/java/com/cloudbees/jenkins/support/impl/SlaveLaunchLogsTest.java +++ b/src/test/java/com/cloudbees/jenkins/support/impl/SlaveLaunchLogsTest.java @@ -46,10 +46,7 @@ public class SlaveLaunchLogsTest { @After public void stopAgents() throws Exception { - for (var agent : j.jenkins.getNodes()) { - System.err.println("Stopping " + agent); - agent.toComputer().disconnect(null).get(); - } + SupportTestUtils.stopAgents(); } @Test diff --git a/src/test/java/com/cloudbees/jenkins/support/impl/SmartLogCleanerTest.java b/src/test/java/com/cloudbees/jenkins/support/impl/SmartLogCleanerTest.java index 29f118844..66a4d0a4d 100644 --- a/src/test/java/com/cloudbees/jenkins/support/impl/SmartLogCleanerTest.java +++ b/src/test/java/com/cloudbees/jenkins/support/impl/SmartLogCleanerTest.java @@ -4,6 +4,7 @@ import static org.junit.Assert.assertNotNull; import com.cloudbees.jenkins.support.SupportPlugin; +import com.cloudbees.jenkins.support.SupportTestUtils; import com.cloudbees.jenkins.support.api.Component; import com.cloudbees.jenkins.support.filter.ContentFilters; import hudson.ExtensionList; @@ -31,10 +32,7 @@ public class SmartLogCleanerTest { @After public void stopAgents() throws Exception { - for (var agent : j.jenkins.getNodes()) { - System.err.println("Stopping " + agent); - agent.toComputer().disconnect(null).get(); - } + SupportTestUtils.stopAgents(); } @Test