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.setLimit(ThreadLocalErrorCollection.DEFAULT_LIMIT);
19 ThreadLocalErrorCollection.clear();
20 ThreadLocalErrorCollection.enable();
21 }
22
23 public void tearDown() throws Exception
24 {
25 super.tearDown();
26 ThreadLocalErrorCollection.clear();
27 ThreadLocalErrorCollection.disable();
28 }
29
30 public void testDisabledPreventsAddingErrorMessages() throws Exception
31 {
32 ThreadLocalErrorCollection.disable();
33 ThreadLocalErrorCollection.add(1, TEST_LOGGING_EVENT);
34 assertTrue(ThreadLocalErrorCollection.isEmpty());
35 }
36
37 public void testEnabledAllowsErrorMessages() throws Exception
38 {
39 ThreadLocalErrorCollection.add(1, TEST_LOGGING_EVENT);
40 assertFalse(ThreadLocalErrorCollection.isEmpty());
41 }
42
43 public void testToggle() throws Exception
44 {
45 testDisabledPreventsAddingErrorMessages();
46 ThreadLocalErrorCollection.enable();
47 testEnabledAllowsErrorMessages();
48 }
49
50 public void testLimitNormal() throws Exception
51 {
52 buildErrCollection(5);
53 List errorEvents = ThreadLocalErrorCollection.getList();
54 assertEquals(5, errorEvents.size());
55
56 assertLatestEntry(errorEvents, 0);
57 }
58
59 private void assertLatestEntry(List errorEvents, int latestEntryNo)
60 {
61 DatedLoggingEvent dle = (DatedLoggingEvent) errorEvents.get(0);
62 LoggingEvent le = dle.getEvent();
63 assertEquals("ThreadLocalErrorCollection is not keep latest entries", String.valueOf(latestEntryNo), le.getMessage());
64 }
65
66 private void buildErrCollection(int x) throws Exception
67 {
68 LoggingEvent ev;
69 for (int i = 0; i < x; i++)
70 {
71 ev = new LoggingEvent(i + "", log, Priority.DEBUG, i + "", new Exception());
72
73 ThreadLocalErrorCollection.add(i, ev);
74 }
75 }
76
77
78 public void testLimitDefault() throws Exception
79 {
80 buildErrCollection(101);
81
82 List errorEvents = ThreadLocalErrorCollection.getList();
83
84 assertEquals("ThreadLocalErrorCollection is not limiting its size", ThreadLocalErrorCollection.DEFAULT_LIMIT, errorEvents.size());
85 assertLatestEntry(errorEvents, 1);
86 }
87
88 public void testLimitMutated() throws Exception
89 {
90 ThreadLocalErrorCollection.setLimit(2);
91
92 buildErrCollection(101);
93
94 List errorEvents = ThreadLocalErrorCollection.getList();
95
96 assertEquals("ThreadLocalErrorCollection is not limiting its size", 2, errorEvents.size());
97 assertLatestEntry(errorEvents, 99);
98 }
99 }