/*
* RHQ Management Platform
* Copyright (C) 2005-2008 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License, version 2, as
* published by the Free Software Foundation, and/or the GNU Lesser
* General Public License, version 2.1, also as published by the Free
* Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License and the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License
* and the GNU Lesser General Public License along with this program;
* if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.rhq.core.pluginapi.event.log;
import java.io.BufferedReader;
import java.io.File;
import java.io.StringReader;
import java.util.Calendar;
import java.util.Iterator;
import java.util.Set;
import java.util.regex.Pattern;
import org.testng.annotations.Test;
import org.rhq.core.domain.event.Event;
import org.rhq.core.domain.event.EventSeverity;
/**
* @author Ian Springer
*/
@Test
public class Log4JLogEntryProcessorTest {
private static final String LINE_SEPARATOR = System.getProperty("line.separator");
private static final StringBuilder TEST_LOG = new StringBuilder();
static {
TEST_LOG.append(
"2007-12-09 15:32:49,909 DEBUG [com.example.FooBar] run: IdleRemover notifying pools, interval: 450000")
.append(LINE_SEPARATOR);
TEST_LOG.append("2008-02-09 02:10:11,909 INFO [com.example.FooBar] a multi-line entry").append(LINE_SEPARATOR);
TEST_LOG.append("\tyada yada yada").append(LINE_SEPARATOR);
TEST_LOG.append("\twocka wocka").append(LINE_SEPARATOR);
}
public void testProcessLine() throws Exception {
String eventType = "logEntry";
File logFile = new File("C:/test.log");
System.out.println("Testing with no includes pattern...");
Log4JLogEntryProcessor processor = new Log4JLogEntryProcessor(eventType, logFile);
BufferedReader bufferedReader = new BufferedReader(new StringReader(TEST_LOG.toString()));
Set<Event> events = processor.processLines(bufferedReader);
assert events != null && events.size() == 2;
Iterator<Event> eventIterator = events.iterator();
Event event1 = eventIterator.next();
assert eventType.equals(event1.getType());
assert new File(event1.getSourceLocation()).equals(logFile);
Calendar calendar = Calendar.getInstance();
calendar.set(2007, 11, 9, 15, 32, 49);
calendar.set(Calendar.MILLISECOND, 909);
long expectedTimestamp = calendar.getTimeInMillis();
assert event1.getTimestamp() == expectedTimestamp;
assert event1.getSeverity().equals(EventSeverity.DEBUG);
assert event1.getDetail().equals("[com.example.FooBar] run: IdleRemover notifying pools, interval: 450000");
Event event2 = eventIterator.next();
assert event2.getDetail().startsWith("[com.example.FooBar] a multi-line entry\n");
assert event2.getDetail().endsWith("\twocka wocka");
System.out.println("SUCCESS!");
System.out.println("Testing with matching includes pattern...");
processor.setIncludesPattern(Pattern.compile("wocka wocka"));
bufferedReader = new BufferedReader(new StringReader(TEST_LOG.toString()));
events = processor.processLines(bufferedReader);
assert events != null && events.size() == 1;
event1 = events.iterator().next();
assert event1.getDetail().endsWith("\twocka wocka");
System.out.println("SUCCESS!");
System.out.println("Testing with non-matching includes pattern...");
processor.setIncludesPattern(Pattern.compile("hubba bubba"));
bufferedReader = new BufferedReader(new StringReader(TEST_LOG.toString()));
events = processor.processLines(bufferedReader);
assert events != null && events.size() == 0;
System.out.println("SUCCESS!");
}
public void testProcessLineBracketDelimitedSeverity() throws Exception {
String eventType = "logEntry";
File logFile = new File("C:/test.log");
Log4JLogEntryProcessor processor = new Log4JLogEntryProcessor(eventType, logFile);
String logEntry = "2007-12-09 15:32:49,909 [DEBUG] [com.example.FooBar] test message";
BufferedReader bufferedReader = new BufferedReader(new StringReader(logEntry));
Set<Event> events = processor.processLines(bufferedReader);
assert events != null && events.size() == 1;
Iterator<Event> eventIterator = events.iterator();
Event event1 = eventIterator.next();
assert eventType.equals(event1.getType());
assert new File(event1.getSourceLocation()).equals(logFile);
Calendar calendar = Calendar.getInstance();
calendar.set(2007, 11, 9, 15, 32, 49);
calendar.set(Calendar.MILLISECOND, 909);
long expectedTimestamp = calendar.getTimeInMillis();
assert event1.getTimestamp() == expectedTimestamp;
assert event1.getSeverity().equals(EventSeverity.DEBUG);
assert event1.getDetail().equals("[com.example.FooBar] test message");
}
public void testProcessLineParenDelimitedSeverity() throws Exception {
String eventType = "logEntry";
File logFile = new File("C:/test.log");
Log4JLogEntryProcessor processor = new Log4JLogEntryProcessor(eventType, logFile);
String logEntry = "2007-12-09 15:32:49,909 (DEBUG) [com.example.FooBar] test message";
BufferedReader bufferedReader = new BufferedReader(new StringReader(logEntry));
Set<Event> events = processor.processLines(bufferedReader);
assert events != null && events.size() == 1;
Iterator<Event> eventIterator = events.iterator();
Event event1 = eventIterator.next();
assert eventType.equals(event1.getType());
assert new File(event1.getSourceLocation()).equals(logFile);
Calendar calendar = Calendar.getInstance();
calendar.set(2007, 11, 9, 15, 32, 49);
calendar.set(Calendar.MILLISECOND, 909);
long expectedTimestamp = calendar.getTimeInMillis();
assert event1.getTimestamp() == expectedTimestamp;
assert event1.getSeverity().equals(EventSeverity.DEBUG);
assert event1.getDetail().equals("[com.example.FooBar] test message");
}
public void testProcessLineSpacedDelimitedSeverity() throws Exception {
String eventType = "logEntry";
File logFile = new File("C:/test.log");
Log4JLogEntryProcessor processor = new Log4JLogEntryProcessor(eventType, logFile);
String logEntry = "2007-12-09 15:32:49,909 [ DEBUG ) [com.example.FooBar] test message";
BufferedReader bufferedReader = new BufferedReader(new StringReader(logEntry));
Set<Event> events = processor.processLines(bufferedReader);
assert events != null && events.size() == 1;
Iterator<Event> eventIterator = events.iterator();
Event event1 = eventIterator.next();
assert eventType.equals(event1.getType());
assert new File(event1.getSourceLocation()).equals(logFile);
Calendar calendar = Calendar.getInstance();
calendar.set(2007, 11, 9, 15, 32, 49);
calendar.set(Calendar.MILLISECOND, 909);
long expectedTimestamp = calendar.getTimeInMillis();
assert event1.getTimestamp() == expectedTimestamp;
assert event1.getSeverity().equals(EventSeverity.DEBUG);
assert event1.getDetail().equals("[com.example.FooBar] test message");
}
}