package eu.europeana.cloud.service.commons; import eu.europeana.cloud.service.commons.logging.LoggerUpdater; import org.apache.log4j.Appender; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.EnhancedPatternLayout; import org.apache.log4j.FileAppender; import org.apache.log4j.Layout; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; import org.apache.log4j.Priority; import org.apache.log4j.spi.LoggerFactory; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import java.util.Enumeration; public class LoggerUpdaterTest { private Logger wellFormedLogger; private Logger loggerWithoutAppenders; private static final String PATTERN = "%d{yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}{GMT} mcs instanceName - %p : %m"; private static final String TEXT_TO_REPLACE = "instanceName"; private static final String NEW_TEXT_VALUE = "sampleInstance"; @Before public void prepareTestLoggers(){ prepareWellFormedLogger(); prepareLoggerWithoutAppenders(); } @Test public void testWellFormedLogger(){ LoggerUpdater loggerUpdater = new LoggerUpdater(); loggerUpdater.update(wellFormedLogger, TEXT_TO_REPLACE, NEW_TEXT_VALUE); assertLogger(wellFormedLogger); } @Test public void testLoggerWithoutAppenders(){ LoggerUpdater loggerUpdater = new LoggerUpdater(); loggerUpdater.update(loggerWithoutAppenders, TEXT_TO_REPLACE, NEW_TEXT_VALUE); assertLogger(loggerWithoutAppenders); } private void assertLogger(Logger logger){ Enumeration<Appender> appenderEnumerator = logger.getAllAppenders(); while (appenderEnumerator.hasMoreElements()) { Appender appender = appenderEnumerator.nextElement(); if (appender.getLayout() instanceof PatternLayout) { PatternLayout patternLayout = (PatternLayout) appender.getLayout(); Assert.assertTrue(patternLayout.getConversionPattern().contains(NEW_TEXT_VALUE)); } else if (appender.getLayout() instanceof EnhancedPatternLayout) { EnhancedPatternLayout patternLayout = (EnhancedPatternLayout) appender.getLayout(); Assert.assertTrue(patternLayout.getConversionPattern().contains(NEW_TEXT_VALUE)); } } } private void prepareWellFormedLogger(){ wellFormedLogger = Logger.getLogger("sampleTestLogger"); wellFormedLogger.addAppender(createConsoleAppender()); wellFormedLogger.addAppender(createFileAppender()); } private void prepareLoggerWithoutAppenders(){ loggerWithoutAppenders = Logger.getLogger("sampleTestLoggerWithoutAppenders"); } private Appender createConsoleAppender(){ ConsoleAppender consoleAppender = new ConsoleAppender(); consoleAppender.setLayout(new EnhancedPatternLayout(PATTERN)); consoleAppender.setThreshold(Level.INFO); consoleAppender.activateOptions(); return consoleAppender; } private Appender createFileAppender(){ FileAppender fa = new FileAppender(); fa.setName("FileLogger"); fa.setFile("mylog.log"); fa.setLayout(new PatternLayout(PATTERN)); fa.setThreshold(Level.DEBUG); fa.setAppend(true); fa.activateOptions(); return fa; } }