// Copyright 2014-2015 Boundary, Inc.
//
// Licensed 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 com.boundary.sdk.event.syslog;
import java.util.HashMap;
import java.util.List;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.component.syslog.SyslogMessage;
import org.apache.camel.test.spring.CamelSpringTestSupport;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.support.AbstractXmlApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.boundary.sdk.event.RawEvent;
/**
* Smoke test to test mapping of a {@link SyslogMessage} to a {@link RawEvent}
*
*/
public class SyslogToEventScriptingTest extends CamelSpringTestSupport {
SyslogMessage sm;
RawEvent e;
HashMap<String,Object> headers;
private static Logger LOG = LoggerFactory.getLogger(SyslogToEventScriptingTest.class);
private static final String SYSLOG_JS_IN = "direct:syslog-js-in";
private static final String EVENT_JS_OUT = "mock:event-js-out";
private static final String SYSLOG_PY_IN = "direct:syslog-py-in";
private static final String EVENT_PY_OUT = "mock:event-py-out";
private static final String SYSLOG_RB_IN = "direct:syslog-rb-in";
private static final String EVENT_RB_OUT = "mock:event-rb-out";
protected AbstractXmlApplicationContext createApplicationContext() {
return new ClassPathXmlApplicationContext("META-INF/spring/test-syslog-event-scripting.xml");
}
@Before
public void setUp() throws Exception {
super.setUp();
sm = new SyslogMessage();
e = new RawEvent();
headers = new HashMap<String,Object>();
headers.put("syslog", sm);
headers.put("event",e);
}
// @Ignore("Requires access to Boundary Server")
// @Override
// protected RouteBuilder[] createRouteBuilders() throws Exception {
// RouteBuilder[] routes = new RouteBuilder[1];
//
// routes[0] = new RouteBuilder() {
// @Override
// public void configure() throws Exception {
//
// from(SYSLOG_JS_IN)
// .routeId("foo")
// .to("language:javascript:classpath:syslog_to_event.js")
// .to(EVENT_JS_OUT)
// ;
// }
// };
//
// return routes;
// }
/**
* Utility
* @param in
* @param out
* @throws InterruptedException
*/
private RawEvent getEvent(String inUrl, String outUrl) {
Endpoint in = getMandatoryEndpoint(inUrl);
assertNotNull(in);
MockEndpoint out = getMockEndpoint(outUrl);
assertNotNull(out);
out.setExpectedMessageCount(1);
template.sendBodyAndHeaders(in,e,headers);
List<Exchange> exchanges = out.getExchanges();
RawEvent newEvent = exchanges.get(0).getIn().getBody(RawEvent.class);
assertNotNull(newEvent);
try {
out.assertIsSatisfied();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
LOG.debug("MockEndpoint interrupted");
}
return newEvent;
}
/**
*
* Java Script
*
* @throws Exception
*/
@Test
public void testSysLogToEventJavaScript(){
getEvent(SYSLOG_JS_IN,EVENT_JS_OUT);
}
/**
* Python
*
* @throws InterruptedException
*/
@Ignore("Scripting using python not implemented yet.")
@Test
public void testSysLogToEventPython() {
getEvent(SYSLOG_PY_IN,EVENT_PY_OUT);
}
/**
* Ruby
*
* @throws InterruptedException
*/
@Ignore("Scripting using ruby not implemented yet.")
@Test
public void testSysLogToEventRuby() {
getEvent(SYSLOG_RB_IN,EVENT_RB_OUT);
}
/**
* Set the properties on an event
*/
//@Test
void testSettingEventProperties() {
}
}