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