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,
41 InterruptedException {
43 factory = new LogbackModuleFactory();
44 super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
49 public void testCreateBean() throws InstanceAlreadyExistsException {
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();
57 assertBeanCount(1, factory.getImplementationName());
58 assertStatus(status, 1, 0, 0);
62 public void testReusingInstance() throws InstanceAlreadyExistsException {
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();
69 assertBeanCount(1, factory.getImplementationName());
71 ConfigTransactionJMXClient transaction = configRegistryClient
73 CommitStatus status = transaction.commit();
75 assertBeanCount(1, factory.getImplementationName());
76 assertStatus(status, 0, 0, 1);
80 public void testRecreateInstance() throws InstanceAlreadyExistsException,
81 ValidationException, ConflictingVersionException,
82 InstanceNotFoundException {
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();
89 assertBeanCount(1, LogbackModuleFactory.NAME);
90 ConfigTransactionJMXClient transaction = configRegistryClient
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);
100 assertStatus(status, 0, 0, 1);
104 public void testDestroyInstance() throws InstanceNotFoundException,
105 InstanceAlreadyExistsException {
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());
113 ConfigTransactionJMXClient transaction = configRegistryClient
114 .createTransaction();
115 transaction.destroyConfigBean(factory.getImplementationName(),
117 CommitStatus status = transaction.commit();
119 assertBeanCount(0, factory.getImplementationName());
120 assertStatus(status, 0, 0, 0);
125 public void testValidation1() throws InstanceAlreadyExistsException {
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();
133 } catch (ValidationException e) {
134 assertThat(e.getFailedValidations().toString(),
135 containsString("FileName is null"));
140 public void testValidation2() throws InstanceAlreadyExistsException {
143 true, "target/rollingApp", null, "30MB", 1, 5, "target/%i.log",
144 "rolling", "consoleName", "ALL", "logger1", "DEBUG")
147 } catch (ValidationException e) {
148 assertThat(e.getFailedValidations().toString(),
149 containsString("EncoderPattern is null"));
154 public void testValidation4() throws InstanceAlreadyExistsException {
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();
162 } catch (ValidationException e) {
163 assertThat(e.getFailedValidations().toString(),
164 containsString("MaxFileSize is null"));
169 public void testValidation6() throws InstanceAlreadyExistsException {
172 true, "", "%-4relative [%thread] %-5level %logger{35} - %msg%n",
173 "30MB", 1, 5, "target/%i.log", "rolling", "consoleName",
174 "ALL", "logger1", "DEBUG").commit();
176 } catch (ValidationException e) {
177 assertThat(e.getFailedValidations().toString(),
178 containsString("FileName needs to be set"));
183 public void testValidation7() throws InstanceAlreadyExistsException {
187 true, "target/rollingApp", "", "30MB", 1, 5, "target/%i.log",
188 "rolling", "consoleName", "ALL", "logger1", "DEBUG")
191 } catch (ValidationException e) {
192 assertThat(e.getFailedValidations().toString(),
193 containsString("EncoderPattern needs to be set"));
198 public void testValidation8() throws InstanceAlreadyExistsException {
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();
206 } catch (ValidationException e) {
207 assertThat(e.getFailedValidations().toString(),
208 containsString("LoggerName is null"));
213 public void testValidation9() throws InstanceAlreadyExistsException {
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();
221 } catch (ValidationException e) {
222 assertThat(e.getFailedValidations().toString(),
223 containsString("LoggerName needs to be set"));
228 public void testValidation10() throws InstanceAlreadyExistsException {
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();
236 } catch (ValidationException e) {
237 assertThat(e.getFailedValidations().toString(),
238 containsString("MinIndex is null"));
243 public void testValidation11() throws InstanceAlreadyExistsException {
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();
251 } catch (ValidationException e) {
252 assertThat(e.getFailedValidations().toString(),
253 containsString("MaxIndex is null"));
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);
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);
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);
289 List<LoggerTO> loggers = new ArrayList<>();
291 LoggerTO logger = new LoggerTO();
293 logger.setAppenders(Arrays.<String> asList());
295 logger.setLevel(level);
296 logger.setLoggerName(loggerName);
298 bean.setLoggerTO(loggers);
299 bean.setRollingFileAppenderTO(rollingAppenders);
300 bean.setConsoleAppenderTO(consoleAppenders);
302 transaction.validateConfig();