From 77a607354885bffc24a109a7c3616c267fa02c3a Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Sun, 19 Mar 2017 14:24:17 +0100 Subject: [PATCH] Improve reliability and speed of StopWatcherTest --- .../java/org/sonar/process/StopWatcher.java | 4 +-- .../org/sonar/process/StopWatcherTest.java | 34 +++++++++++++------ .../process/logging/LogbackHelperTest.java | 2 +- .../LogbackHelperTest}/logback-test.xml | 0 4 files changed, 26 insertions(+), 14 deletions(-) rename server/sonar-process/src/test/resources/{ => org/sonar/process/logging/LogbackHelperTest}/logback-test.xml (100%) diff --git a/server/sonar-process/src/main/java/org/sonar/process/StopWatcher.java b/server/sonar-process/src/main/java/org/sonar/process/StopWatcher.java index 35bdc2ef9e4..0043bccf239 100644 --- a/server/sonar-process/src/main/java/org/sonar/process/StopWatcher.java +++ b/server/sonar-process/src/main/java/org/sonar/process/StopWatcher.java @@ -27,10 +27,10 @@ import org.slf4j.LoggerFactory; */ public class StopWatcher extends Thread { - private final Stoppable stoppable; private final ProcessCommands commands; - private boolean watching = true; + private final Stoppable stoppable; private final long delayMs; + private boolean watching = true; public StopWatcher(ProcessCommands commands, Stoppable stoppable) { this(commands, stoppable, 500L); diff --git a/server/sonar-process/src/test/java/org/sonar/process/StopWatcherTest.java b/server/sonar-process/src/test/java/org/sonar/process/StopWatcherTest.java index 1f1e6c51d5a..970a1e4bdc9 100644 --- a/server/sonar-process/src/test/java/org/sonar/process/StopWatcherTest.java +++ b/server/sonar-process/src/test/java/org/sonar/process/StopWatcherTest.java @@ -19,38 +19,50 @@ */ package org.sonar.process; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.DisableOnDebug; +import org.junit.rules.TestRule; +import org.junit.rules.Timeout; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; -import static org.mockito.Mockito.timeout; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class StopWatcherTest { + + @Rule + public TestRule safeguard = new DisableOnDebug(Timeout.seconds(10)); + @Test - public void stop_if_receive_command() { + public void stop_if_receive_command() throws Exception { ProcessCommands commands = mock(ProcessCommands.class); when(commands.askedForStop()).thenReturn(false, true); Stoppable stoppable = mock(Stoppable.class); - StopWatcher watcher = new StopWatcher(commands, stoppable, 1L); - watcher.start(); + StopWatcher underTest = new StopWatcher(commands, stoppable, 1L); + underTest.start(); - verify(stoppable, timeout(5000)).stopAsync(); + while (underTest.isAlive()) { + Thread.sleep(1L); + } + verify(stoppable).stopAsync(); } - @Test(timeout = 5000) - public void stop_watching_on_interruption() throws InterruptedException { + @Test + public void stop_watching_on_interruption() throws Exception { ProcessCommands commands = mock(ProcessCommands.class); when(commands.askedForStop()).thenReturn(false); Stoppable stoppable = mock(Stoppable.class); - StopWatcher watcher = new StopWatcher(commands, stoppable, 1000L); - watcher.start(); - Thread.sleep(50L); - watcher.interrupt(); + StopWatcher underTest = new StopWatcher(commands, stoppable, 1L); + underTest.start(); + underTest.interrupt(); + while (underTest.isAlive()) { + Thread.sleep(1L); + } verify(stoppable, never()).stopAsync(); } } diff --git a/server/sonar-process/src/test/java/org/sonar/process/logging/LogbackHelperTest.java b/server/sonar-process/src/test/java/org/sonar/process/logging/LogbackHelperTest.java index bde68ffa789..9b6a50d8e0d 100644 --- a/server/sonar-process/src/test/java/org/sonar/process/logging/LogbackHelperTest.java +++ b/server/sonar-process/src/test/java/org/sonar/process/logging/LogbackHelperTest.java @@ -70,7 +70,7 @@ public class LogbackHelperTest { @AfterClass public static void resetLogback() throws Exception { - new LogbackHelper().resetFromXml("/logback-test.xml"); + new LogbackHelper().resetFromXml("/org/sonar/process/logging/LogbackHelperTest/logback-test.xml"); } @Test diff --git a/server/sonar-process/src/test/resources/logback-test.xml b/server/sonar-process/src/test/resources/org/sonar/process/logging/LogbackHelperTest/logback-test.xml similarity index 100% rename from server/sonar-process/src/test/resources/logback-test.xml rename to server/sonar-process/src/test/resources/org/sonar/process/logging/LogbackHelperTest/logback-test.xml -- 2.39.5