/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.synapse.format.syslog;
import java.io.ByteArrayInputStream;
import javax.xml.XMLConstants;
import javax.xml.namespace.QName;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import junit.framework.TestCase;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.impl.jaxp.OMSource;
import org.apache.axis2.context.MessageContext;
import org.apache.commons.lang.ObjectUtils;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public class SyslogMessageBuilderTest extends TestCase {
private class SyslogMessage {
private final String facility;
private final String severity;
private final String tag;
private final int pid;
private final String content;
public SyslogMessage(String facility, String severity, String tag,
int pid, String content) {
this.facility = facility;
this.severity = severity;
this.tag = tag;
this.pid = pid;
this.content = content;
}
@Override
public String toString() {
return "[pri=" + facility + "." + severity + " tag=" + tag + " pid=" + pid + ": " + content + "]";
}
@Override
public boolean equals(Object _obj) {
if (_obj == null || !(_obj instanceof SyslogMessage)) {
return false;
} else {
SyslogMessage obj = (SyslogMessage)_obj;
return ObjectUtils.equals(facility, obj.facility) &&
ObjectUtils.equals(severity, obj.severity) &&
ObjectUtils.equals(tag, obj.tag) &&
pid == obj.pid &&
ObjectUtils.equals(content, obj.content);
}
}
}
private SyslogMessage test(String message) throws Exception {
MessageContext msgContext = new MessageContext();
ByteArrayInputStream in = new ByteArrayInputStream(message.getBytes("us-ascii"));
OMElement element = new SyslogMessageBuilder().processDocument(in, null, msgContext);
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new StreamSource(SyslogMessageBuilderTest.class.getResource("schema.xsd").toExternalForm()));
Validator validator = schema.newValidator();
validator.setErrorHandler(new ErrorHandler() {
public void error(SAXParseException exception) throws SAXException {
throw exception;
}
public void fatalError(SAXParseException exception) throws SAXException {
throw exception;
}
public void warning(SAXParseException exception) throws SAXException {
throw exception;
}
});
validator.validate(new OMSource(element));
String pidString = element.getAttributeValue(new QName(SyslogConstants.PID));
return new SyslogMessage(element.getAttributeValue(new QName(SyslogConstants.FACILITY)),
element.getAttributeValue(new QName(SyslogConstants.SEVERITY)),
element.getAttributeValue(new QName(SyslogConstants.TAG)),
pidString == null ? -1 : Integer.parseInt(pidString),
element.getText());
}
public void testTagPidContent() throws Exception {
assertEquals(new SyslogMessage("mail", "info", "fetchmail", 8928, "awakened at Sun 04 May 2008 08:04:56 PM CEST"),
test("<22>fetchmail[8928]: awakened at Sun 04 May 2008 08:04:56 PM CEST\n"));
}
public void testTagContent() throws Exception {
assertEquals(new SyslogMessage("local3", "info", "logger", -1, "test"),
test("<158>logger: test\n"));
}
public void testContent() throws Exception {
assertEquals(new SyslogMessage("syslog", "info", null, -1, "exiting on signal 15."),
test("<46>exiting on signal 15.\n"));
}
}