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