BUG 2839: Config: remove dependencies on commons-io
[controller.git] / opendaylight / config / logback-config / src / test / java / org / opendaylight / controller / config / yang / logback / config / LogbackModuleWithInitialConfigurationTest.java
index 2bdfa47b5492a3e752ba57b193d8fe2ec82d9a1e..f467bc504dc1f97bfdae3a2e104201dd39684b87 100644 (file)
@@ -9,20 +9,29 @@ package org.opendaylight.controller.config.yang.logback.config;
 
 import static org.junit.Assert.assertEquals;
 
+import ch.qos.logback.classic.LoggerContext;
+import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
+import ch.qos.logback.classic.joran.JoranConfigurator;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.joran.spi.JoranException;
+import ch.qos.logback.core.rolling.FixedWindowRollingPolicy;
+import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy;
+import com.google.common.collect.Lists;
 import java.io.File;
 import java.io.IOException;
 import java.lang.management.ManagementFactory;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
-
 import javax.management.InstanceAlreadyExistsException;
+import javax.management.InstanceNotFoundException;
 import javax.management.JMX;
+import javax.management.MalformedObjectNameException;
 import javax.management.ObjectName;
-
-import org.apache.commons.io.FileUtils;
 import org.junit.Before;
 import org.junit.Test;
+import org.opendaylight.controller.config.api.ConflictingVersionException;
+import org.opendaylight.controller.config.api.ValidationException;
 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
@@ -30,18 +39,7 @@ import org.opendaylight.controller.config.util.ConfigTransactionClient;
 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
 import org.slf4j.LoggerFactory;
 
-import ch.qos.logback.classic.LoggerContext;
-import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
-import ch.qos.logback.classic.joran.JoranConfigurator;
-import ch.qos.logback.classic.spi.ILoggingEvent;
-import ch.qos.logback.core.joran.spi.JoranException;
-import ch.qos.logback.core.rolling.FixedWindowRollingPolicy;
-import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy;
-
-import com.google.common.collect.Lists;
-
-public class LogbackModuleWithInitialConfigurationTest extends
-        AbstractConfigTest {
+public class LogbackModuleWithInitialConfigurationTest extends AbstractConfigTest {
 
     private LogbackModuleFactory factory;
 
@@ -49,36 +47,32 @@ public class LogbackModuleWithInitialConfigurationTest extends
     public void setUp() throws IOException, ClassNotFoundException {
 
         factory = new LogbackModuleFactory();
-        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
-                factory));
+        super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,factory));
     }
 
     /**
      * Tests that initial configuration was changed. Changed attributes:
-     * location, fileName, duplicateInsertTries
-     *
+     * location, fileName, duplicateInsertTries. Added new FileAppender.
      */
     @Test
     public void test() throws Exception {
 
         createBeans();
 
-        ConfigTransactionClient transaction = configRegistryClient
-                .createTransaction();
+        ConfigTransactionClient transaction = configRegistryClient.createTransaction();
 
-        LogbackModuleMXBean bean = JMX.newMXBeanProxy(
-                ManagementFactory.getPlatformMBeanServer(),
-                transaction.lookupConfigBean("logback", "singleton"),
-                LogbackModuleMXBean.class);
+        LogbackModuleMXBean bean = JMX.newMXBeanProxy(ManagementFactory.getPlatformMBeanServer(),
+                transaction.lookupConfigBean("logback", "singleton"), LogbackModuleMXBean.class);
         assertEquals(1, bean.getConsoleAppenderTO().size());
         assertEquals(1, bean.getRollingFileAppenderTO().size());
+        assertEquals(0, bean.getFileAppenderTO().size());
         assertEquals(1, bean.getLoggerTO().size());
 
         RollingFileAppenderTO rolling = new RollingFileAppenderTO();
-        RollingFileAppenderTO old = bean
-                .getRollingFileAppenderTO().get(0);
+        RollingFileAppenderTO old = bean.getRollingFileAppenderTO().get(0);
         rolling.setAppend(old.getAppend());
         rolling.setEncoderPattern(old.getEncoderPattern());
+        rolling.setRollingPolicyType(old.getRollingPolicyType());
         rolling.setFileName("target/logFile1.log");
         rolling.setFileNamePattern("target/%i.log");
         rolling.setMaxFileSize(old.getMaxFileSize());
@@ -91,59 +85,74 @@ public class LogbackModuleWithInitialConfigurationTest extends
         console.setName("SYSTEM");
         console.setThresholdFilter("DEBUG");
 
+        FileAppenderTO file = new FileAppenderTO();
+        file.setName("FILE_APPENDER");
+        file.setAppend(true);
+        file.setEncoderPattern("%-4relative [%thread] %-5level %logger{35} - %msg%n");
+        file.setFileName("target/testFile.log");
+
         bean.setConsoleAppenderTO(Lists.newArrayList(console));
         bean.setRollingFileAppenderTO(Lists.newArrayList(rolling));
+        bean.setFileAppenderTO(Lists.newArrayList(file));
 
         LoggerTO logger = new LoggerTO();
         logger.setLevel("INFO");
         logger.setLoggerName("logger");
         logger.setAppenders(Lists.newArrayList("SYSTEM"));
-        List<LoggerTO> loggers = Lists
-                .newArrayList(logger);
+
+        LoggerTO fileLogger = new LoggerTO();
+        fileLogger.setLevel("DEBUG");
+        fileLogger.setLoggerName("fileLogger");
+        fileLogger.setAppenders(Lists.newArrayList("FILE_APPENDER"));
+
+        List<LoggerTO> loggers = Lists.newArrayList(logger, fileLogger);
         bean.setLoggerTO(loggers);
 
         transaction.commit();
 
         LogbackModuleMXBean logback = configRegistryClient.newMXBeanProxy(
-                ObjectNameUtil.createReadOnlyModuleON("logback", "singleton"),
-                LogbackModuleMXBean.class);
-
+                ObjectNameUtil.createReadOnlyModuleON("logback", "singleton"), LogbackModuleMXBean.class);
 
-        List<RollingFileAppenderTO> rollingList = logback
-                .getRollingFileAppenderTO();
+        List<RollingFileAppenderTO> rollingList = logback.getRollingFileAppenderTO();
         assertEquals(1, rollingList.size());
 
-        RollingFileAppenderTO rollingApp = rollingList
-                .get(0);
+        RollingFileAppenderTO rollingApp = rollingList.get(0);
         assertEquals(rollingApp.getFileName(), "target/logFile1.log");
         assertEquals(rollingApp.getName(), "FILE");
 
-        List<ConsoleAppenderTO> consoleList = logback
-                .getConsoleAppenderTO();
+        List<ConsoleAppenderTO> consoleList = logback.getConsoleAppenderTO();
         assertEquals(1, consoleList.size());
 
-        ConsoleAppenderTO consoleApp = consoleList
-                .get(0);
+        ConsoleAppenderTO consoleApp = consoleList.get(0);
         assertEquals(consoleApp.getThresholdFilter(), "DEBUG");
         assertEquals(consoleApp.getName(), "SYSTEM");
 
+        List<FileAppenderTO> fileList = logback.getFileAppenderTO();
+        assertEquals(1, fileList.size());
+
+        FileAppenderTO fileApp = fileList.get(0);
+        assertEquals(fileApp.getFileName(), "target/testFile.log");
+        assertEquals(fileApp.getName(), "FILE_APPENDER");
+
         loggers = logback.getLoggerTO();
-        assertEquals(1, loggers.size());
+        assertEquals(2, loggers.size());
+        assertEquals("logger", loggers.get(0).getLoggerName());
+        assertEquals("fileLogger", loggers.get(1).getLoggerName());
 
     }
 
-    public ObjectName createBeans() throws JoranException,
-            InstanceAlreadyExistsException, IOException {
+    public ObjectName createBeans() throws JoranException, InstanceAlreadyExistsException, IOException,
+            MalformedObjectNameException, InstanceNotFoundException, ValidationException, ConflictingVersionException {
 
         LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
 
         JoranConfigurator configurator = new JoranConfigurator();
         configurator.setContext(lc);
-        configurator
-                .doConfigure("src/test/resources/simple_config_logback.xml");
+        configurator.doConfigure("src/test/resources/simple_config_logback.xml");
         File f = new File("target/it");
-        if (f.exists())
-            FileUtils.cleanDirectory(f);
+        if (f.exists()) {
+            cleanDirectory(f);
+        }
         ch.qos.logback.classic.Logger logger = lc.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME);
         ch.qos.logback.core.rolling.RollingFileAppender<ILoggingEvent> fileAppender = (ch.qos.logback.core.rolling.RollingFileAppender<ILoggingEvent>) logger
                 .getAppender("VARLOGFILE");
@@ -155,12 +164,11 @@ public class LogbackModuleWithInitialConfigurationTest extends
         List<RollingFileAppenderTO> rollingAppenders = new ArrayList<>();
         RollingFileAppenderTO rollingApp = new RollingFileAppenderTO();
         rollingApp.setAppend(fileAppender.isAppend());
-        PatternLayoutEncoder enc = (PatternLayoutEncoder) fileAppender
-                .getEncoder();
+        PatternLayoutEncoder enc = (PatternLayoutEncoder) fileAppender.getEncoder();
         rollingApp.setEncoderPattern(enc.getPattern());
         rollingApp.setFileName(fileAppender.getFile());
-        FixedWindowRollingPolicy rollingPolicy = (FixedWindowRollingPolicy) fileAppender
-                .getRollingPolicy();
+        FixedWindowRollingPolicy rollingPolicy = (FixedWindowRollingPolicy) fileAppender.getRollingPolicy();
+        rollingApp.setRollingPolicyType("FixedWindowRollingPolicy");
         rollingApp.setMaxIndex(rollingPolicy.getMaxIndex());
         rollingApp.setMinIndex(rollingPolicy.getMinIndex());
         SizeBasedTriggeringPolicy<ILoggingEvent> triggeringPolicy = (SizeBasedTriggeringPolicy<ILoggingEvent>) fileAppender
@@ -182,28 +190,27 @@ public class LogbackModuleWithInitialConfigurationTest extends
         consoleApp.setThresholdFilter("ALL");
         consoleAppenders.add(consoleApp);
 
+        List<FileAppenderTO> fileAppenders = new ArrayList<>();
+
         List<LoggerTO> loggersDTOs = new ArrayList<>();
         LoggerTO log = new LoggerTO();
-        log.setAppenders(Arrays.asList(fileAppender.getName(),
-                consoleApp.getName()));
+        log.setAppenders(Arrays.asList(fileAppender.getName(), consoleApp.getName()));
 
         log.setLevel(logger.getLevel().toString());
         log.setLoggerName(logger.getName());
         loggersDTOs.add(log);
 
-        ConfigTransactionJMXClient transaction = configRegistryClient
-                .createTransaction();
-        ObjectName nameCreated = transaction.createModule(
-                factory.getImplementationName(), "singleton");
-        LogbackModuleMXBean bean = transaction.newMXBeanProxy(nameCreated,
-                LogbackModuleMXBean.class);
+        ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+        ObjectName nameRetrieved = transaction.lookupConfigBean(factory.getImplementationName(), LogbackModuleFactory.INSTANCE_NAME);
+        LogbackModuleMXBean bean = transaction.newMXBeanProxy(nameRetrieved, LogbackModuleMXBean.class);
 
         bean.setLoggerTO(loggersDTOs);
         bean.setRollingFileAppenderTO(rollingAppenders);
         bean.setConsoleAppenderTO(consoleAppenders);
+        bean.setFileAppenderTO(fileAppenders);
 
         transaction.commit();
 
-        return nameCreated;
+        return nameRetrieved;
     }
 }