75323d256e73de143a35c75bbfe9df1faf806d24
[controller.git] / opendaylight / config / logback-config / src / test / java / org / opendaylight / controller / config / yang / logback / config / LogbackModuleTest.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.assertThat;
11 import static org.junit.Assert.fail;
12 import static org.junit.matchers.JUnitMatchers.containsString;
13
14 import java.util.ArrayList;
15 import java.util.Arrays;
16 import java.util.List;
17 import javax.management.ObjectName;
18 import org.junit.Before;
19 import org.junit.Ignore;
20 import org.junit.Test;
21 import org.opendaylight.controller.config.api.ValidationException;
22 import org.opendaylight.controller.config.api.jmx.CommitStatus;
23 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
24 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
25 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
26
27 public class LogbackModuleTest extends AbstractConfigTest {
28
29     private static final String INSTANCE_NAME = "singleton";
30
31     private LogbackModuleFactory factory;
32
33     @Before
34     public void setUp() throws Exception {
35
36         factory = new LogbackModuleFactory();
37         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,factory));
38     }
39
40     @Test
41     public void testCreateBean() throws Exception {
42
43         CommitStatus status = createBeans(true, "target/rollingApp",
44                 "%-4relative [%thread] %-5level %logger{35} - %msg%n", "30MB", 1, 5, "target/%i.log", "rolling",
45                 "consoleName", "ALL", "logger1", "DEBUG", "FixedWindowRollingPolicy", 0, "FileAppender").commit();
46
47         assertBeanCount(1, factory.getImplementationName());
48         assertStatus(status, 1, 0, 0);
49     }
50
51     @Test
52     public void testReusingInstance() throws Exception {
53         createBeans(true, "target/rollingApp", "%-4relative [%thread] %-5level %logger{35} - %msg%n", "30MB", 1, 5,
54                 "target/%i.log", "rolling", "consoleName", "ALL", "logger1", "DEBUG", "FixedWindowRollingPolicy", 0,
55                 "FileAppender").commit();
56
57         assertBeanCount(1, factory.getImplementationName());
58
59         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
60         CommitStatus status = transaction.commit();
61
62         assertBeanCount(1, factory.getImplementationName());
63         assertStatus(status, 0, 0, 1);
64     }
65
66     @Test
67     public void testRecreateInstance() throws Exception {
68         createBeans(true, "target/rollingApp", "%-4relative [%thread] %-5level %logger{35} - %msg%n", "30MB", 1, 5,
69                 "target/%i.log", "rolling", "consoleName", "ALL", "logger1", "DEBUG", "FixedWindowRollingPolicy", 0,
70                 "FileAppender").commit();
71
72         assertBeanCount(1, LogbackModuleFactory.NAME);
73         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
74
75         ObjectName logback = transaction.lookupConfigBean(LogbackModuleFactory.NAME, "singleton");
76         LogbackModuleMXBean nwBean = transaction.newMXBeanProxy(logback, LogbackModuleMXBean.class);
77         CommitStatus status = transaction.commit();
78         assertBeanCount(1, LogbackModuleFactory.NAME);
79
80         assertStatus(status, 0, 0, 1);
81     }
82
83     @Test
84     public void testDestroyInstance() throws Exception {
85         createBeans(true, "target/rollingApp", "%-4relative [%thread] %-5level %logger{35} - %msg%n", "30MB", 1, 5,
86                 "target/%i.log", "rolling", "consoleName", "ALL", "logger1", "DEBUG", "FixedWindowRollingPolicy", 0,
87                 "FileAppender").commit();
88         assertBeanCount(1, factory.getImplementationName());
89
90         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
91         transaction.destroyModule(factory.getImplementationName(), INSTANCE_NAME);
92         CommitStatus status = transaction.commit();
93
94         assertBeanCount(0, factory.getImplementationName());
95         assertStatus(status, 0, 0, 0);
96     }
97
98     @Ignore
99     @Test
100     public void testValidation1() throws Exception {
101         try {
102             createBeans(true, "target/rollingApp", "%-4relative [%thread] %-5level %logger{35} - %msg%n", "30MB", 1, 5,
103                     "target/%i.log", "rolling", "consoleName", "ALL", "logger1", "DEBUG", "FixedWindowRollingPolicy",
104                     0, "FileAppender").commit();
105             fail();
106         } catch (ValidationException e) {
107             assertThat(e.getFailedValidations().toString(), containsString("FileName is null"));
108         }
109     }
110
111     @Test
112     public void testValidation2() throws Exception {
113         try {
114             createBeans(true, "target/rollingApp", null, "30MB", 1, 5, "target/%i.log", "rolling", "consoleName",
115                     "ALL", "logger1", "DEBUG", "FixedWindowRollingPolicy", 0, "FileAppender").commit();
116             fail();
117         } catch (ValidationException e) {
118             assertThat(e.getFailedValidations().toString(), containsString("EncoderPattern is null"));
119         }
120     }
121
122     @Test
123     public void testValidation4() throws Exception {
124         try {
125             createBeans(true, "target/rollingApp", "%-4relative [%thread] %-5level %logger{35} - %msg%n", null, 1, 5,
126                     "target/%i.log", "rolling", "consoleName", "ALL", "logger1", "DEBUG", "FixedWindowRollingPolicy",
127                     0, "FileAppender").commit();
128             fail();
129         } catch (ValidationException e) {
130             assertThat(e.getFailedValidations().toString(), containsString("MaxFileSize is null"));
131         }
132     }
133
134     @Test
135     public void testValidation6() throws Exception {
136         try {
137             createBeans(true, "", "%-4relative [%thread] %-5level %logger{35} - %msg%n", "30MB", 1, 5, "target/%i.log",
138                     "rolling", "consoleName", "ALL", "logger1", "DEBUG", "FixedWindowRollingPolicy", 0, "FileAppender")
139                     .commit();
140             fail();
141         } catch (ValidationException e) {
142             assertThat(e.getFailedValidations().toString(), containsString("FileName needs to be set"));
143         }
144     }
145
146     @Test
147     public void testValidation7() throws Exception {
148         try {
149             createBeans(
150
151             true, "target/rollingApp", "", "30MB", 1, 5, "target/%i.log", "rolling", "consoleName", "ALL", "logger1",
152                     "DEBUG", "FixedWindowRollingPolicy", 0, "FileAppender").commit();
153             fail();
154         } catch (ValidationException e) {
155             assertThat(e.getFailedValidations().toString(), containsString("EncoderPattern needs to be set"));
156         }
157     }
158
159     @Test
160     public void testValidation8() throws Exception {
161         try {
162             createBeans(true, "target/rollingApp", "%-4relative [%thread] %-5level %logger{35} - %msg%n", "30MB", 1, 5,
163                     "target/%i.log", "rolling", "consoleName", "ALL", null, "DEBUG", "FixedWindowRollingPolicy", 0,
164                     "FileAppender").commit();
165             fail();
166         } catch (ValidationException e) {
167             assertThat(e.getFailedValidations().toString(), containsString("LoggerName is null"));
168         }
169     }
170
171     @Test
172     public void testValidation9() throws Exception {
173         try {
174             createBeans(true, "target/rollingApp", "%-4relative [%thread] %-5level %logger{35} - %msg%n", "30MB", 1, 5,
175                     "target/%i.log", "rolling", "consoleName", "ALL", "", "DEBUG", "FixedWindowRollingPolicy", 0,
176                     "FileAppender").commit();
177             fail();
178         } catch (ValidationException e) {
179             assertThat(e.getFailedValidations().toString(), containsString("LoggerName needs to be set"));
180         }
181     }
182
183     @Test
184     public void testValidation10() throws Exception {
185         try {
186             createBeans(true, "target/rollingApp", "%-4relative [%thread] %-5level %logger{35} - %msg%n", "30MB", null,
187                     5, "target/%i.log", "rolling", "consoleName", "ALL", "logger1", "DEBUG",
188                     "FixedWindowRollingPolicy", 0, "FileAppender").commit();
189             fail();
190         } catch (ValidationException e) {
191             assertThat(e.getFailedValidations().toString(), containsString("MinIndex is null"));
192         }
193     }
194
195     @Test
196     public void testValidation11() throws Exception {
197         try {
198             createBeans(true, "target/rollingApp", "%-4relative [%thread] %-5level %logger{35} - %msg%n", "30MB", 1,
199                     null, "target/%i.log", "rolling", "consoleName", "ALL", "logger1", "DEBUG",
200                     "FixedWindowRollingPolicy", 0, "FileAppender").commit();
201             fail();
202         } catch (ValidationException e) {
203             assertThat(e.getFailedValidations().toString(), containsString("MaxIndex is null"));
204         }
205     }
206
207     @Test
208     public void testValidation12() throws Exception {
209         try {
210             createBeans(true, "target/rollingApp", "%-4relative [%thread] %-5level %logger{35} - %msg%n", "30MB", 1,
211                     null, "target/%i.log", "rolling", "consoleName", "ALL", "logger1", "DEBUG", null, 1, "FileAppender")
212                     .commit();
213             fail();
214         } catch (ValidationException e) {
215             assertThat(e.getFailedValidations().toString(), containsString("RollingPolicyType is null"));
216         }
217     }
218
219     @Test
220     public void testValidation13() throws Exception {
221         try {
222             createBeans(true, "target/rollingApp", "%-4relative [%thread] %-5level %logger{35} - %msg%n", "30MB", 1,
223                     null, "target/%i.log", "rolling", "consoleName", "ALL", "logger1", "DEBUG", "", 1, "FileAppender")
224                     .commit();
225             fail();
226         } catch (ValidationException e) {
227             assertThat(e.getFailedValidations().toString(), containsString("RollingPolicyType is not set"));
228         }
229     }
230
231     @Test
232     public void testValidation14() throws Exception {
233         try {
234             createBeans(true, "target/rollingApp", "%-4relative [%thread] %-5level %logger{35} - %msg%n", "30MB", 1,
235                     null, "target/%i.log", "rolling", "consoleName", "ALL", "logger1", "DEBUG", "RollingPolicy", 1,
236                     "FileAppender").commit();
237             fail();
238         } catch (ValidationException e) {
239             assertThat(e.getFailedValidations().toString(), containsString("RollingPolicyType is not supported"));
240         }
241     }
242
243     @Test
244     public void testTimeBasedRollingPolicy() throws Exception {
245         createBeans(true, "target/rollingApp", "%-4relative [%thread] %-5level %logger{35} - %msg%n", "30MB", null,
246                 null, "target/%d.log", "rolling", "consoleName", "ALL", "logger1", "DEBUG", "TimeBasedRollingPolicy",
247                 1, "FileAppender").commit();
248     }
249
250     private ConfigTransactionJMXClient createBeans(Boolean isAppend, String rollingFileName, String encoderPattern,
251             String maxFileSize, Integer minIndex, Integer maxIndex, String fileNamePattern, String rollingName,
252             String consoleName, String thresholdFilter, String loggerName, String level, String rollingPolicyType,
253             int maxHistory, String fileAppName) throws Exception {
254         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
255         ObjectName nameRetrieved = transaction.lookupConfigBean(factory.getImplementationName(), INSTANCE_NAME);
256         LogbackModuleMXBean bean = transaction.newMXBeanProxy(nameRetrieved, LogbackModuleMXBean.class);
257
258         List<RollingFileAppenderTO> rollingAppenders = new ArrayList<>();
259         RollingFileAppenderTO rollingAppender = new RollingFileAppenderTO();
260         rollingAppender.setAppend(isAppend);
261         rollingAppender.setEncoderPattern(encoderPattern);
262         rollingAppender.setFileName(rollingFileName);
263         rollingAppender.setMaxFileSize(maxFileSize);
264         rollingAppender.setMaxIndex(maxIndex);
265         rollingAppender.setMinIndex(minIndex);
266         rollingAppender.setFileNamePattern(fileNamePattern);
267         rollingAppender.setName(rollingName);
268         rollingAppender.setRollingPolicyType(rollingPolicyType);
269         rollingAppender.setMaxHistory(maxHistory);
270         rollingAppenders.add(rollingAppender);
271
272         List<ConsoleAppenderTO> consoleAppenders = new ArrayList<>();
273         ConsoleAppenderTO consoleAppender = new ConsoleAppenderTO();
274         consoleAppender.setEncoderPattern(encoderPattern);
275         consoleAppender.setName(consoleName);
276         consoleAppender.setThresholdFilter(thresholdFilter);
277         consoleAppenders.add(consoleAppender);
278
279         List<FileAppenderTO> fileAppenders = new ArrayList<>();
280         FileAppenderTO fileAppender = new FileAppenderTO();
281         fileAppender.setName(fileAppName);
282         fileAppender.setAppend(isAppend);
283         fileAppender.setEncoderPattern(encoderPattern);
284         fileAppender.setFileName(rollingFileName);
285         fileAppenders.add(fileAppender);
286
287         List<LoggerTO> loggers = new ArrayList<>();
288
289         LoggerTO logger = new LoggerTO();
290
291         logger.setAppenders(Arrays.<String> asList());
292
293         logger.setLevel(level);
294         logger.setLoggerName(loggerName);
295         loggers.add(logger);
296         bean.setLoggerTO(loggers);
297         bean.setRollingFileAppenderTO(rollingAppenders);
298         bean.setConsoleAppenderTO(consoleAppenders);
299         bean.setFileAppenderTO(fileAppenders);
300
301         transaction.validateConfig();
302
303         return transaction;
304     }
305
306 }