/**
* Copyright (C) 2000-2016 Atomikos <info@atomikos.com>
*
* LICENSE CONDITIONS
*
* See http://www.atomikos.com/Main/WhichLicenseApplies for details.
*/
package com.atomikos.logging;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.LogEvent;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
public class Log4j2LoggerFactoryTestJUnit extends AbstractLoggerFactoryTest {
private org.apache.logging.log4j.core.Appender mockedAppender = Mockito
.mock(org.apache.logging.log4j.core.Appender.class);
public void setUp() {
LoggerFactory
.setLoggerFactoryDelegate(new Log4j2LoggerFactoryDelegate());
logger = LoggerFactory.createLogger(getClass());
Mockito.when(mockedAppender.getName()).thenReturn("mock");
Mockito.when(mockedAppender.isStarted()).thenReturn(true);
getUnderlyingLogger().addAppender(mockedAppender);
getUnderlyingLogger().setLevel(Level.INFO);
}
public void testAssertLog4j2LoggerCreated() {
assertTrue(logger instanceof Log4j2Logger);
}
public void testLogDebug() {
configureLoggingFrameworkWithDebug();
logger.logDebug(MESSAGE);
assertLoggedAsDebug();
}
@Override
protected void assertLoggedAsDebug() {
ArgumentCaptor<LogEvent> arg = ArgumentCaptor.forClass(LogEvent.class);
Mockito.verify(mockedAppender).append(arg.capture());
// Mockito.verify(mockedAppender).doAppend(arg.capture());
LogEvent loggingEvent = arg.getValue();
assertLoggingEvent(loggingEvent, Level.DEBUG, false);
}
@Override
protected void assertLoggedAsDebugWithException() {
ArgumentCaptor<LogEvent> arg = ArgumentCaptor.forClass(LogEvent.class);
Mockito.verify(mockedAppender).append(arg.capture());
LogEvent loggingEvent = arg.getValue();
assertLoggingEvent(loggingEvent, Level.DEBUG, true);
}
private void assertLoggingEvent(LogEvent loggingEvent, Level expectedLevel,
boolean withThrowable) {
assertEquals(MESSAGE, loggingEvent.getMessage().getFormattedMessage());
assertEquals(expectedLevel, loggingEvent.getLevel());
if (withThrowable) {
assertNotNull(loggingEvent.getThrown());
} else {
assertNull(loggingEvent.getThrown());
}
}
@Override
protected void assertLoggedAsInfo() {
ArgumentCaptor<LogEvent> arg = ArgumentCaptor.forClass(LogEvent.class);
Mockito.verify(mockedAppender).append(arg.capture());
LogEvent loggingEvent = arg.getValue();
assertLoggingEvent(loggingEvent, Level.INFO, false);
}
@Override
protected void assertLoggedAsInfoWithException() {
ArgumentCaptor<LogEvent> arg = ArgumentCaptor.forClass(LogEvent.class);
Mockito.verify(mockedAppender).append(arg.capture());
LogEvent loggingEvent = arg.getValue();
assertLoggingEvent(loggingEvent, Level.INFO, true);
}
@Override
protected void assertLoggedAsWarning() {
ArgumentCaptor<LogEvent> arg = ArgumentCaptor.forClass(LogEvent.class);
Mockito.verify(mockedAppender).append(arg.capture());
LogEvent loggingEvent = arg.getValue();
assertLoggingEvent(loggingEvent, Level.WARN, false);
}
@Override
protected void assertLoggedAsWarningWithException() {
ArgumentCaptor<LogEvent> arg = ArgumentCaptor.forClass(LogEvent.class);
Mockito.verify(mockedAppender).append(arg.capture());
LogEvent loggingEvent = arg.getValue();
assertLoggingEvent(loggingEvent, Level.WARN, true);
}
public void testIsInfoEnabled() {
getUnderlyingLogger().setLevel(Level.WARN);
super.testIsInfoEnabled();
}
@Override
protected void configureLoggingFrameworkWithInfo() {
getUnderlyingLogger().setLevel(Level.INFO);
}
@Override
protected void configureLoggingFrameworkWithDebug() {
getUnderlyingLogger().setLevel(Level.DEBUG);
}
private org.apache.logging.log4j.core.Logger getUnderlyingLogger() {
return (org.apache.logging.log4j.core.Logger) LogManager
.getLogger(getClass());
}
@Override
protected void assertLoggedAsError() {
ArgumentCaptor<LogEvent> arg = ArgumentCaptor.forClass(LogEvent.class);
Mockito.verify(mockedAppender).append(arg.capture());
LogEvent loggingEvent = arg.getValue();
assertLoggingEvent(loggingEvent, Level.ERROR, false);
}
@Override
protected void assertLoggedAsErrorWithException() {
ArgumentCaptor<LogEvent> arg = ArgumentCaptor.forClass(LogEvent.class);
Mockito.verify(mockedAppender).append(arg.capture());
LogEvent loggingEvent = arg.getValue();
assertLoggingEvent(loggingEvent, Level.ERROR, true);
}
@Override
protected void configureLoggingFrameworkWithNone() {
getUnderlyingLogger().setLevel(Level.OFF);
}
@Override
protected void configureLoggingFrameworkWithError() {
getUnderlyingLogger().setLevel(Level.ERROR);
}
@Override
protected void configureLoggingFrameworkWithTrace() {
getUnderlyingLogger().setLevel(Level.TRACE);
}
@Override
protected void assertLoggedAsTrace() {
ArgumentCaptor<LogEvent> arg = ArgumentCaptor.forClass(LogEvent.class);
Mockito.verify(mockedAppender).append(arg.capture());
LogEvent loggingEvent = arg.getValue();
assertLoggingEvent(loggingEvent, Level.TRACE, false);
}
@Override
protected void assertLoggedAsTraceWithException() {
ArgumentCaptor<LogEvent> arg = ArgumentCaptor.forClass(LogEvent.class);
Mockito.verify(mockedAppender).append(arg.capture());
LogEvent loggingEvent = arg.getValue();
assertLoggingEvent(loggingEvent, Level.TRACE, true);
}
}