Inital code drop of logback-config.
[controller.git] / opendaylight / config / logback-config / src / test / java / org / opendaylight / controller / config / yang / logback / config / LogbackModuleWithInitialConfigurationTest.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 java.io.File;
13 import java.io.IOException;
14 import java.lang.management.ManagementFactory;
15 import java.util.ArrayList;
16 import java.util.Arrays;
17 import java.util.List;
18
19 import javax.management.InstanceAlreadyExistsException;
20 import javax.management.JMX;
21 import javax.management.ObjectName;
22
23 import org.apache.commons.io.FileUtils;
24 import org.junit.Before;
25 import org.junit.Test;
26 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
27 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
28 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
29 import org.opendaylight.controller.config.util.ConfigTransactionClient;
30 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
31 import org.slf4j.LoggerFactory;
32
33 import ch.qos.logback.classic.LoggerContext;
34 import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
35 import ch.qos.logback.classic.joran.JoranConfigurator;
36 import ch.qos.logback.classic.spi.ILoggingEvent;
37 import ch.qos.logback.core.joran.spi.JoranException;
38 import ch.qos.logback.core.rolling.FixedWindowRollingPolicy;
39 import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy;
40
41 import com.google.common.collect.Lists;
42
43 public class LogbackModuleWithInitialConfigurationTest extends
44         AbstractConfigTest {
45
46     private LogbackModuleFactory factory;
47
48     @Before
49     public void setUp() throws IOException, ClassNotFoundException {
50
51         factory = new LogbackModuleFactory();
52         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
53                 factory));
54     }
55
56     /**
57      * Tests that initial configuration was changed. Changed attributes:
58      * location, fileName, duplicateInsertTries
59      *
60      */
61     @Test
62     public void test() throws Exception {
63
64         createBeans();
65
66         ConfigTransactionClient transaction = configRegistryClient
67                 .createTransaction();
68
69         LogbackModuleMXBean bean = JMX.newMXBeanProxy(
70                 ManagementFactory.getPlatformMBeanServer(),
71                 transaction.lookupConfigBean("logback", "singleton"),
72                 LogbackModuleMXBean.class);
73         assertEquals(1, bean.getConsoleAppenderTO().size());
74         assertEquals(1, bean.getRollingFileAppenderTO().size());
75         assertEquals(1, bean.getLoggerTO().size());
76
77         RollingFileAppenderTO rolling = new RollingFileAppenderTO();
78         RollingFileAppenderTO old = bean
79                 .getRollingFileAppenderTO().get(0);
80         rolling.setAppend(old.getAppend());
81         rolling.setEncoderPattern(old.getEncoderPattern());
82         rolling.setFileName("target/logFile1.log");
83         rolling.setFileNamePattern("target/%i.log");
84         rolling.setMaxFileSize(old.getMaxFileSize());
85         rolling.setMinIndex(old.getMinIndex());
86         rolling.setMaxIndex(old.getMaxIndex());
87         rolling.setName("FILE");
88
89         ConsoleAppenderTO console = new ConsoleAppenderTO();
90         console.setEncoderPattern("%date %level [%thread] %logger{10} %msg%n");
91         console.setName("SYSTEM");
92         console.setThresholdFilter("DEBUG");
93
94         bean.setConsoleAppenderTO(Lists.newArrayList(console));
95         bean.setRollingFileAppenderTO(Lists.newArrayList(rolling));
96
97         LoggerTO logger = new LoggerTO();
98         logger.setLevel("INFO");
99         logger.setLoggerName("logger");
100         logger.setAppenders(Lists.newArrayList("SYSTEM"));
101         List<LoggerTO> loggers = Lists
102                 .newArrayList(logger);
103         bean.setLoggerTO(loggers);
104
105         transaction.commit();
106
107         LogbackModuleMXBean logback = configRegistryClient.newMXBeanProxy(
108                 ObjectNameUtil.createReadOnlyModuleON("logback", "singleton"),
109                 LogbackModuleMXBean.class);
110
111
112         List<RollingFileAppenderTO> rollingList = logback
113                 .getRollingFileAppenderTO();
114         assertEquals(1, rollingList.size());
115
116         RollingFileAppenderTO rollingApp = rollingList
117                 .get(0);
118         assertEquals(rollingApp.getFileName(), "target/logFile1.log");
119         assertEquals(rollingApp.getName(), "FILE");
120
121         List<ConsoleAppenderTO> consoleList = logback
122                 .getConsoleAppenderTO();
123         assertEquals(1, consoleList.size());
124
125         ConsoleAppenderTO consoleApp = consoleList
126                 .get(0);
127         assertEquals(consoleApp.getThresholdFilter(), "DEBUG");
128         assertEquals(consoleApp.getName(), "SYSTEM");
129
130         loggers = logback.getLoggerTO();
131         assertEquals(1, loggers.size());
132
133     }
134
135     public ObjectName createBeans() throws JoranException,
136             InstanceAlreadyExistsException, IOException {
137
138         LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
139
140         JoranConfigurator configurator = new JoranConfigurator();
141         configurator.setContext(lc);
142         configurator
143                 .doConfigure("src/test/resources/simple_config_logback.xml");
144         File f = new File("target/it");
145         if (f.exists())
146             FileUtils.cleanDirectory(f);
147         ch.qos.logback.classic.Logger logger = lc.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME);
148         ch.qos.logback.core.rolling.RollingFileAppender<ILoggingEvent> fileAppender = (ch.qos.logback.core.rolling.RollingFileAppender<ILoggingEvent>) logger
149                 .getAppender("VARLOGFILE");
150         fileAppender.start();
151
152         ch.qos.logback.core.ConsoleAppender<ILoggingEvent> consoleAppender = (ch.qos.logback.core.ConsoleAppender<ILoggingEvent>) logger
153                 .getAppender("STDOUT");
154         consoleAppender.start();
155         List<RollingFileAppenderTO> rollingAppenders = new ArrayList<>();
156         RollingFileAppenderTO rollingApp = new RollingFileAppenderTO();
157         rollingApp.setAppend(fileAppender.isAppend());
158         PatternLayoutEncoder enc = (PatternLayoutEncoder) fileAppender
159                 .getEncoder();
160         rollingApp.setEncoderPattern(enc.getPattern());
161         rollingApp.setFileName(fileAppender.getFile());
162         FixedWindowRollingPolicy rollingPolicy = (FixedWindowRollingPolicy) fileAppender
163                 .getRollingPolicy();
164         rollingApp.setMaxIndex(rollingPolicy.getMaxIndex());
165         rollingApp.setMinIndex(rollingPolicy.getMinIndex());
166         SizeBasedTriggeringPolicy<ILoggingEvent> triggeringPolicy = (SizeBasedTriggeringPolicy<ILoggingEvent>) fileAppender
167                 .getTriggeringPolicy();
168         rollingApp.setMaxFileSize(triggeringPolicy.getMaxFileSize());
169         rollingApp.setName(fileAppender.getName());
170         rollingApp.setFileNamePattern(rollingPolicy.getFileNamePattern());
171         rollingAppenders.add(rollingApp);
172
173         assertEquals(rollingApp.getFileName(), "target/osgi.log");
174         assertEquals(rollingApp.getMaxFileSize(), "50MB");
175         assertEquals(rollingApp.getName(), "VARLOGFILE");
176
177         List<ConsoleAppenderTO> consoleAppenders = new ArrayList<>();
178         ConsoleAppenderTO consoleApp = new ConsoleAppenderTO();
179         enc = (PatternLayoutEncoder) consoleAppender.getEncoder();
180         consoleApp.setEncoderPattern(enc.getPattern());
181         consoleApp.setName(consoleAppender.getName());
182         consoleApp.setThresholdFilter("ALL");
183         consoleAppenders.add(consoleApp);
184
185         List<LoggerTO> loggersDTOs = new ArrayList<>();
186         LoggerTO log = new LoggerTO();
187         log.setAppenders(Arrays.asList(fileAppender.getName(),
188                 consoleApp.getName()));
189
190         log.setLevel(logger.getLevel().toString());
191         log.setLoggerName(logger.getName());
192         loggersDTOs.add(log);
193
194         ConfigTransactionJMXClient transaction = configRegistryClient
195                 .createTransaction();
196         ObjectName nameCreated = transaction.createModule(
197                 factory.getImplementationName(), "singleton");
198         LogbackModuleMXBean bean = transaction.newMXBeanProxy(nameCreated,
199                 LogbackModuleMXBean.class);
200
201         bean.setLoggerTO(loggersDTOs);
202         bean.setRollingFileAppenderTO(rollingAppenders);
203         bean.setConsoleAppenderTO(consoleAppenders);
204
205         transaction.commit();
206
207         return nameCreated;
208     }
209 }