package org.oddjob.logging.polling; import java.util.ArrayList; import java.util.List; import junit.framework.TestCase; import org.oddjob.jmx.client.MockLogPollable; import org.oddjob.logging.ArchiveNameResolver; import org.oddjob.logging.LogEvent; import org.oddjob.logging.LogLevel; import org.oddjob.logging.LogListener; import org.oddjob.logging.cache.LogEventSource; import org.oddjob.logging.cache.PollingLogArchiver; /** * More tests for the basics - tracking down a bug. */ public class PollingLogArchiver2Test extends TestCase { Object expected; class OurEventSource implements LogEventSource { LogEvent[] logEvents = { new LogEvent("thing", 24L, LogLevel.DEBUG, "1"), new LogEvent("thing", 25L, LogLevel.DEBUG, "2"), new LogEvent("thing", 26L, LogLevel.DEBUG, "3"), new LogEvent("thing", 27L, LogLevel.DEBUG, "4"), new LogEvent("thing", 28L, LogLevel.DEBUG, "5") }; public LogEvent[] retrieveEvents(Object component, long from, int max) { assertEquals(expected, component); if (from < 0) { from = 23; } long num = Math.min(max, 28 - from); LogEvent[] out = new LogEvent[(int) num]; System.arraycopy(logEvents, (int) from - 23, out, 0, (int) num); return out; } } class LL implements LogListener { List<LogEvent> results = new ArrayList<LogEvent>(); public void logEvent(LogEvent logEvent) { results.add(logEvent); } } class OurResolver implements ArchiveNameResolver { public String resolveName(Object component) { assertEquals(expected, component); return "apple.log"; } } public void testSimpleLogEvents() { MockLogPollable root = new MockLogPollable(); this.expected = root; PollingLogArchiver test = new PollingLogArchiver( 3, new OurResolver(), new OurEventSource()); LL results = new LL(); test.addLogListener(results, root, LogLevel.DEBUG, -1, 10); assertEquals(3, results.results.size()); assertEquals("3", results.results.get(2).getMessage()); test.poll(); assertEquals(5, results.results.size()); assertEquals("5", results.results.get(4).getMessage()); test.poll(); assertEquals(5, results.results.size()); assertEquals("5", results.results.get(4).getMessage()); } public void testReAddingListener() { MockLogPollable root = new MockLogPollable(); this.expected = root; PollingLogArchiver test = new PollingLogArchiver( 10, new OurResolver(), new OurEventSource()); LL results = new LL(); assertEquals(0, results.results.size()); test.poll(); test.addLogListener(results, root, LogLevel.DEBUG, -1, 10); assertEquals(5, results.results.size()); assertEquals("5", results.results.get(4).getMessage()); test.removeLogListener(results, root); test.addLogListener(results, root, LogLevel.DEBUG, 4, 10); assertEquals(5, results.results.size()); assertEquals("5", results.results.get(4).getMessage()); test.poll(); assertEquals(5, results.results.size()); assertEquals("5", results.results.get(4).getMessage()); test.removeLogListener(results, root); } }