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);

    }

}

Reply via email to