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