Author: mattsicker Date: Mon Mar 24 03:46:46 2014 New Revision: 1580728 URL: http://svn.apache.org/r1580728 Log: Combined config file tests into a parameterized one.
Added: logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ConfigurationTest.java (with props) Removed: logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/config/JSONConfigurationTest.java logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/config/XMLConfigurationTest.java logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/config/YAMLConfigurationTest.java Added: logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ConfigurationTest.java URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ConfigurationTest.java?rev=1580728&view=auto ============================================================================== --- logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ConfigurationTest.java (added) +++ logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ConfigurationTest.java Mon Mar 24 03:46:46 2014 @@ -0,0 +1,155 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.logging.log4j.core.config; + +import java.io.BufferedReader; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.IOException; +import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; +import java.util.concurrent.ThreadLocalRandom; + +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.Appender; +import org.apache.logging.log4j.core.Filter; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.filter.ThreadContextMapFilter; +import org.apache.logging.log4j.status.StatusLogger; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameters; + +import static org.apache.logging.log4j.core.config.ConfigurationFactory.CONFIGURATION_FILE_PROPERTY; +import static org.hamcrest.CoreMatchers.endsWith; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; +import static org.junit.Assert.assertThat; + +/** + * Unit tests for testing various supported configuration file formats. Each configuration file format should provide a + * compatible configuration to get some sweet, sweet tests. + */ +@RunWith(Parameterized.class) +public class ConfigurationTest { + + private static final String LOGGER_NAME = "org.apache.logging.log4j.test1.Test"; + private static final String FILE_LOGGER_NAME = "org.apache.logging.log4j.test2.Test"; + private static final String APPENDER_NAME = "STDOUT"; + + private final String configFileName; + private final String logFileName; + + private LoggerContext ctx; + + public ConfigurationTest(final String configFileName, final String logFileName) { + this.configFileName = configFileName; + this.logFileName = logFileName; + } + + @Parameters + public static Collection<Object[]> data() { + return Arrays.asList( + new Object[][]{ + {"log4j-test1.xml", "target/test.log"}, + {"log4j-test1.json", "target/test.log"}, + {"log4j-test1.yaml", "target/test.log"} + } + ); + } + + @Before + public void setUp() throws Exception { + System.setProperty(CONFIGURATION_FILE_PROPERTY, this.configFileName); + clearLogFile(this.logFileName); + this.ctx = (LoggerContext) LogManager.getContext(false); + this.ctx.reconfigure(); + } + + @After + public void tearDown() throws Exception { + System.clearProperty(CONFIGURATION_FILE_PROPERTY); + this.ctx.reconfigure(); + StatusLogger.getLogger().reset(); + } + + @Test + public void testConfiguredAppenders() throws Exception { + final Configuration configuration = this.ctx.getConfiguration(); + final Map<String, Appender> appenders = configuration.getAppenders(); + assertThat(appenders, is(notNullValue())); + assertThat(appenders.size(), is(equalTo(3))); + } + + @Test + public void testLogger() throws Exception { + final Logger logger = this.ctx.getLogger(LOGGER_NAME); + assertThat(logger, is(instanceOf(org.apache.logging.log4j.core.Logger.class))); + final org.apache.logging.log4j.core.Logger l = (org.apache.logging.log4j.core.Logger) logger; + assertThat(l.getLevel(), is(equalTo(Level.DEBUG))); + assertThat(l.filterCount(), is(equalTo(1))); + final Iterator<Filter> iterator = l.getFilters(); + assertThat(iterator.hasNext(), is(true)); + final Filter filter = iterator.next(); + assertThat(filter, is(instanceOf(ThreadContextMapFilter.class))); + final Map<String, Appender> appenders = l.getAppenders(); + assertThat(appenders, is(notNullValue())); + assertThat(appenders.size(), is(equalTo(1))); + final Appender appender = appenders.get(APPENDER_NAME); + assertThat(appender, is(notNullValue())); + assertThat(appender.getName(), is(equalTo("STDOUT"))); + } + + @Test + public void testLogToFile() throws Exception { + final Logger logger = this.ctx.getLogger(FILE_LOGGER_NAME); + final long random = ThreadLocalRandom.current().nextLong(); + logger.debug("This is test message number {}", random); + int count = 0; + String line = ""; + final BufferedReader in = new BufferedReader(new FileReader(this.logFileName)); + try { + while (in.ready()) { + ++count; + line = in.readLine(); + } + } finally { + in.close(); + } + assertThat(count, is(equalTo(1))); + assertThat(line, endsWith(Long.toString(random))); + } + + private static void clearLogFile(final String file) throws IOException { + final FileOutputStream fos = new FileOutputStream(file, false); + try { + fos.flush(); + } finally { + fos.close(); + } + } +} Propchange: logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ConfigurationTest.java ------------------------------------------------------------------------------ svn:eol-style = native