X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fconfig%2Flogback-config%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyang%2Flogback%2Fconfig%2FContextSetterImplTest.java;fp=opendaylight%2Fconfig%2Flogback-config%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyang%2Flogback%2Fconfig%2FContextSetterImplTest.java;h=7ba7a24d486e7ba6cdb0ebb2b54c65fafabc9e31;hb=655dffff17a7c45d181d0b15decf627fdd1238eb;hp=0000000000000000000000000000000000000000;hpb=d78e985bc4ed590407c8c7800ba796d5ea55aa6c;p=controller.git diff --git a/opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/ContextSetterImplTest.java b/opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/ContextSetterImplTest.java new file mode 100644 index 0000000000..7ba7a24d48 --- /dev/null +++ b/opendaylight/config/logback-config/src/test/java/org/opendaylight/controller/config/yang/logback/config/ContextSetterImplTest.java @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.controller.config.yang.logback.config; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.opendaylight.controller.config.api.DependencyResolver; +import org.opendaylight.controller.config.api.ModuleIdentifier; +import org.slf4j.LoggerFactory; + +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.Appender; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Lists; +import com.google.common.collect.Multimap; + +public class ContextSetterImplTest { + + @Mock + private LogbackRuntimeRegistrator runtimeRegistratorMock; + @Mock + private DependencyResolver dependencyResolverMock; + + @Before + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); + LogbackRuntimeRegistration reg = mock(LogbackRuntimeRegistration.class); + doReturn(reg).when(runtimeRegistratorMock).register( + any(LogbackRuntimeMXBean.class)); + } + + @Test + public void testUpdate() throws Exception { + Multimap loggersToAppenders = HashMultimap.create(); + loggersToAppenders.put("l1", "a1"); + loggersToAppenders.put("l1", "a2"); + createContextSetter(loggersToAppenders); + + assertLoggerWithAppenders("l1", "a1", "a2"); + } + + @Test + public void testUpdateTwice() throws Exception { + Multimap loggersToAppenders = HashMultimap.create(); + loggersToAppenders.put("l1", "a1"); + loggersToAppenders.put("l1", "a2"); + createContextSetter(loggersToAppenders); + + loggersToAppenders.clear(); + loggersToAppenders.put("l1", "a3"); + loggersToAppenders.put("l1", "a2"); + loggersToAppenders.put("l1", "a4"); + createContextSetter(loggersToAppenders); + + assertLoggerWithAppenders("l1", "a2", "a3", "a4"); + } + + @Test + public void testKeepOtherLoggers() throws Exception { + Multimap loggersToAppenders = HashMultimap.create(); + loggersToAppenders.put("l1", "a1"); + loggersToAppenders.put("l1", "a2"); + loggersToAppenders.put("l2", "a22"); + createContextSetter(loggersToAppenders); + + loggersToAppenders.clear(); + loggersToAppenders.put("l1", "a3"); + createContextSetter(loggersToAppenders); + + assertLoggerWithAppenders("l1", "a3"); + assertLoggerWithAppenders("l2", "a22"); + } + + private void createContextSetter(Multimap loggersToAppenders) { + ContextSetterImpl setter = new ContextSetterImpl(runtimeRegistratorMock); + + List logger = Lists.newArrayList(); + List consoleAppenders = Lists.newArrayList(); + + for (String loggerName : loggersToAppenders.keySet()) { + LoggerTO l1 = createLogger(loggerName, + loggersToAppenders.get(loggerName)); + logger.add(l1); + for (String appenderName : loggersToAppenders.get(loggerName)) { + consoleAppenders.add(createConsoleAppender(appenderName)); + } + + } + + LogbackModule logbackModule = createLogbackModule(logger, + consoleAppenders); + setter.updateContext(logbackModule); + } + + private void assertLoggerWithAppenders(String name, String... appenders) { + LoggerContext context = (LoggerContext) LoggerFactory + .getILoggerFactory(); + ch.qos.logback.classic.Logger logger = context.getLogger(name); + Iterator> it = logger.iteratorForAppenders(); + + Multimap> foundAppenders = HashMultimap.create(); + while (it.hasNext()) { + final Appender app = it.next(); + foundAppenders.put(app.getName(), app); + } + + if (appenders.length == 0) { + assertEquals(0, foundAppenders.values().size()); + } + + for (String appender : appenders) { + boolean isPresent = foundAppenders.get(appender).isEmpty(); + assertFalse( + "Appender " + appender + " for logger " + name + + " was not present, present appenders: " + + foundAppenders.keys(), isPresent); + } + + } + + private LogbackModule createLogbackModule(List logger, + List consoleAppenders) { + LogbackModule logbackModule = new LogbackModule(new ModuleIdentifier( + "fact", "first"), dependencyResolverMock); + logbackModule.setLoggerTO(logger); + logbackModule.setConsoleAppenderTO(consoleAppenders); + logbackModule.setRollingFileAppenderTO(Lists + . newArrayList()); + return logbackModule; + } + + private LoggerTO createLogger(String name, Collection appenders) { + LoggerTO l1 = new LoggerTO(); + l1.setAppenders(Lists.newArrayList(appenders)); + l1.setLoggerName(name); + l1.setLevel("INFO"); + return l1; + } + + private ConsoleAppenderTO createConsoleAppender(String name) { + ConsoleAppenderTO a = new ConsoleAppenderTO(); + a.setName(name); + a.setEncoderPattern("%-4relative [%thread] %-5level %logger{35} - %msg%n"); + return a; + } +}