Skip to content

Commit 2922590

Browse files
committed
Fix tests using target/rolling-direct
These two tests were using the same folder, hence they fail if running in parallel.
1 parent 31c642d commit 2922590

File tree

4 files changed

+75
-145
lines changed

4 files changed

+75
-145
lines changed

log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTempCompressedFilePatternTest.java

Lines changed: 27 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -16,88 +16,66 @@
1616
*/
1717
package org.apache.logging.log4j.core.appender.rolling;
1818

19-
import java.io.File;
2019
import java.nio.file.FileSystems;
2120
import java.nio.file.Path;
2221
import java.nio.file.StandardWatchEventKinds;
2322
import java.nio.file.WatchEvent;
2423
import java.nio.file.WatchKey;
2524
import java.nio.file.WatchService;
25+
import java.util.concurrent.TimeUnit;
26+
import java.util.regex.Pattern;
2627

27-
import org.apache.commons.lang3.SystemUtils;
2828
import org.apache.logging.log4j.Logger;
29-
import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
30-
import org.junit.Assume;
31-
import org.junit.Before;
32-
import org.junit.Rule;
33-
import org.junit.Test;
34-
import org.junit.rules.RuleChain;
35-
36-
import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
37-
import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
38-
import static org.hamcrest.Matchers.endsWith;
39-
import static org.hamcrest.Matchers.hasItemInArray;
40-
import static org.junit.Assert.assertNotNull;
41-
import static org.junit.Assert.assertThat;
42-
import static org.junit.Assert.assertTrue;
29+
import org.apache.logging.log4j.core.LoggerContext;
30+
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
31+
import org.apache.logging.log4j.test.junit.TempLoggingDir;
32+
import org.apache.logging.log4j.test.junit.UsingStatusListener;
33+
import org.junit.jupiter.api.Test;
4334

35+
import static org.assertj.core.api.Assertions.assertThat;
4436
/**
4537
* LOG4J2-1766.
4638
*/
39+
@UsingStatusListener
4740
public class RollingAppenderDirectWriteTempCompressedFilePatternTest {
4841

49-
private static final String CONFIG = "log4j-rolling-direct-tmp-compress-folder.xml";
50-
51-
private static final String DIR = "target/rolling-direct";
52-
53-
public static LoggerContextRule loggerContextRule = LoggerContextRule
54-
.createShutdownTimeoutLoggerContextRule(CONFIG);
42+
private final String PATTERN = "test-\\d{4}-\\d{2}-\\d{2}T\\d{2}-\\d{2}-\\d+\\.log\\.gz";
43+
private final Pattern FILE_PATTERN = Pattern.compile(PATTERN);
44+
private final Pattern TMP_PATTERN = Pattern.compile(PATTERN + "\\.tmp");
5545

56-
@Rule
57-
public RuleChain chain = loggerContextRule.withCleanFoldersRule(DIR);
58-
59-
private Logger logger;
60-
61-
@Before
62-
public void setUp() throws Exception {
63-
// Disable this test on MacOS. FileWatcher isn't fast enough to work properly.
64-
Assume.assumeTrue(!SystemUtils.IS_OS_MAC_OSX);
65-
this.logger = loggerContextRule.getLogger(RollingAppenderDirectWriteTest.class.getName());
66-
}
46+
@TempLoggingDir
47+
private Path loggingPath;
6748

6849
@Test
69-
public void testAppender() throws Exception {
70-
final File dir = new File(DIR);
71-
dir.mkdirs();
50+
@LoggerContextSource
51+
public void testAppender(final LoggerContext ctx) throws Exception {
52+
final Logger logger = ctx.getLogger(getClass());
7253
try (final WatchService watcher = FileSystems.getDefault().newWatchService()) {
73-
WatchKey key = dir.toPath().register(watcher, StandardWatchEventKinds.ENTRY_CREATE);
54+
WatchKey key = loggingPath.register(watcher, StandardWatchEventKinds.ENTRY_CREATE);
7455

7556
for (int i = 0; i < 100; ++i) {
76-
logger.debug("This is test message number " + i);
57+
logger.debug("This is test message number {}.", i);
7758
}
78-
Thread.sleep(50);
79-
assertTrue("Directory not created", dir.exists() && dir.listFiles().length > 0);
80-
final File[] files = dir.listFiles();
81-
assertNotNull(files);
82-
assertThat(files, hasItemInArray(that(hasName(that(endsWith(".gz"))))));
59+
ctx.stop(500, TimeUnit.MILLISECONDS);
8360

8461
int temporaryFilesCreated = 0;
8562
int compressedFiles = 0;
8663
key = watcher.take();
8764

8865
for (final WatchEvent<?> event : key.pollEvents()) {
8966
final WatchEvent<Path> ev = (WatchEvent<Path>) event;
90-
final Path filename = ev.context();
91-
if (filename.toString().endsWith(".tmp")) {
67+
final String filename = ev.context().getFileName().toString();
68+
if (TMP_PATTERN.matcher(filename).matches()) {
9269
temporaryFilesCreated++;
9370
}
94-
if (filename.toString().endsWith(".gz")) {
71+
if (FILE_PATTERN.matcher(filename).matches()) {
9572
compressedFiles++;
9673
}
9774
}
98-
assertTrue("No temporary file created during compression", temporaryFilesCreated > 0);
99-
assertTrue("Temporarys file created not equals to compressed files",
100-
compressedFiles == temporaryFilesCreated);
75+
assertThat(temporaryFilesCreated)
76+
.as("Temporary files created.")
77+
.isGreaterThan(0)
78+
.isEqualTo(compressedFiles);
10179
}
10280
}
10381
}

log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTest.java

Lines changed: 39 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -17,78 +17,61 @@
1717
package org.apache.logging.log4j.core.appender.rolling;
1818

1919
import java.io.BufferedReader;
20-
import java.io.File;
21-
import java.io.FileInputStream;
22-
import java.io.FileReader;
20+
import java.io.InputStream;
2321
import java.io.InputStreamReader;
22+
import java.nio.file.DirectoryStream;
23+
import java.nio.file.Files;
24+
import java.nio.file.Path;
25+
import java.util.concurrent.TimeUnit;
26+
import java.util.regex.Pattern;
2427
import java.util.zip.GZIPInputStream;
2528

2629
import org.apache.logging.log4j.Logger;
27-
import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
28-
import org.junit.Before;
29-
import org.junit.Rule;
30-
import org.junit.Test;
31-
import org.junit.rules.RuleChain;
30+
import org.apache.logging.log4j.core.LoggerContext;
31+
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
32+
import org.apache.logging.log4j.test.junit.TempLoggingDir;
33+
import org.apache.logging.log4j.test.junit.UsingStatusListener;
34+
import org.junit.jupiter.api.Test;
3235

33-
import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
34-
import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
35-
import static org.hamcrest.Matchers.endsWith;
36-
import static org.hamcrest.Matchers.hasItemInArray;
37-
import static org.junit.Assert.*;
36+
import static java.nio.charset.StandardCharsets.UTF_8;
3837

39-
/**
40-
*
41-
*/
42-
public class RollingAppenderDirectWriteTest {
43-
44-
private static final String CONFIG = "log4j-rolling-direct.xml";
45-
46-
private static final String DIR = "target/rolling-direct";
38+
import static org.assertj.core.api.Assertions.assertThat;
4739

48-
public static LoggerContextRule loggerContextRule = LoggerContextRule.createShutdownTimeoutLoggerContextRule(CONFIG);
49-
50-
@Rule
51-
public RuleChain chain = loggerContextRule.withCleanFoldersRule(DIR);
40+
@UsingStatusListener
41+
public class RollingAppenderDirectWriteTest {
5242

53-
private Logger logger;
43+
private final Pattern FILE_PATTERN = Pattern.compile("test-\\d{4}-\\d{2}-\\d{2}T\\d{2}-\\d{2}-\\d+\\.log(\\.gz)?");
44+
private final Pattern LINE_PATTERN = Pattern.compile("This is test message number \\d+\\.");
5445

55-
@Before
56-
public void setUp() throws Exception {
57-
this.logger = loggerContextRule.getLogger(RollingAppenderDirectWriteTest.class.getName());
58-
}
46+
@TempLoggingDir
47+
private Path loggingPath;
5948

6049
@Test
61-
public void testAppender() throws Exception {
50+
@LoggerContextSource
51+
public void testAppender(final LoggerContext ctx) throws Exception {
52+
final Logger logger = ctx.getLogger(getClass());
6253
final int count = 100;
6354
for (int i=0; i < count; ++i) {
64-
logger.debug("This is test message number " + i);
55+
logger.debug("This is test message number {}.", i);
6556
}
66-
Thread.sleep(50);
67-
final File dir = new File(DIR);
68-
assertTrue("Directory not created", dir.exists() && dir.listFiles().length > 0);
69-
final File[] files = dir.listFiles();
70-
assertNotNull(files);
71-
assertThat(files, hasItemInArray(that(hasName(that(endsWith(".gz"))))));
57+
ctx.stop(500, TimeUnit.MILLISECONDS);
7258
int found = 0;
73-
for (final File file: files) {
74-
final String actual = file.getName();
75-
BufferedReader reader;
76-
if (file.getName().endsWith(".gz")) {
77-
reader = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(file))));
78-
} else {
79-
reader = new BufferedReader(new FileReader(file));
59+
try (final DirectoryStream<Path> stream = Files.newDirectoryStream(loggingPath)) {
60+
for (final Path file: stream) {
61+
final String fileName = file.getFileName().toString();
62+
assertThat(fileName).matches(FILE_PATTERN);
63+
try (final InputStream is = Files.newInputStream(file);
64+
final InputStream uncompressed = fileName.endsWith(".gz") ? new GZIPInputStream(is) : is;
65+
final BufferedReader reader = new BufferedReader(new InputStreamReader(uncompressed, UTF_8))) {
66+
String line;
67+
while ((line = reader.readLine()) != null) {
68+
assertThat(line).matches(LINE_PATTERN);
69+
++found;
70+
}
71+
}
8072
}
81-
String line;
82-
while ((line = reader.readLine()) != null) {
83-
assertNotNull("No log event in file " + actual, line);
84-
final String[] parts = line.split((" "));
85-
final String expected = "test1-" + parts[0];
86-
assertTrue("Incorrect file name. Expected file prefix: " + expected + " Actual: " + actual,
87-
actual.startsWith(expected));
88-
++found;
89-
}
90-
reader.close();
9173
}
92-
assertEquals("Incorrect number of events read. Expected " + count + ", Actual " + found, count, found);
74+
75+
assertThat(found).as("Number of events.").isEqualTo(count);
9376
}
9477
}

log4j-core-test/src/test/resources/log4j-rolling-direct.xml renamed to log4j-core-test/src/test/resources/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTempCompressedFilePatternTest.xml

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,35 +15,21 @@
1515
~ See the License for the specific language governing permissions and
1616
~ limitations under the License.
1717
-->
18-
<Configuration status="WARN" name="XMLConfigTest">
19-
<Properties>
20-
<Property name="logDir">target/rolling-direct</Property>
21-
</Properties>
22-
<ThresholdFilter level="debug"/>
23-
18+
<Configuration status="OFF" name="RollingAppenderDirectWriteTempCompressedFilePatternTest">
2419
<Appenders>
25-
<Console name="STDOUT">
26-
<PatternLayout pattern="%m%n"/>
27-
</Console>
28-
<RollingFile name="RollingFile" filePattern="${logDir}/test1-%d{MM-dd-yy-HH-mm}-%i.log.gz">
29-
<PatternLayout>
30-
<Pattern>%d{MM-dd-yy-HH-mm} %p %C{1.} [%t] %m%n</Pattern>
31-
</PatternLayout>
20+
<RollingFile name="RollingFile" filePattern="${test:logging.path}/test-%d{yyyy-MM-dd'T'hh-mm}-%i.log.gz">
21+
<PatternLayout/>
3222
<Policies>
3323
<TimeBasedTriggeringPolicy />
3424
<SizeBasedTriggeringPolicy size="500" />
3525
</Policies>
26+
<DirectWriteRolloverStrategy tempCompressedFilePattern="${test:logging.path}/test-%d{yyyy-MM-dd'T'hh-mm}-%i.log.gz.tmp"/>
3627
</RollingFile>
3728
</Appenders>
3829

3930
<Loggers>
40-
<Logger name="org.apache.logging.log4j.core.appender.rolling" level="debug" additivity="false">
31+
<Root level="DEBUG">
4132
<AppenderRef ref="RollingFile"/>
42-
</Logger>>
43-
44-
<Root level="error">
45-
<AppenderRef ref="STDOUT"/>
4633
</Root>
4734
</Loggers>
48-
4935
</Configuration>

log4j-core-test/src/test/resources/log4j-rolling-direct-tmp-compress-folder.xml renamed to log4j-core-test/src/test/resources/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTest.xml

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,37 +15,20 @@
1515
~ See the License for the specific language governing permissions and
1616
~ limitations under the License.
1717
-->
18-
<Configuration status="WARN" name="XMLConfigTest">
19-
<Properties>
20-
<Property name="logDir">target/rolling-direct</Property>
21-
</Properties>
22-
<ThresholdFilter level="debug"/>
23-
18+
<Configuration status="OFF" name="RollingAppenderDirectWriteTest">
2419
<Appenders>
25-
<Console name="STDOUT">
26-
<PatternLayout pattern="%m%n"/>
27-
</Console>
28-
<RollingFile name="RollingFile" filePattern="${logDir}/test1-%d{MM-dd-yy-HH-mm}-%i.log.gz">
29-
<PatternLayout>
30-
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
31-
</PatternLayout>
20+
<RollingFile name="RollingFile" filePattern="${test:logging.path}/test-%d{yyyy-MM-dd'T'hh-mm}-%i.log.gz">
21+
<PatternLayout/>
3222
<Policies>
3323
<TimeBasedTriggeringPolicy />
3424
<SizeBasedTriggeringPolicy size="500" />
3525
</Policies>
36-
<DirectWriteRolloverStrategy
37-
tempCompressedFilePattern="${logDir}/test1-%d{MM-dd-yy-HH-mm}-%i.log.gz.tmp"/>
3826
</RollingFile>
3927
</Appenders>
4028

4129
<Loggers>
42-
<Logger name="org.apache.logging.log4j.core.appender.rolling" level="debug" additivity="false">
30+
<Root level="DEBUG">
4331
<AppenderRef ref="RollingFile"/>
44-
</Logger>>
45-
46-
<Root level="error">
47-
<AppenderRef ref="STDOUT"/>
4832
</Root>
4933
</Loggers>
50-
5134
</Configuration>

0 commit comments

Comments
 (0)