Hello! Does anybody have an idea why the following test fails for
CONCURRENT execution mode, whereas it works for SAME_THREAD?
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.Configurator;
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder;
import
org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory;
import org.apache.logging.log4j.util.Strings;
import org.junit.jupiter.api.parallel.Execution;
import org.junit.jupiter.api.parallel.ExecutionMode;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import java.io.File;
import java.nio.file.Paths;
import static org.assertj.core.api.Assertions.assertThat;
@Execution(ExecutionMode.SAME_THREAD)
class ParallelRunTest {
@ParameterizedTest
@ValueSource(chars = {'A', 'B', 'C', 'D'})
void test(final char letter) {
// Create the configuration builder.
final ConfigurationBuilder<?> configBuilder =
ConfigurationBuilderFactory
.newConfigurationBuilder()
.setStatusLevel(Level.ERROR)
.setConfigurationName("Letter-" + letter);
// Create the configuration.
final String appenderName = "File";
final String appenderFilepath = Paths
.get(
System.getProperty("java.io.tmpdir"),
"ParallelRunTest-" + letter + ".log")
.toAbsolutePath()
.toString();
final Configuration config = configBuilder
.add(configBuilder
.newAppender(appenderName, "File")
.addAttribute("fileName", appenderFilepath)
.addAttribute("append", false)
.addAttribute("immediateFlush", false)
.addAttribute("ignoreExceptions", false)
.add(configBuilder
.newLayout("PatternLayout")
.addAttribute("pattern", "%m\n")))
.add(configBuilder
.newRootLogger(Level.ALL)
.add(configBuilder.newAppenderRef(appenderName)))
.build(false);
// Initialize the configuration.
try (final LoggerContext loggerContext =
Configurator.initialize(config)) {
final Logger logger =
loggerContext.getLogger(ParallelRunTest.class);
// Write logs.
final String message = Strings.repeat(String.valueOf(letter), 999);
for (int i = 0; i < 1_000; i++) {
logger.info(message);
}
}
// Verify the file content.
final long appenderFileLength = new File(appenderFilepath).length();
assertThat(appenderFileLength).isEqualTo(1_000_000L);
}
}