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