1 package ch.qos.logback.classic.selector;
2
3 import static org.junit.Assert.assertEquals;
4
5 import org.junit.After;
6 import org.junit.Before;
7 import org.junit.Test;
8 import org.slf4j.LoggerFactory;
9 import org.slf4j.impl.StaticLoggerBinder;
10
11 import ch.qos.logback.classic.ClassicGlobal;
12 import ch.qos.logback.classic.selector.servlet.ContextDetachingSCL;
13 import ch.qos.logback.classic.util.MockInitialContext;
14 import ch.qos.logback.classic.util.MockInitialContextFactory;
15
16 public class ContextDetachingSCLTest {
17
18 static String INITIAL_CONTEXT_KEY = "java.naming.factory.initial";
19
20 ContextDetachingSCL listener;
21
22 @Before
23 public void setUp() throws Exception {
24 System.setProperty(ClassicGlobal.LOGBACK_CONTEXT_SELECTOR, "JNDI");
25
26
27 listener = new ContextDetachingSCL();
28
29 MockInitialContextFactory.initialize();
30 MockInitialContext mic = MockInitialContextFactory.getContext();
31 mic.map.put(ClassicGlobal.JNDI_CONTEXT_NAME, "toto");
32
33
34 System.setProperty(INITIAL_CONTEXT_KEY, MockInitialContextFactory.class.getName());
35
36
37 LoggerFactory.getLogger(ContextDetachingSCLTest.class);
38
39 }
40
41 @After
42 public void tearDown() throws Exception {
43 System.clearProperty(INITIAL_CONTEXT_KEY);
44 }
45
46 @Test
47 public void testDetach() {
48 ContextJNDISelector selector = (ContextJNDISelector) StaticLoggerBinder.getSingleton().getContextSelector();
49 listener.contextDestroyed(null);
50 assertEquals(0, selector.getCount());
51 }
52
53
54 @Test
55 public void testDetachWithMissingContext() {
56 MockInitialContext mic = MockInitialContextFactory.getContext();
57 mic.map.put(ClassicGlobal.JNDI_CONTEXT_NAME, "tata");
58 ContextJNDISelector selector = (ContextJNDISelector) StaticLoggerBinder.getSingleton().getContextSelector();
59 assertEquals("tata", selector.getLoggerContext().getName());
60
61 mic.map.put(ClassicGlobal.JNDI_CONTEXT_NAME, "titi");
62 assertEquals("titi", selector.getLoggerContext().getName());
63 listener.contextDestroyed(null);
64
65 assertEquals(2, selector.getCount());
66 }
67
68 }