View Javadoc

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  }