/**
* Logback: the reliable, generic, fast and flexible logging framework.
* Copyright (C) 1999-2015, QOS.ch. All rights reserved.
*
* This program and the accompanying materials are dual-licensed under
* either the terms of the Eclipse Public License v1.0 as published by
* the Eclipse Foundation
*
* or (per the licensee's choosing)
*
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
package ch.qos.logback.core.spi;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.util.Iterator;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import ch.qos.logback.core.Appender;
import ch.qos.logback.core.helpers.NOPAppender;
/**
* This test case verifies all the methods of AppenderAttableImpl work properly.
*
* @author Ralph Goers
*/
public class AppenderAttachableImplTest {
private AppenderAttachableImpl<TestEvent> aai;
@Before
public void setUp() throws Exception {
aai = new AppenderAttachableImpl<TestEvent>();
}
@After
public void tearDown() throws Exception {
aai = null;
}
@Test
public void testAddAppender() throws Exception {
TestEvent event = new TestEvent();
NOPAppender<TestEvent> ta = new NOPAppender<TestEvent>();
ta.start();
aai.addAppender(ta);
ta = new NOPAppender<TestEvent>();
ta.setName("test");
ta.start();
aai.addAppender(ta);
int size = aai.appendLoopOnAppenders(event);
assertTrue("Incorrect number of appenders", size == 2);
}
@Test
public void testIteratorForAppenders() throws Exception {
NOPAppender<TestEvent> ta = new NOPAppender<TestEvent>();
ta.start();
aai.addAppender(ta);
NOPAppender<TestEvent> tab = new NOPAppender<TestEvent>();
tab.setName("test");
tab.start();
aai.addAppender(tab);
Iterator<Appender<TestEvent>> iter = aai.iteratorForAppenders();
int size = 0;
while (iter.hasNext()) {
++size;
Appender<TestEvent> app = iter.next();
assertTrue("Bad Appender", app == ta || app == tab);
}
assertTrue("Incorrect number of appenders", size == 2);
}
@Test
public void getGetAppender() throws Exception {
NOPAppender<TestEvent> test = new NOPAppender<TestEvent>();
test.setName("test");
test.start();
aai.addAppender(test);
NOPAppender<TestEvent> testOther = new NOPAppender<TestEvent>();
testOther.setName("testOther");
testOther.start();
aai.addAppender(testOther);
Appender<TestEvent> a = aai.getAppender("testOther");
assertNotNull("Could not find appender", a);
assertTrue("Wrong appender", a == testOther);
a = aai.getAppender("test");
assertNotNull("Could not find appender", a);
assertTrue("Wrong appender", a == test);
a = aai.getAppender("NotThere");
assertNull("Appender was returned", a);
}
@Test
public void testIsAttached() throws Exception {
NOPAppender<TestEvent> ta = new NOPAppender<TestEvent>();
ta.start();
aai.addAppender(ta);
NOPAppender<TestEvent> tab = new NOPAppender<TestEvent>();
tab.setName("test");
tab.start();
aai.addAppender(tab);
assertTrue("Appender is not attached", aai.isAttached(ta));
assertTrue("Appender is not attached", aai.isAttached(tab));
}
@Test
public void testDetachAndStopAllAppenders() throws Exception {
NOPAppender<TestEvent> ta = new NOPAppender<TestEvent>();
ta.start();
aai.addAppender(ta);
NOPAppender<TestEvent> tab = new NOPAppender<TestEvent>();
tab.setName("test");
tab.start();
aai.addAppender(tab);
assertTrue("Appender was not started", tab.isStarted());
aai.detachAndStopAllAppenders();
assertNull("Appender was not removed", aai.getAppender("test"));
assertFalse("Appender was not stopped", tab.isStarted());
}
@Test
public void testDetachAppender() throws Exception {
NOPAppender<TestEvent> ta = new NOPAppender<TestEvent>();
ta.start();
aai.addAppender(ta);
NOPAppender<TestEvent> tab = new NOPAppender<TestEvent>();
tab.setName("test");
tab.start();
aai.addAppender(tab);
assertTrue("Appender not detached", aai.detachAppender(tab));
assertNull("Appender was not removed", aai.getAppender("test"));
assertFalse("Appender detach error", aai.detachAppender(tab));
}
@Test
public void testDetachAppenderByName() throws Exception {
NOPAppender<TestEvent> ta = new NOPAppender<TestEvent>();
ta.setName("test1");
ta.start();
aai.addAppender(ta);
NOPAppender<TestEvent> tab = new NOPAppender<TestEvent>();
tab.setName("test");
tab.start();
aai.addAppender(tab);
assertTrue(aai.detachAppender("test"));
assertTrue(aai.detachAppender("test1"));
assertFalse(aai.detachAppender("test1"));
}
private static class TestEvent {
}
}