1 package com.atlassian.core.logging;
2
3 import junit.framework.TestCase;
4 import org.apache.log4j.Category;
5 import org.apache.log4j.Priority;
6 import org.apache.log4j.spi.LoggingEvent;
7
8 import java.util.List;
9
10 public class TestThreadLocalErrorCollection extends TestCase
11 {
12 private static final Category log = Category.getInstance(TestThreadLocalErrorCollection.class);
13 public static final LoggingEvent TEST_LOGGING_EVENT = new LoggingEvent("Test logging event", log, Priority.DEBUG, "test log message", new Exception());
14
15
16 protected void setUp() throws Exception
17 {
18 ThreadLocalErrorCollection.enable();
19 }
20
21 public void tearDown() throws Exception
22 {
23 super.tearDown();
24 ThreadLocalErrorCollection.clear();
25 ThreadLocalErrorCollection.disable();
26 }
27
28 public void testDisabledPreventsAddingErrorMessages() throws Exception
29 {
30 ThreadLocalErrorCollection.disable();
31 ThreadLocalErrorCollection.add(1, TEST_LOGGING_EVENT);
32 assertTrue(ThreadLocalErrorCollection.isEmpty());
33 }
34
35 public void testEnabledAllowsErrorMessages() throws Exception
36 {
37 ThreadLocalErrorCollection.add(1, TEST_LOGGING_EVENT);
38 assertFalse(ThreadLocalErrorCollection.isEmpty());
39 }
40
41 public void testToggle() throws Exception
42 {
43 testDisabledPreventsAddingErrorMessages();
44 ThreadLocalErrorCollection.enable();
45 testEnabledAllowsErrorMessages();
46 }
47
48 public void testLimitNormal() throws Exception
49 {
50 buildErrCollection(5);
51 List errorEvents = ThreadLocalErrorCollection.getList();
52 assertEquals(5, errorEvents.size());
53
54 assertLatestEntry(errorEvents, 0);
55 }
56
57 private void assertLatestEntry(List errorEvents, int latestEntryNo)
58 {
59 DatedLoggingEvent dle = (DatedLoggingEvent) errorEvents.get(0);
60 LoggingEvent le = dle.getEvent();
61 assertEquals("ThreadLocalErrorCollection is not keep latest entries", String.valueOf(latestEntryNo), le.getMessage());
62 }
63
64 private void buildErrCollection(int x) throws Exception
65 {
66 LoggingEvent ev;
67 for (int i = 0; i < x; i++)
68 {
69 ev = new LoggingEvent(i + "", log, Priority.DEBUG, i + "", new Exception());
70
71 ThreadLocalErrorCollection.add(i, ev);
72 }
73 }
74
75
76 public void testLimitDefault() throws Exception
77 {
78 buildErrCollection(101);
79
80 List errorEvents = ThreadLocalErrorCollection.getList();
81
82 assertEquals("ThreadLocalErrorCollection is not limiting its size", ThreadLocalErrorCollection.DEFAULT_LIMIT, errorEvents.size());
83 assertLatestEntry(errorEvents, 1);
84 }
85
86 public void testLimitMutated() throws Exception
87 {
88 ThreadLocalErrorCollection.setLimit(2);
89
90 buildErrCollection(101);
91
92 List errorEvents = ThreadLocalErrorCollection.getList();
93
94 assertEquals("ThreadLocalErrorCollection is not limiting its size", 2, errorEvents.size());
95 assertLatestEntry(errorEvents, 99);
96 }
97 }