2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.controller.config.yang.logback.config;
10 import static org.junit.Assert.assertThat;
11 import static org.junit.Assert.fail;
12 import static org.junit.matchers.JUnitMatchers.containsString;
14 import java.io.IOException;
15 import java.util.ArrayList;
16 import java.util.Arrays;
17 import java.util.List;
19 import javax.management.InstanceAlreadyExistsException;
20 import javax.management.InstanceNotFoundException;
21 import javax.management.ObjectName;
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;
33 public class LogbackModuleTest extends AbstractConfigTest {
35 private static final String INSTANCE_NAME = "singleton";
37 private LogbackModuleFactory factory;
40 public void setUp() throws IOException, ClassNotFoundException, InterruptedException {
42 factory = new LogbackModuleFactory();
43 super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory));
47 public void testCreateBean() throws InstanceAlreadyExistsException {
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();
53 assertBeanCount(1, factory.getImplementationName());
54 assertStatus(status, 1, 0, 0);
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();
63 assertBeanCount(1, factory.getImplementationName());
65 ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
66 CommitStatus status = transaction.commit();
68 assertBeanCount(1, factory.getImplementationName());
69 assertStatus(status, 0, 0, 1);
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();
79 assertBeanCount(1, LogbackModuleFactory.NAME);
80 ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
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);
87 assertStatus(status, 0, 0, 1);
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());
97 ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
98 transaction.destroyConfigBean(factory.getImplementationName(), INSTANCE_NAME);
99 CommitStatus status = transaction.commit();
101 assertBeanCount(0, factory.getImplementationName());
102 assertStatus(status, 0, 0, 0);
107 public void testValidation1() throws InstanceAlreadyExistsException {
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();
113 } catch (ValidationException e) {
114 assertThat(e.getFailedValidations().toString(), containsString("FileName is null"));
119 public void testValidation2() throws InstanceAlreadyExistsException {
121 createBeans(true, "target/rollingApp", null, "30MB", 1, 5, "target/%i.log", "rolling", "consoleName",
122 "ALL", "logger1", "DEBUG", "FixedWindowRollingPolicy", 0, "FileAppender").commit();
124 } catch (ValidationException e) {
125 assertThat(e.getFailedValidations().toString(), containsString("EncoderPattern is null"));
130 public void testValidation4() throws InstanceAlreadyExistsException {
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();
136 } catch (ValidationException e) {
137 assertThat(e.getFailedValidations().toString(), containsString("MaxFileSize is null"));
142 public void testValidation6() throws InstanceAlreadyExistsException {
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")
148 } catch (ValidationException e) {
149 assertThat(e.getFailedValidations().toString(), containsString("FileName needs to be set"));
154 public void testValidation7() throws InstanceAlreadyExistsException {
158 true, "target/rollingApp", "", "30MB", 1, 5, "target/%i.log", "rolling", "consoleName", "ALL", "logger1",
159 "DEBUG", "FixedWindowRollingPolicy", 0, "FileAppender").commit();
161 } catch (ValidationException e) {
162 assertThat(e.getFailedValidations().toString(), containsString("EncoderPattern needs to be set"));
167 public void testValidation8() throws InstanceAlreadyExistsException {
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();
173 } catch (ValidationException e) {
174 assertThat(e.getFailedValidations().toString(), containsString("LoggerName is null"));
179 public void testValidation9() throws InstanceAlreadyExistsException {
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();
185 } catch (ValidationException e) {
186 assertThat(e.getFailedValidations().toString(), containsString("LoggerName needs to be set"));
191 public void testValidation10() throws InstanceAlreadyExistsException {
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();
197 } catch (ValidationException e) {
198 assertThat(e.getFailedValidations().toString(), containsString("MinIndex is null"));
203 public void testValidation11() throws InstanceAlreadyExistsException {
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();
209 } catch (ValidationException e) {
210 assertThat(e.getFailedValidations().toString(), containsString("MaxIndex is null"));
215 public void testValidation12() throws InstanceAlreadyExistsException {
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")
221 } catch (ValidationException e) {
222 assertThat(e.getFailedValidations().toString(), containsString("RollingPolicyType is null"));
227 public void testValidation13() throws InstanceAlreadyExistsException {
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")
233 } catch (ValidationException e) {
234 assertThat(e.getFailedValidations().toString(), containsString("RollingPolicyType is not set"));
239 public void testValidation14() throws InstanceAlreadyExistsException {
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();
245 } catch (ValidationException e) {
246 assertThat(e.getFailedValidations().toString(), containsString("RollingPolicyType is not supported"));
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();
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);
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);
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);
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);
294 List<LoggerTO> loggers = new ArrayList<>();
296 LoggerTO logger = new LoggerTO();
298 logger.setAppenders(Arrays.<String> asList());
300 logger.setLevel(level);
301 logger.setLoggerName(loggerName);
303 bean.setLoggerTO(loggers);
304 bean.setRollingFileAppenderTO(rollingAppenders);
305 bean.setConsoleAppenderTO(consoleAppenders);
306 bean.setFileAppenderTO(fileAppenders);
308 transaction.validateConfig();