package org.marketcetera.util.test;
import org.apache.commons.lang.SystemUtils;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggingEvent;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* @author tlerios@marketcetera.com
* @version $Id: LogTestAssistTest.java 16154 2012-07-14 16:34:05Z colin $
* @since 2.0.0
*/
/* $License$ */
public class LogTestAssistTest
extends LogTestBase
{
private static final String TEST_LOCATION=
LogTestAssistTest.class.getName();
private LogTestAssist mAssist;
// LogTestAssistBase.
@Override
protected void setDefaultLevel
(Level level)
{
LogTestAssist.setDefaultLevel(level);
}
@Override
protected void setLevel
(String name,
Level level)
{
LogTestAssist.setLevel(name,level);
}
@Override
protected void assertEvent
(LoggingEvent event,
Level level,
String logger,
String message,
String location)
{
LogTestAssist.assertEvent(event,level,logger,message,location);
}
@Override
protected MemoryAppender getAppender()
{
return getAssist().getAppender();
}
@Override
protected void assertEventCount
(int count)
{
getAssist().assertEventCount(count);
}
@Override
protected void assertNoEvents()
{
getAssist().assertNoEvents();
}
@Override
protected void assertLastEvent
(Level level,
String category,
String message,
String location)
{
getAssist().assertLastEvent(level,category,message,location);
}
@Override
protected void assertSomeEvent
(Level level,
String category,
String message,
String location)
{
getAssist().assertSomeEvent(level,category,message,location);
}
@Override
protected void assertSingleEvent
(Level level,
String category,
String message,
String location)
{
getAssist().assertSingleEvent(level,category,message,location);
}
// Custom additional utilities.
private LogTestAssist getAssist()
{
return mAssist;
}
private void trackLogger
(String name,
Level level)
{
getAssist().trackLogger(name,level);
}
private void trackLogger
(String name)
{
getAssist().trackLogger(name);
}
private void resetAppender()
{
getAssist().resetAppender();
}
private String getEventsAsString()
{
return getAssist().getEventsAsString();
}
@Before
public void setupLogTestAssistTest()
{
mAssist=new LogTestAssist();
BasicConfigurator.configure(getAppender());
}
// Custom additional tests.
@Test
public void normalConstructor()
{
String c1=getNextTestCategory();
String c2=getNextTestCategory();
mAssist=new LogTestAssist(c1,Level.ERROR);
Logger.getLogger(c1).warn(TEST_MESSAGE);
assertEquals(0,getAppender().getEvents().size());
Logger.getLogger(c1).error(TEST_MESSAGE);
assertEquals(1,getAppender().getEvents().size());
// Not tracking any other category.
Logger.getLogger(c2).error(TEST_MESSAGE);
assertEquals(1,getAppender().getEvents().size());
}
@Test
public void noLevelConstructor()
{
String c1=getNextTestCategory();
String c2=getNextTestCategory();
mAssist=new LogTestAssist(c1);
// Default logging is turned off during parent class setup.
Logger.getLogger(c1).warn(TEST_MESSAGE);
assertEquals(0,getAppender().getEvents().size());
setDefaultLevel(Level.WARN);
Logger.getLogger(c1).warn(TEST_MESSAGE);
assertEquals(1,getAppender().getEvents().size());
Logger.getLogger(c1).info(TEST_MESSAGE);
assertEquals(1,getAppender().getEvents().size());
setLevel(c1,Level.ERROR);
Logger.getLogger(c1).error(TEST_MESSAGE);
assertEquals(2,getAppender().getEvents().size());
Logger.getLogger(c1).warn(TEST_MESSAGE);
assertEquals(2,getAppender().getEvents().size());
// Not tracking any other category.
Logger.getLogger(c2).error(TEST_MESSAGE);
assertEquals(2,getAppender().getEvents().size());
}
@Test
public void defaultConstructor()
{
String c1=getNextTestCategory();
String c2=getNextTestCategory();
// mAssist was already constructed in setup method.
// Default logging is turned off during parent class setup.
Logger.getLogger(c1).error(TEST_MESSAGE);
assertEquals(0,getAppender().getEvents().size());
setLevel(c1,Level.ERROR);
Logger.getLogger(c1).error(TEST_MESSAGE);
assertEquals(1,getAppender().getEvents().size());
Logger.getLogger(c1).warn(TEST_MESSAGE);
assertEquals(1,getAppender().getEvents().size());
// Not tracking any other category.
Logger.getLogger(c2).error(TEST_MESSAGE);
assertEquals(1,getAppender().getEvents().size());
}
@Test
public void untrackedCategory()
{
String c=getNextTestCategory();
// Undo addition of appender to the root logger for this test,
// so that we can test explicit tracking (which, if we did not
// do this removal, would result in duplicate messages emitted
// when the appender is added to a specific logger).
Logger.getRootLogger().removeAppender(getAppender());
// Default logging is turned off during parent class setup.
Logger.getLogger(c).error(TEST_MESSAGE);
assertEquals(0,getAppender().getEvents().size());
}
@Test
public void categoryTrack()
{
String c1=getNextTestCategory();
String c2=getNextTestCategory();
String c3=getNextTestCategory();
String c4=getNextTestCategory();
// Undo addition of appender to the root logger for this test,
// so that we can test explicit tracking (which, if we did not
// do this removal, would result in duplicate messages emitted
// when the appender is added to a specific logger).
Logger.getRootLogger().removeAppender(getAppender());
// Default logging is turned off during parent class setup.
Logger.getLogger(c1).error(TEST_MESSAGE);
Logger.getLogger(c2).info(TEST_MESSAGE);
assertEquals(0,getAppender().getEvents().size());
trackLogger(c2,Level.ERROR);
Logger.getLogger(c2).error(TEST_MESSAGE);
assertEquals(1,getAppender().getEvents().size());
Logger.getLogger(c1).info(TEST_MESSAGE);
assertEquals(1,getAppender().getEvents().size());
Logger.getLogger(c3).warn(TEST_MESSAGE);
assertEquals(1,getAppender().getEvents().size());
trackLogger(c3,Level.WARN);
Logger.getLogger(c2).error(TEST_MESSAGE);
assertEquals(2,getAppender().getEvents().size());
Logger.getLogger(c3).error(TEST_MESSAGE);
assertEquals(3,getAppender().getEvents().size());
Logger.getLogger(c1).warn(TEST_MESSAGE);
assertEquals(3,getAppender().getEvents().size());
Logger.getLogger(c3).info(TEST_MESSAGE);
assertEquals(3,getAppender().getEvents().size());
setDefaultLevel(Level.INFO);
trackLogger(c4);
Logger.getLogger(c2).error(TEST_MESSAGE);
assertEquals(4,getAppender().getEvents().size());
Logger.getLogger(c3).warn(TEST_MESSAGE);
assertEquals(5,getAppender().getEvents().size());
Logger.getLogger(c3).info(TEST_MESSAGE);
assertEquals(5,getAppender().getEvents().size());
Logger.getLogger(c4).info(TEST_MESSAGE);
assertEquals(6,getAppender().getEvents().size());
Logger.getLogger(c4).debug(TEST_MESSAGE);
assertEquals(6,getAppender().getEvents().size());
Logger.getLogger(c1).warn(TEST_MESSAGE);
assertEquals(6,getAppender().getEvents().size());
}
@Test
public void appenderReset()
{
String c=getNextTestCategory();
setLevel(c,Level.ERROR);
Logger.getLogger(c).error(TEST_MESSAGE);
assertEquals(1,getAppender().getEvents().size());
resetAppender();
assertEquals(0,getAppender().getEvents().size());
}
@Test
public void noEventsAsString()
{
assertEquals("Event count: 0",getEventsAsString());
}
@Test
public void twoEventsAsString()
{
String c=getNextTestCategory();
setLevel(c,Level.INFO);
Logger.getLogger(c).info(TEST_MESSAGE);
Logger.getLogger(c).warn(TEST_MESSAGE);
assertEquals("Event count: 2"+
SystemUtils.LINE_SEPARATOR+
"Event 0: level: INFO"+
"; logger: "+c+
"; message: "+TEST_MESSAGE+
"; location: "+TEST_LOCATION+
SystemUtils.LINE_SEPARATOR+
"Event 1: level: WARN"+
"; logger: "+c+
"; message: "+TEST_MESSAGE+
"; location: "+TEST_LOCATION,getEventsAsString());
}
}