Merge "Add MD-SAL artifacts"
[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.apache.commons.io.FileUtils;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.opendaylight.controller.config.api.ConflictingVersionException;
29 import org.opendaylight.controller.config.api.ValidationException;
30 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
31 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
32 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
33 import org.slf4j.LoggerFactory;
34
35 public class LogbackWithXmlConfigModuleTest extends AbstractConfigTest {
36
37     private LogbackModuleFactory factory;
38     private LoggerContext lc;
39
40     @Before
41     public void setUp() throws JoranException, IOException {
42
43         factory = new LogbackModuleFactory();
44         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,factory));
45
46         lc = (LoggerContext) LoggerFactory.getILoggerFactory();
47         JoranConfigurator configurator = new JoranConfigurator();
48         lc.reset();
49         configurator.setContext(lc);
50         configurator.doConfigure("src/test/resources/simple_config_logback.xml");
51         File f = new File("target/it");
52         if (f.exists())
53             FileUtils.cleanDirectory(f);
54     }
55
56     /**
57      * Tests configuration of Logger factory.
58      *
59      * @throws MalformedObjectNameException
60      */
61     @Test
62     public void test() throws InstanceAlreadyExistsException, InstanceNotFoundException, MalformedObjectNameException, ValidationException, ConflictingVersionException {
63
64         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
65         ObjectName nameRetrieved = transaction.lookupConfigBean(factory.getImplementationName(), LogbackModuleFactory.INSTANCE_NAME);
66
67         LogbackModuleMXBean bean = transaction.newMXBeanProxy(nameRetrieved, LogbackModuleMXBean.class);
68
69         assertEquals(1, bean.getConsoleAppenderTO().size());
70
71         assertEquals(1, bean.getRollingFileAppenderTO().size());
72
73         transaction.commit();
74
75         transaction = configRegistryClient.createTransaction();
76
77         nameRetrieved = transaction.lookupConfigBean(factory.getImplementationName(), "singleton");
78
79         bean = JMX.newMXBeanProxy(platformMBeanServer, nameRetrieved, LogbackModuleMXBean.class);
80
81         assertEquals(1, bean.getConsoleAppenderTO().size());
82         assertEquals(1, bean.getRollingFileAppenderTO().size());
83
84     }
85
86     /**
87      * Tests filtering loggers. Loggers inherited from ROOT logger and duplicate
88      * loggers should be removed.
89      */
90     @Test
91     public void testAllLoggers() throws InstanceAlreadyExistsException, InstanceNotFoundException {
92         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
93
94         LogbackModuleMXBean bean = JMX.newMXBeanProxy(ManagementFactory.getPlatformMBeanServer(),
95                 transaction.lookupConfigBean("logback", "singleton"), LogbackModuleMXBean.class);
96
97         assertEquals(5, bean.getLoggerTO().size());
98     }
99
100     /**
101      * Add new logger using FileAppender
102      *
103      * @throws MalformedObjectNameException
104      */
105     @Test
106     public void testAddNewLogger() throws InstanceAlreadyExistsException, InstanceNotFoundException,
107             MalformedObjectNameException, ValidationException, ConflictingVersionException {
108
109         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
110         ObjectName nameRetrieved = transaction.lookupConfigBean(factory.getImplementationName(), LogbackModuleFactory.INSTANCE_NAME);
111         LogbackModuleMXBean bean = transaction.newMXBeanProxy(nameRetrieved, LogbackModuleMXBean.class);
112
113         assertEquals(5, bean.getLoggerTO().size());
114
115         List<LoggerTO> loggers = Lists.newArrayList(bean.getLoggerTO());
116         LoggerTO logger = new LoggerTO();
117         logger.setAppenders(Lists.newArrayList("FILE"));
118         logger.setLevel("INFO");
119         logger.setLoggerName("fileLogger");
120         loggers.add(logger);
121         bean.setLoggerTO(loggers);
122
123         transaction.commit();
124
125         transaction = configRegistryClient.createTransaction();
126         nameRetrieved = transaction.lookupConfigBean(factory.getImplementationName(), "singleton");
127         bean = JMX.newMXBeanProxy(platformMBeanServer, nameRetrieved, LogbackModuleMXBean.class);
128
129         assertEquals(6, bean.getLoggerTO().size());
130     }
131
132 }