/*
* (c) Rob Gordon 2006
*/
package org.oddjob.logging;
import junit.framework.TestCase;
import org.apache.log4j.Logger;
import org.oddjob.framework.ComponentBoundry;
import org.oddjob.logging.log4j.Log4jArchiver;
import org.oddjob.tools.OddjobTestHelper;
public class OddjobNDCTest extends TestCase implements LogEnabled {
private static final Logger logger = Logger.getLogger(OddjobNDCTest.class);
public void testAll() {
String loggerName1 = "org.oddjob.TestLogger1";
String loggerName2 = "org.oddjob.TestLogger2";
Object job1 = new Object();
Object job2 = new Object();
ComponentBoundry.push(loggerName1, job1);
assertEquals(loggerName1, OddjobNDC.peek().getLogger());
assertEquals(job1, OddjobNDC.peek().getJob());
ComponentBoundry.push(loggerName2, job2);
assertEquals(loggerName2, OddjobNDC.peek().getLogger());
assertEquals(job2, OddjobNDC.peek().getJob());
assertEquals(loggerName2, OddjobNDC.pop().getLogger());
assertEquals(loggerName1, OddjobNDC.pop().getLogger());
}
public void testEmptyPeek() {
assertEquals(null, OddjobNDC.peek());
}
class MyLL implements LogListener {
String message;
public void logEvent(LogEvent logEvent) {
message = logEvent.getMessage();
}
}
public String loggerName() {
return "our.unique.logger";
}
public void testWithArchiver() {
Log4jArchiver archiver = new Log4jArchiver(this, "%m%n");
MyLL ll = new MyLL();
archiver.addLogListener(ll, this, LogLevel.INFO, -1, 100);
logger.info("Will not be archived!");
assertNull(ll.message);
OddjobNDC.push(loggerName(), new Object());
logger.info("Will be archived!");
assertEquals("Will be archived!" + OddjobTestHelper.LS, ll.message);
OddjobNDC.pop();
}
public void testChildThread() throws InterruptedException {
String job = "My Important Job";
Log4jArchiver archiver = new Log4jArchiver(this, "[%X{ojname}] %m%n");
MyLL ll = new MyLL();
archiver.addLogListener(ll, this, LogLevel.INFO, -1, 100);
OddjobNDC.push(loggerName(), job);
Thread t = new Thread(new Runnable() {
public void run() {
logger.info("Child Thread Message.");
}
});
OddjobNDC.pop();
t.start();
t.join();
assertEquals("[My Important Job] Child Thread Message." + OddjobTestHelper.LS, ll.message);
}
}