BUG 2839: Config: remove dependencies on commons-io
[controller.git] / opendaylight / config / logback-config / src / test / java / org / opendaylight / controller / config / yang / logback / config / LogbackWithXmlConfigModuleTest.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.controller.config.yang.logback.config;
9
10 import static org.junit.Assert.assertEquals;
11
12 import ch.qos.logback.classic.LoggerContext;
13 import ch.qos.logback.classic.joran.JoranConfigurator;
14 import ch.qos.logback.core.joran.spi.JoranException;
15 import com.google.common.collect.Lists;
16 import java.io.File;
17 import java.io.IOException;
18 import java.lang.management.ManagementFactory;
19 import java.util.List;
20 import javax.management.InstanceAlreadyExistsException;
21 import javax.management.InstanceNotFoundException;
22 import javax.management.JMX;
23 import javax.management.MalformedObjectNameException;
24 import javax.management.ObjectName;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.opendaylight.controller.config.api.ConflictingVersionException;
28 import org.opendaylight.controller.config.api.ValidationException;
29 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
30 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
31 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
32 import org.slf4j.LoggerFactory;
33
34 public class LogbackWithXmlConfigModuleTest extends AbstractConfigTest {
35
36     private LogbackModuleFactory factory;
37     private LoggerContext lc;
38
39     @Before
40     public void setUp() throws JoranException, IOException {
41
42         factory = new LogbackModuleFactory();
43         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,factory));
44
45         lc = (LoggerContext) LoggerFactory.getILoggerFactory();
46         JoranConfigurator configurator = new JoranConfigurator();
47         lc.reset();
48         configurator.setContext(lc);
49         configurator.doConfigure("src/test/resources/simple_config_logback.xml");
50         File f = new File("target/it");
51         if (f.exists())
52             cleanDirectory(f);
53     }
54
55     /**
56      * Tests configuration of Logger factory.
57      *
58      * @throws MalformedObjectNameException
59      */
60     @Test
61     public void test() throws InstanceAlreadyExistsException, InstanceNotFoundException, MalformedObjectNameException, ValidationException, ConflictingVersionException {
62
63         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
64         ObjectName nameRetrieved = transaction.lookupConfigBean(factory.getImplementationName(), LogbackModuleFactory.INSTANCE_NAME);
65
66         LogbackModuleMXBean bean = transaction.newMXBeanProxy(nameRetrieved, LogbackModuleMXBean.class);
67
68         assertEquals(1, bean.getConsoleAppenderTO().size());
69
70         assertEquals(1, bean.getRollingFileAppenderTO().size());
71
72         transaction.commit();
73
74         transaction = configRegistryClient.createTransaction();
75
76         nameRetrieved = transaction.lookupConfigBean(factory.getImplementationName(), "singleton");
77
78         bean = JMX.newMXBeanProxy(platformMBeanServer, nameRetrieved, LogbackModuleMXBean.class);
79
80         assertEquals(1, bean.getConsoleAppenderTO().size());
81         assertEquals(1, bean.getRollingFileAppenderTO().size());
82
83     }
84
85     /**
86      * Tests filtering loggers. Loggers inherited from ROOT logger and duplicate
87      * loggers should be removed.
88      */
89     @Test
90     public void testAllLoggers() throws InstanceAlreadyExistsException, InstanceNotFoundException {
91         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
92
93         LogbackModuleMXBean bean = JMX.newMXBeanProxy(ManagementFactory.getPlatformMBeanServer(),
94                 transaction.lookupConfigBean("logback", "singleton"), LogbackModuleMXBean.class);
95
96         assertEquals(5, bean.getLoggerTO().size());
97     }
98
99     /**
100      * Add new logger using FileAppender
101      *
102      * @throws MalformedObjectNameException
103      */
104     @Test
105     public void testAddNewLogger() throws InstanceAlreadyExistsException, InstanceNotFoundException,
106             MalformedObjectNameException, ValidationException, ConflictingVersionException {
107
108         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
109         ObjectName nameRetrieved = transaction.lookupConfigBean(factory.getImplementationName(), LogbackModuleFactory.INSTANCE_NAME);
110         LogbackModuleMXBean bean = transaction.newMXBeanProxy(nameRetrieved, LogbackModuleMXBean.class);
111
112         assertEquals(5, bean.getLoggerTO().size());
113
114         List<LoggerTO> loggers = Lists.newArrayList(bean.getLoggerTO());
115         LoggerTO logger = new LoggerTO();
116         logger.setAppenders(Lists.newArrayList("FILE"));
117         logger.setLevel("INFO");
118         logger.setLoggerName("fileLogger");
119         loggers.add(logger);
120         bean.setLoggerTO(loggers);
121
122         transaction.commit();
123
124         transaction = configRegistryClient.createTransaction();
125         nameRetrieved = transaction.lookupConfigBean(factory.getImplementationName(), "singleton");
126         bean = JMX.newMXBeanProxy(platformMBeanServer, nameRetrieved, LogbackModuleMXBean.class);
127
128         assertEquals(6, bean.getLoggerTO().size());
129     }
130
131 }