Skip to content

Commit 44ebc64

Browse files
committed
Avoid config leaking in logback unit tests.
1 parent 5ed645d commit 44ebc64

File tree

2 files changed

+46
-52
lines changed

2 files changed

+46
-52
lines changed

powertools-logging/powertools-logging-log4j/src/test/java/software/amazon/lambda/powertools/logging/log4j/internal/Log4jLoggingManagerTest.java

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -78,38 +78,30 @@ void shouldDetectMultipleBufferingAppendersRegardlessOfName() throws IOException
7878
}
7979

8080
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
81-
Configuration originalConfig = ctx.getConfiguration();
81+
ConfigurationFactory factory = new XmlConfigurationFactory();
82+
ConfigurationSource source = new ConfigurationSource(
83+
getClass().getResourceAsStream("/log4j2-multiple-buffering.xml"));
84+
Configuration config = factory.getConfiguration(null, source);
8285

83-
try {
84-
ConfigurationFactory factory = new XmlConfigurationFactory();
85-
ConfigurationSource source = new ConfigurationSource(
86-
getClass().getResourceAsStream("/log4j2-multiple-buffering.xml"));
87-
Configuration config = factory.getConfiguration(null, source);
88-
89-
ctx.setConfiguration(config);
90-
ctx.updateLoggers();
91-
92-
org.apache.logging.log4j.Logger logger = LogManager.getLogger("test.multiple.appenders");
93-
94-
// When - log messages and flush buffers
95-
logger.debug("Test message 1");
96-
logger.debug("Test message 2");
97-
98-
Log4jLoggingManager manager = new Log4jLoggingManager();
99-
manager.flushBuffer();
100-
101-
// Then - both appenders should have flushed their buffers
102-
File logFile = new File("target/logfile.json");
103-
assertThat(logFile).exists();
104-
String content = contentOf(logFile);
105-
// Each message should appear twice (once from each BufferingAppender)
106-
assertThat(content.split("Test message 1", -1)).hasSize(3); // 2 occurrences = 3 parts
107-
assertThat(content.split("Test message 2", -1)).hasSize(3); // 2 occurrences = 3 parts
108-
} finally {
109-
// Restore original configuration to prevent test interference
110-
ctx.setConfiguration(originalConfig);
111-
ctx.updateLoggers();
112-
}
86+
ctx.setConfiguration(config);
87+
ctx.updateLoggers();
88+
89+
org.apache.logging.log4j.Logger logger = LogManager.getLogger("test.multiple.appenders");
90+
91+
// When - log messages and flush buffers
92+
logger.debug("Test message 1");
93+
logger.debug("Test message 2");
94+
95+
Log4jLoggingManager manager = new Log4jLoggingManager();
96+
manager.flushBuffer();
97+
98+
// Then - both appenders should have flushed their buffers
99+
File logFile = new File("target/logfile.json");
100+
assertThat(logFile).exists();
101+
String content = contentOf(logFile);
102+
// Each message should appear twice (once from each BufferingAppender)
103+
assertThat(content.split("Test message 1", -1)).hasSize(3); // 2 occurrences = 3 parts
104+
assertThat(content.split("Test message 2", -1)).hasSize(3); // 2 occurrences = 3 parts
113105
}
114106

115107
@AfterEach

powertools-logging/powertools-logging-logback/src/test/java/software/amazon/lambda/powertools/logging/LogbackLoggingManagerTest.java

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import java.nio.file.StandardOpenOption;
2929

3030
import org.junit.jupiter.api.AfterEach;
31-
import org.junit.jupiter.api.Order;
31+
import org.junit.jupiter.api.BeforeEach;
3232
import org.junit.jupiter.api.Test;
3333
import org.slf4j.Logger;
3434
import org.slf4j.LoggerFactory;
@@ -44,8 +44,18 @@ class LogbackLoggingManagerTest {
4444
private static final Logger LOG = LoggerFactory.getLogger(LogbackLoggingManagerTest.class);
4545
private static final Logger ROOT = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
4646

47+
@BeforeEach
48+
void setUp() throws JoranException, IOException {
49+
resetLogbackConfig("/logback-test.xml");
50+
51+
try {
52+
FileChannel.open(Paths.get("target/logfile.json"), StandardOpenOption.WRITE).truncate(0).close();
53+
} catch (NoSuchFileException e) {
54+
// may not be there in the first run
55+
}
56+
}
57+
4758
@Test
48-
@Order(1)
4959
void getLogLevel_shouldReturnConfiguredLogLevel() {
5060
LogbackLoggingManager manager = new LogbackLoggingManager();
5161
Level logLevel = manager.getLogLevel(LOG);
@@ -56,7 +66,6 @@ void getLogLevel_shouldReturnConfiguredLogLevel() {
5666
}
5767

5868
@Test
59-
@Order(2)
6069
void resetLogLevel() {
6170
LogbackLoggingManager manager = new LogbackLoggingManager();
6271
manager.setLogLevel(ERROR);
@@ -68,18 +77,7 @@ void resetLogLevel() {
6877
@Test
6978
void shouldDetectMultipleBufferingAppendersRegardlessOfName() throws IOException, JoranException {
7079
// Given - configuration with multiple BufferingAppenders with different names
71-
try {
72-
FileChannel.open(Paths.get("target/logfile.json"), StandardOpenOption.WRITE).truncate(0).close();
73-
} catch (NoSuchFileException e) {
74-
// may not be there in the first run
75-
}
76-
77-
LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
78-
context.reset();
79-
80-
JoranConfigurator configurator = new JoranConfigurator();
81-
configurator.setContext(context);
82-
configurator.doConfigure(getClass().getResourceAsStream("/logback-multiple-buffering.xml"));
80+
resetLogbackConfig("/logback-multiple-buffering.xml");
8381

8482
Logger logger = LoggerFactory.getLogger("test.multiple.appenders");
8583

@@ -100,11 +98,15 @@ void shouldDetectMultipleBufferingAppendersRegardlessOfName() throws IOException
10098
}
10199

102100
@AfterEach
103-
void cleanUp() throws IOException {
104-
try {
105-
FileChannel.open(Paths.get("target/logfile.json"), StandardOpenOption.WRITE).truncate(0).close();
106-
} catch (NoSuchFileException e) {
107-
// may not be there
108-
}
101+
void cleanUp() throws JoranException {
102+
resetLogbackConfig("/logback-test.xml");
103+
}
104+
105+
private void resetLogbackConfig(String configFileName) throws JoranException {
106+
LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
107+
context.reset();
108+
JoranConfigurator configurator = new JoranConfigurator();
109+
configurator.setContext(context);
110+
configurator.doConfigure(getClass().getResourceAsStream(configFileName));
109111
}
110112
}

0 commit comments

Comments
 (0)