package org.fusesource.cloudmix.agent.logging;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.List;
import junit.framework.TestCase;
public class LogHandlerTest extends TestCase {
private String records;
public void setUp() throws Exception {
InputStream ins = getClass().getResourceAsStream("/logging/log.records");
BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
StringBuilder b = new StringBuilder();
String s;
while ((s = reader.readLine()) != null) {
b.append(s).append("\n");
}
records = b.toString();
reader.close();
}
public void testGetOneInfoRecord() {
LogHandler parser = new LogHandler(new StringReader(records));
List<LogRecord> recs = parser.findLevelRecords("INFO", 0, 1);
assertEquals("1 record is expected", 1, recs.size());
LogRecord rec = recs.get(0);
verifyRecord(rec, "15:55:03", "INFO", "FelixStartLevel", "OsgiServiceFactoryBean",
"r.support.OsgiServiceFactoryBean", "299",
"Publishing service under classes [{org.osgi.service.url.URLStreamHandlerService}]");
}
public void testGetOneInfoRecord2() {
LogHandler parser = new LogHandler(new StringReader(records));
List<LogRecord> recs = parser.findLevelRecords("INFO", 0, 2);
assertEquals("1 record is expected", 1, recs.size());
LogRecord rec = recs.get(0);
verifyRecord(rec, "15:55:03", "INFO", "FelixStartLevel", "OsgiServiceFactoryBean",
"r.support.OsgiServiceFactoryBean", "299",
"Publishing service under classes [{org.osgi.service.url.URLStreamHandlerService}]");
}
public void testGetOneInfoRecord3() {
LogHandler parser = new LogHandler(new StringReader(records));
try {
parser.findLevelRecords("INFO", 6, 2);
fail("Only 5 records are available");
} catch (IllegalArgumentException ex) {
// expected
}
}
public void testGetNoWarnRecords() {
LogHandler parser = new LogHandler(new StringReader(records));
List<LogRecord> recs = parser.findLevelRecords("WARN", 5, 1);
assertEquals("Mo records expected", 0, recs.size());
}
public void testGetInfoCategoryRecord() {
LogHandler parser = new LogHandler(new StringReader(records));
List<LogRecord> recs = parser.findRecords("INFO", "OsgiServiceFactoryBean");
assertEquals("1 record is expected", 1, recs.size());
LogRecord rec = recs.get(0);
verifyRecord(rec, "15:55:03", "INFO", "FelixStartLevel", "OsgiServiceFactoryBean",
"r.support.OsgiServiceFactoryBean", "299",
"Publishing service under classes [{org.osgi.service.url.URLStreamHandlerService}]");
}
public void testGetInfoCategoryRecordWithPredicate() {
LogHandler parser = new LogHandler(new StringReader(records));
LogPredicate p = new LogPredicate("INFO", "OsgiServiceFactoryBean");
List<LogRecord> recs = parser.findWithPredicate(p);
assertEquals("1 record is expected", 1, recs.size());
LogRecord rec = recs.get(0);
verifyRecord(rec, "15:55:03", "INFO", "FelixStartLevel", "OsgiServiceFactoryBean",
"r.support.OsgiServiceFactoryBean", "299",
"Publishing service under classes [{org.osgi.service.url.URLStreamHandlerService}]");
}
public void testGetInfoCategoryRecordRegEx() {
LogHandler parser = new LogHandler(new StringReader(records));
List<LogRecord> recs = parser.findRecords("INFO", "Osgi.*");
assertEquals("1 record is expected", 1, recs.size());
LogRecord rec = recs.get(0);
verifyRecord(rec, "15:55:03", "INFO", "FelixStartLevel", "OsgiServiceFactoryBean",
"r.support.OsgiServiceFactoryBean", "299",
"Publishing service under classes [{org.osgi.service.url.URLStreamHandlerService}]");
}
public void testGetInfoRecords() {
LogHandler parser = new LogHandler(new StringReader(records));
List<LogRecord> recs = parser.findLevelRecords("INFO");
assertEquals("1 record is expected", 1, recs.size());
LogRecord rec = recs.get(0);
verifyRecord(rec, "15:55:03", "INFO", "FelixStartLevel", "OsgiServiceFactoryBean",
"r.support.OsgiServiceFactoryBean", "299",
"Publishing service under classes [{org.osgi.service.url.URLStreamHandlerService}]");
}
public void testGetWarnRecords() {
LogHandler parser = new LogHandler(new StringReader(records));
List<LogRecord> recs = parser.findLevelRecords("WARN");
assertEquals("3 records are expected", 3, recs.size());
verifyRecord(recs.get(0),
"15:55:03",
"WARN",
"pool-1-thread-1",
"FileMonitor",
"x.kernel.filemonitor.FileMonitor",
"272",
"Unsupported deployment: D:\\Work\\CloudMix\\cloudmix\\"
+ "org.fusesource.cloudmix.agent.start\\"
+ "apache-servicemix-4.0.0\\etc\\users.properties");
verifyRecord(recs.get(1),
"15:55:03",
"WARN",
"pool-1-thread-1",
"FileMonitor",
"x.kernel.filemonitor.FileMonitor",
"272",
"Unsupported deployment: D:\\Work\\CloudMix\\cloudmix\\"
+ "org.fusesource.cloudmix.agent.start\\apache-servicemix-4.0.0"
+ "\\etc\\system.properties");
verifyRecord(recs.get(2),
"15:55:03",
"WARN",
"pool-1-thread-1",
"FileMonitor",
"x.kernel.filemonitor.FileMonitor",
"272",
"Unsupported deployment: D:\\Work\\CloudMix\\cloudmix\\"
+ "org.fusesource.cloudmix.agent.start\\apache-servicemix-4.0.0"
+ "\\etc\\startup.properties");
}
//CHECKSTYLE:OFF - allow a ton of params here
private void verifyRecord(LogRecord rec, String date,
String level, String thread,
String cat, String cName,
String line, String message) {
//CHECKSTYLE:ON
assertEquals(date, rec.getDate());
assertEquals(level, rec.getLevel());
assertEquals(thread, rec.getThreadId());
assertEquals(cat, rec.getCategory());
assertEquals(cName, rec.getClassName());
assertEquals(line, rec.getClassLineNumber());
assertEquals(message, rec.getMessage());
}
public void testGetJettyRecordsFromServiceMixLog() {
InputStream is = getClass().getResourceAsStream("/servicemix.log");
try {
LogHandler parser = new LogHandler(is);
List<LogRecord> recs = parser.findCategoryRecords("jetty");
assertEquals("3 records are expected", 3, recs.size());
verifyRecord(recs.get(0), "15:55:36", "INFO", "Thread-6", "jetty",
".service.internal.util.JCLLogger", "102",
"Logging to org.ops4j.pax.web.service.internal.util.JCLLogger@178b0f9 via "
+ "org.ops4j.pax.web.service.internal.util.JCLLogger");
verifyRecord(recs.get(1), "15:56:16", "INFO", "xtenderThread-68", "jetty",
".service.internal.util.JCLLogger", "102", "jetty-6.1.x");
verifyRecord(recs.get(2), "15:56:16", "INFO", "xtenderThread-68", "jetty",
".service.internal.util.JCLLogger", "102",
"Started SelectChannelConnector@0.0.0.0:8192");
} finally {
try {
is.close();
} catch (IOException ex) {
// ignore
}
}
}
}