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 }