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  }