From e3f2a3012087e70ac4e7890c11b0f1efbf6f9501 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= Date: Mon, 7 Feb 2022 17:26:26 +0100 Subject: [PATCH] Make BrambleTestCase fail if background thread throws an exception --- .../bramble/test/BrambleTestCase.java | 19 ++++++++++++++++++- .../bramble/test/ThreadExceptionTest.java | 5 +++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/bramble-api/src/test/java/org/briarproject/bramble/test/BrambleTestCase.java b/bramble-api/src/test/java/org/briarproject/bramble/test/BrambleTestCase.java index 9fae78043..279c35d70 100644 --- a/bramble-api/src/test/java/org/briarproject/bramble/test/BrambleTestCase.java +++ b/bramble-api/src/test/java/org/briarproject/bramble/test/BrambleTestCase.java @@ -1,17 +1,34 @@ package org.briarproject.bramble.test; +import org.junit.After; +import org.junit.Before; + import java.lang.Thread.UncaughtExceptionHandler; import static org.junit.Assert.fail; public abstract class BrambleTestCase { + private volatile boolean exceptionInBackgroundThread = false; + public BrambleTestCase() { // Ensure exceptions thrown on worker threads cause tests to fail UncaughtExceptionHandler fail = (thread, throwable) -> { throwable.printStackTrace(); - fail(); + exceptionInBackgroundThread = true; }; Thread.setDefaultUncaughtExceptionHandler(fail); } + + @Before + public void before() { + exceptionInBackgroundThread = false; + } + + @After + public void after() { + if (exceptionInBackgroundThread) { + fail("background thread has thrown an exception"); + } + } } diff --git a/bramble-api/src/test/java/org/briarproject/bramble/test/ThreadExceptionTest.java b/bramble-api/src/test/java/org/briarproject/bramble/test/ThreadExceptionTest.java index 6491df41a..184c057d8 100644 --- a/bramble-api/src/test/java/org/briarproject/bramble/test/ThreadExceptionTest.java +++ b/bramble-api/src/test/java/org/briarproject/bramble/test/ThreadExceptionTest.java @@ -12,7 +12,7 @@ public class ThreadExceptionTest extends BrambleTestCase { fail(); } - @Test(expected = AssertionError.class) + @Test public void testExceptionInThreadMakesTestCaseFail() { Thread t = new Thread(() -> { System.out.println("thread before exception"); @@ -24,7 +24,8 @@ public class ThreadExceptionTest extends BrambleTestCase { t.join(); System.out.println("joined thread"); } catch (InterruptedException e) { - e.printStackTrace(); + System.out.println("interrupted while joining thread"); + fail(); } }