logging-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mattsic...@apache.org
Subject svn commit: r1581693 - in /logging/log4j/log4j2/trunk/log4j-core/src/test: java/org/apache/logging/log4j/core/config/MissingRootLoggerTest.java resources/README.md resources/missingRootLogger.xml
Date Wed, 26 Mar 2014 04:48:34 GMT
Author: mattsicker
Date: Wed Mar 26 04:48:33 2014
New Revision: 1581693

URL: http://svn.apache.org/r1581693
Update MissingRootLoggerTest to use test rule.

  - Added documentation about writing unit tests.
  - Added documentation for the MissingRootLoggerTest.
  - Updated said test with some better assert messages.

    logging/log4j/log4j2/trunk/log4j-core/src/test/resources/README.md   (with props)

Modified: logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/config/MissingRootLoggerTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/config/MissingRootLoggerTest.java?rev=1581693&r1=1581692&r2=1581693&view=diff
--- logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/config/MissingRootLoggerTest.java
+++ logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/config/MissingRootLoggerTest.java
Wed Mar 26 04:48:33 2014
@@ -16,31 +16,32 @@
 package org.apache.logging.log4j.core.config;
-import java.util.Map;
 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.LoggerContext;
-import org.apache.logging.log4j.core.config.plugins.PluginManager;
+import org.apache.logging.log4j.junit.InitialLoggerContext;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import java.util.Map;
+import static org.junit.Assert.*;
 public class MissingRootLoggerTest {
+    @Rule
+    public InitialLoggerContext context = new InitialLoggerContext("missingRootLogger.xml");
     public void testMissingRootLogger() throws Exception {
-        PluginManager.addPackage("org.apache.logging.log4j.test.appender");
-        final LoggerContext ctx = Configurator.initialize("Test1", "missingRootLogger.xml");
-        final Logger logger = LogManager.getLogger("sample.Logger1");
+        final LoggerContext ctx = context.getContext();
+        final Logger logger = ctx.getLogger("sample.Logger1");
+        assertTrue("Logger should have the INFO level enabled", logger.isInfoEnabled());
+        assertFalse("Logger should have the DEBUG level disabled", logger.isDebugEnabled());
         final Configuration config = ctx.getConfiguration();
         assertNotNull("Config not null", config);
 //        final String MISSINGROOT = "MissingRootTest";
@@ -48,32 +49,29 @@ public class MissingRootLoggerTest {
 //                MISSINGROOT.equals(config.getName()));
         final Map<String, Appender> map = config.getAppenders();
         assertNotNull("Appenders not null", map);
-        assertEquals("Appenders Size", 2, map.size());
+        assertEquals("There should only be two appenders", 2, map.size());
         assertTrue("Contains List", map.containsKey("List"));
         assertTrue("Contains Console", map.containsKey("Console"));
         final Map<String, LoggerConfig> loggerMap = config.getLoggers();
         assertNotNull("loggerMap not null", loggerMap);
-        assertEquals("loggerMap Size", 1, loggerMap.size());
+        assertEquals("There should only be one configured logger", 1, loggerMap.size());
         // only the sample logger, no root logger in loggerMap!
         assertTrue("contains key=sample", loggerMap.containsKey("sample"));
         final LoggerConfig sample = loggerMap.get("sample");
         final Map<String, Appender> sampleAppenders = sample.getAppenders();
-        assertEquals("sampleAppenders Size", 1, sampleAppenders.size());
+        assertEquals("The sample logger should only have one appender", 1, sampleAppenders.size());
         // sample only has List appender, not Console!
-        assertTrue("sample has appender List", sampleAppenders.containsKey("List"));
+        assertTrue("The sample appender should be a ListAppender", sampleAppenders.containsKey("List"));
         final AbstractConfiguration baseConfig = (AbstractConfiguration) config;
         final LoggerConfig root = baseConfig.getRootLogger();
         final Map<String, Appender> rootAppenders = root.getAppenders();
-        assertEquals("rootAppenders Size", 1, rootAppenders.size());
+        assertEquals("The root logger should only have one appender", 1, rootAppenders.size());
         // root only has Console appender!
-        assertTrue("root has appender Console", rootAppenders.containsKey("Console"));
+        assertTrue("The root appender should be a ConsoleAppender", rootAppenders.containsKey("Console"));
         assertEquals(Level.ERROR, root.getLevel());
-        logger.isDebugEnabled();
-        Configurator.shutdown(ctx);

Added: logging/log4j/log4j2/trunk/log4j-core/src/test/resources/README.md
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/test/resources/README.md?rev=1581693&view=auto
--- logging/log4j/log4j2/trunk/log4j-core/src/test/resources/README.md (added)
+++ logging/log4j/log4j2/trunk/log4j-core/src/test/resources/README.md Wed Mar 26 04:48:33
@@ -0,0 +1,56 @@
+This directory is mainly for storing configuration files used in various unit tests. As such,
there are a few things
+provided for your convenience in writing and maintaining unit tests.
+Test Plugins
+Included are various Log4j plugins that are only useful for writing tests. To enable these
plugins for your test,
+make sure to include `org.apache.logging.log4j.test` in the root `packages` attribute of
the config file. For example:
+    <Configuration packages="org.apache.logging.log4j.test">
+      <Appenders>
+        <List name="List"/>
+      </Appenders>
+      <Loggers>
+        <Logger name="org.apache.logging.log4j" level="debug">
+          <AppenderRef ref="List"/>
+        </Logger>
+      </Loggers>
+    </Configuration>
+Note that if you don't specify a layout for a ListAppender, your log messages will be stored
in a list of LogEvents.
+If you use a SerializedLayout, your log messages will be stored in a list of byte arrays.
If you specify any other
+type of layout, your log messages will be stored in a list of strings. For more details,
check out the class
+Specifying Configuration Files in JUnit Tests
+Added in JUnit 4.9, the concept of test fixtures (i.e., the `@Before`, `@After`, etc. methods)
has been expanded into
+the concept of test rules. A test rule is a reusable test fixture such as the `TemporaryFolder`
JUnit rule for creating
+temporary directories and files on a test-by-test (or suite) basis. To use a test rule, you
need to use the
+`@Rule` or `@ClassRule` annotation to get a method-level or class-level test fixture respectively.
For instance,
+suppose your test class uses the file named `MyTestConfig.xml` in this directory. Then you
can use the following rule
+in your test class:
+    @Rule
+    public InitialLoggerContext context = new InitialLoggerContext("MyTestConfig.xml");
+    @Test
+    public void testSomeAwesomeFeature() {
+        final LoggerContext ctx = context.getContext();
+        final Logger logger = ctx.getLogger("org.apache.logging.log4j.my.awesome.test.logger");
+        final Configuration cfg = ctx.getConfiguration();
+        final ListAppender app = (ListAppender) cfg.getAppenders().get("List");
+        logger.warn("Test message");
+        final List<LogEvent> events = app.getEvents();
+        // etc.
+    }
+Using this rule will automatically create a new LoggerContext using the specified configuration
file for you to
+retrieve via the `getContext()` method shown above. After the method finishes (or if you
use `@ClassRule` and make
+the field `static`), the `LoggerContext` is automatically stopped. No longer do you need
to set any system properties,
+reset the `StatusLogger` configuration, and all that other fun boilerplate code.
+If you have any questions about writing unit tests, feel free to send an email to the dev
mailing list, or check out
+the JUnit documentation over at junit.org.
\ No newline at end of file

Propchange: logging/log4j/log4j2/trunk/log4j-core/src/test/resources/README.md
    svn:eol-style = native

Modified: logging/log4j/log4j2/trunk/log4j-core/src/test/resources/missingRootLogger.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/test/resources/missingRootLogger.xml?rev=1581693&r1=1581692&r2=1581693&view=diff
--- logging/log4j/log4j2/trunk/log4j-core/src/test/resources/missingRootLogger.xml (original)
+++ logging/log4j/log4j2/trunk/log4j-core/src/test/resources/missingRootLogger.xml Wed Mar
26 04:48:33 2014
@@ -1,5 +1,22 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<Configuration name="MissingRootTest" status="DEBUG">
+ 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,
+ See the License for the specific language governing permissions and
+ limitations under the License.
+<Configuration name="MissingRootTest" status="DEBUG" packages="org.apache.logging.log4j.test">
     <List name="List">
@@ -8,12 +25,24 @@
+    This test intentionally excludes a root logger configuration. This is to demonstrate
that by default, the root
+    logger is configured as a Logger at the ERROR level with only a ConsoleAppender. Thus,
the following would be
+    implicit in a configuration that doesn't otherwise specify the root logger configuration:
+    <Appenders>
+      <Console name="Console">
+        <PatternLayout pattern="{the default pattern}"/>
+      </Console>
+    </Appenders>
+    <Loggers>
+      <Root level="error">
+        <AppenderRef ref="Console"/>
+      </Root>
+    </Loggers>
-  <!-- 
-    <Root level="info" includeLocation="false">
-      <AppenderRef ref="List"/>
-    </Root>
-     -->
     <Logger name="sample" level="info" includeLocation="false">
       <AppenderRef ref="List"/>

View raw message