From 7a64dcd4d36afc8d59a0c4fe75a68152eddfdca8 Mon Sep 17 00:00:00 2001 From: Georgios Andrianakis Date: Wed, 24 Jun 2020 23:40:57 +0300 Subject: [PATCH] Make sure that logging handlers don't leak in internal tests --- .../io/quarkus/test/QuarkusDevModeTest.java | 22 +++++++++++++++---- .../io/quarkus/test/QuarkusProdModeTest.java | 9 ++++++-- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/test-framework/junit5-internal/src/main/java/io/quarkus/test/QuarkusDevModeTest.java b/test-framework/junit5-internal/src/main/java/io/quarkus/test/QuarkusDevModeTest.java index c06aafeb2b99b..9158ff2650141 100644 --- a/test-framework/junit5-internal/src/main/java/io/quarkus/test/QuarkusDevModeTest.java +++ b/test-framework/junit5-internal/src/main/java/io/quarkus/test/QuarkusDevModeTest.java @@ -21,14 +21,17 @@ import java.util.function.Supplier; import java.util.jar.Attributes; import java.util.jar.Manifest; +import java.util.logging.Handler; import java.util.logging.LogManager; import java.util.logging.LogRecord; -import java.util.logging.Logger; import java.util.stream.Stream; +import org.jboss.logmanager.Logger; import org.jboss.shrinkwrap.api.exporter.ExplodedExporter; import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.jupiter.api.extension.AfterAllCallback; import org.junit.jupiter.api.extension.AfterEachCallback; +import org.junit.jupiter.api.extension.BeforeAllCallback; import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.api.extension.TestInstanceFactory; @@ -60,13 +63,14 @@ * A side effect of this is that the tests will run on port 8080 by default instead of port 8081. */ public class QuarkusDevModeTest - implements BeforeEachCallback, AfterEachCallback, TestInstanceFactory { + implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback, TestInstanceFactory { private static final Logger rootLogger; + private Handler[] originalRootLoggerHandlers; static { System.setProperty("java.util.logging.manager", "org.jboss.logmanager.LogManager"); - rootLogger = LogManager.getLogManager().getLogger(""); + rootLogger = (Logger) LogManager.getLogManager().getLogger(""); } private DevModeMain devModeMain; @@ -126,8 +130,13 @@ public Object createTestInstance(TestInstanceFactoryContext factoryContext, Exte } @Override - public void beforeEach(ExtensionContext extensionContext) throws Exception { + public void beforeAll(ExtensionContext context) throws Exception { + originalRootLoggerHandlers = rootLogger.getHandlers(); rootLogger.addHandler(inMemoryLogHandler); + } + + @Override + public void beforeEach(ExtensionContext extensionContext) throws Exception { if (archiveProducer == null) { throw new RuntimeException("QuarkusDevModeTest does not have archive producer set"); } @@ -180,6 +189,11 @@ public void close() throws Throwable { } } + @Override + public void afterAll(ExtensionContext context) throws Exception { + rootLogger.setHandlers(originalRootLoggerHandlers); + } + @Override public void afterEach(ExtensionContext extensionContext) throws Exception { try { diff --git a/test-framework/junit5-internal/src/main/java/io/quarkus/test/QuarkusProdModeTest.java b/test-framework/junit5-internal/src/main/java/io/quarkus/test/QuarkusProdModeTest.java index 4dbd337d3b8d8..4952804ff27e9 100644 --- a/test-framework/junit5-internal/src/main/java/io/quarkus/test/QuarkusProdModeTest.java +++ b/test-framework/junit5-internal/src/main/java/io/quarkus/test/QuarkusProdModeTest.java @@ -29,12 +29,13 @@ import java.util.function.Consumer; import java.util.function.Predicate; import java.util.function.Supplier; +import java.util.logging.Handler; import java.util.logging.LogManager; import java.util.logging.LogRecord; -import java.util.logging.Logger; import java.util.stream.Collectors; import java.util.stream.Stream; +import org.jboss.logmanager.Logger; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.exporter.ExplodedExporter; import org.jboss.shrinkwrap.api.exporter.ZipExporter; @@ -72,10 +73,11 @@ public class QuarkusProdModeTest private static final String QUARKUS_HTTP_PORT_PROPERTY = "quarkus.http.port"; private static final Logger rootLogger; + private Handler[] originalHandlers; static { System.setProperty("java.util.logging.manager", "org.jboss.logmanager.LogManager"); - rootLogger = LogManager.getLogManager().getLogger(""); + rootLogger = (Logger) LogManager.getLogManager().getLogger(""); } private Path outputDir; @@ -289,6 +291,7 @@ private JavaArchive getArchiveProducerOrDefault() { @Override public void beforeAll(ExtensionContext extensionContext) throws Exception { + originalHandlers = rootLogger.getHandlers(); rootLogger.addHandler(inMemoryLogHandler); timeoutTask = new TimerTask() { @@ -533,6 +536,8 @@ public void testFailed(ExtensionContext context, Throwable cause) { @Override public void afterAll(ExtensionContext extensionContext) throws Exception { + rootLogger.setHandlers(originalHandlers); + if (run) { RestAssuredURLManager.clearURL(); }