From f6368360c7db10e68bb911a58f51d32c24b84c79 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 3 Mar 2020 15:15:17 +0100 Subject: [PATCH 1/2] try to fix flappy unit tests, by using awaitility instead of Thread.sleep --- pom.xml | 7 +++++++ scm-webapp/pom.xml | 6 ++++++ .../InjectionContextRestartStrategyTest.java | 21 ++++++++++++------- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index f38db0cb54..a472742c11 100644 --- a/pom.xml +++ b/pom.xml @@ -362,6 +362,13 @@ test + + org.awaitility + awaitility + 4.0.2 + test + + diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index aa52c2dc62..3a0df94ffb 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -353,6 +353,12 @@ test + + org.awaitility + awaitility + test + + sonia.scm.plugins scm-git-plugin diff --git a/scm-webapp/src/test/java/sonia/scm/lifecycle/InjectionContextRestartStrategyTest.java b/scm-webapp/src/test/java/sonia/scm/lifecycle/InjectionContextRestartStrategyTest.java index ddd691e5da..b0c04677c1 100644 --- a/scm-webapp/src/test/java/sonia/scm/lifecycle/InjectionContextRestartStrategyTest.java +++ b/scm-webapp/src/test/java/sonia/scm/lifecycle/InjectionContextRestartStrategyTest.java @@ -9,7 +9,10 @@ import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.event.RecreateEventBusEvent; import sonia.scm.event.ScmEventBus; +import java.util.concurrent.TimeUnit; + import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; import static org.mockito.Mockito.verify; @ExtendWith(MockitoExtension.class) @@ -28,12 +31,11 @@ class InjectionContextRestartStrategyTest { } @Test - void shouldCallDestroyAndInitialize() throws InterruptedException { - strategy.restart(context); - - verify(context).destroy(); - Thread.sleep(50L); - verify(context).initialize(); + void shouldCallDestroyAndInitialize() { + TestingInjectionContext ctx = new TestingInjectionContext(); + strategy.restart(ctx); + await().atMost(1, TimeUnit.SECONDS).untilAsserted(() -> assertThat(ctx.destroyed).isTrue()); + await().atMost(1, TimeUnit.SECONDS).untilAsserted(() -> assertThat(ctx.initialized).isTrue()); } @Test @@ -51,6 +53,7 @@ class InjectionContextRestartStrategyTest { TestingInjectionContext ctx = new TestingInjectionContext(); strategy.restart(ctx); + await().atMost(1, TimeUnit.SECONDS).until(() -> ctx.initialized); Thread.sleep(50L); ScmEventBus.getInstance().post("hello event"); @@ -70,6 +73,8 @@ class InjectionContextRestartStrategyTest { public static class TestingInjectionContext implements RestartStrategy.InjectionContext { private volatile String event; + private boolean initialized = false; + private boolean destroyed = false; @Subscribe(async = false) public void setEvent(String event) { @@ -78,12 +83,12 @@ class InjectionContextRestartStrategyTest { @Override public void initialize() { - + this.initialized = true; } @Override public void destroy() { - + this.destroyed = true; } } From 5368f17893aba264da80539204a247c5b0a011d9 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 3 Mar 2020 15:59:40 +0100 Subject: [PATCH 2/2] close branch bugfix/fix_broken_unit_test_timing