package com.linkedin.databus.core;
import java.util.ArrayList;
import java.util.List;
import junit.framework.Assert;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.linkedin.databus.core.DbusLogAccumulator.DebugMessage;
import com.linkedin.databus2.test.TestUtil;
public class TestDbusLogAccumulator
{
@BeforeClass
public void setUpClass()
{
TestUtil.setupLogging(true, null, Level.INFO);
}
@Test
public void testDbusLogAccumulator()
{
DbusLogAccumulator acc = new DbusLogAccumulator(3);
Logger log = Logger.getLogger(TestDbusLogAccumulator.class);
MyLogger mlog = new MyLogger(TestDbusLogAccumulator.class.getName());
mlog.setLogger(log);
acc.addMessage(new DebugMessage("MSG %d", 1));
acc.addMessage(new DebugMessage("MSG %s", "TWO"));
acc.addMessage(new DebugMessage("MSG 3"));
acc.addMessage(new DebugMessage("MSG %d", 4));
acc.addMessage(new DebugMessage("MSG %s", "FIVE"));
acc.addMessage(new DebugMessage("MSG 6"));
acc.addMessage("MSG 7");
Assert.assertEquals(7, acc.getTotalNumberOfMessages());
Assert.assertEquals(3, acc.getNumberOfMessages());
acc.prettyLog(mlog, Level.ERROR);
Assert.assertFalse(mlog.verifyError("MSG 1"));
Assert.assertFalse(mlog.verifyError("MSG TWO"));
Assert.assertFalse(mlog.verifyError("MSG 3"));
Assert.assertFalse(mlog.verifyError("MSG 4"));
Assert.assertTrue(mlog.verifyError("MSG FIVE"));
Assert.assertTrue(mlog.verifyError("MSG 6"));
Assert.assertTrue(mlog.verifyError("MSG 7"));
acc.reset();
mlog.setLevel(Level.DEBUG);
acc.addMessage(new DebugMessage("MSG1 %d", 1));
acc.addMessage(new DebugMessage("MSG1 %s", "TWO"));
acc.addMessage(new DebugMessage("MSG1 3"));
acc.addMessage(new DebugMessage("MSG1 %d", 4));
acc.addMessage(new DebugMessage("MSG1 %s", "FIVE"));
acc.addMessage(new DebugMessage("MSG1 6"));
acc.addMessage("MSG1 7");
Exception e = new Exception("Exception 1");
acc.addMessage(new DebugMessage("MSG1 %d", 8).setException(e));
Assert.assertEquals(8, acc.getTotalNumberOfMessages());
Assert.assertEquals(3, acc.getNumberOfMessages());
acc.prettyLog(mlog, Level.INFO);
Assert.assertFalse(mlog.verifyInfo("MSG1 1"));
Assert.assertFalse(mlog.verifyInfo("MSG1 TWO"));
Assert.assertFalse(mlog.verifyInfo("MSG1 3"));
Assert.assertFalse(mlog.verifyInfo("MSG1 4"));
Assert.assertFalse(mlog.verifyInfo("MSG1 FIVE"));
Assert.assertTrue(mlog.verifyInfo("MSG1 6"));
Assert.assertTrue(mlog.verifyInfo("MSG1 7"));
Assert.assertTrue(mlog.verifyInfo("MSG1 8. Exception message = java.lang.Exception: Exception 1. Exception cause = null"));
}
public static class MyLogger extends Logger {
private final List<String> allErrorMsg;
private final List<String> allWarnMsg;
private final List<String> allInfoMsg;
private Logger _log;
public MyLogger(String name) {
super(name);
allErrorMsg = new ArrayList<String>(32);
allWarnMsg = new ArrayList<String>(32);
allInfoMsg = new ArrayList<String>(32);
}
public void setLogger(Logger log) {
_log = log;
}
@Override
public void error(Object msg) {
allErrorMsg.add((String)msg);
_log.error(msg);
}
@Override
public void info(Object msg) {
allInfoMsg.add((String)msg);
_log.info(msg);
}
@Override
public void warn(Object msg) {
allWarnMsg.add((String)msg);
_log.warn(msg);
}
@Override
public boolean isDebugEnabled() {
return _log.isDebugEnabled();
}
public boolean verifyError(String msg) {
return allErrorMsg.contains(msg);
}
public boolean verifyInfo(String msg) {
return allInfoMsg.contains(msg);
}
public boolean verifyWarn(String msg) {
return allWarnMsg.contains(msg);
}
}
}