package org.jentrata.ebms.as4.internal.routes; import org.apache.camel.EndpointInject; import org.apache.camel.Exchange; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.impl.DefaultExchange; import org.apache.camel.test.junit4.CamelTestSupport; import org.apache.commons.io.IOUtils; import org.jentrata.ebms.EbmsConstants; import org.jentrata.ebms.MessageStatusType; import org.jentrata.ebms.MessageType; import org.junit.Test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; /** * Unit tests for EbmsSignalMessageHandlerRouteBuilder * * @author aaronwalker */ public class EbmsSignalMessageHandlerRouteBuilderTest extends CamelTestSupport { @EndpointInject(uri = "mock:mockUpdateMessageStore") protected MockEndpoint mockUpdateMessageStore; @Test public void testIncomingSignalMessage() throws Exception { mockUpdateMessageStore.setExpectedMessageCount(1); mockUpdateMessageStore.expectedHeaderReceived(EbmsConstants.MESSAGE_ID,"orders123@buyer.jentrata.org"); mockUpdateMessageStore.expectedHeaderReceived(EbmsConstants.MESSAGE_STATUS, MessageStatusType.DONE); Exchange request = new DefaultExchange(context()); request.getIn().setHeader(Exchange.CONTENT_TYPE,"application/soap+xml"); request.getIn().setHeader(EbmsConstants.MESSAGE_TYPE, MessageType.SIGNAL_MESSAGE.name()); request.getIn().setHeader(EbmsConstants.MESSAGE_ID,"someuniqueid@receiver.jentrata.org"); request.getIn().setHeader(EbmsConstants.REF_TO_MESSAGE_ID,"orders123@buyer.jentrata.org"); request.getIn().setHeader(EbmsConstants.CPA_ID,"testCPAId"); request.getIn().setBody(fileFromClasspath("simple-as4-receipt.xml")); Exchange response = context().createProducerTemplate().send("direct:test",request); assertMockEndpointsSatisfied(); } @Test public void testIncomingSignalMessageWithError() throws Exception { mockUpdateMessageStore.setExpectedMessageCount(1); mockUpdateMessageStore.expectedHeaderReceived(EbmsConstants.MESSAGE_ID, "f2f60e33-f0e7-469b-8c2b-79b615fd6b21@jentrata.org"); mockUpdateMessageStore.expectedHeaderReceived(EbmsConstants.MESSAGE_STATUS, MessageStatusType.ERROR); mockUpdateMessageStore.expectedHeaderReceived(EbmsConstants.MESSAGE_STATUS_DESCRIPTION, "failed authentication"); Exchange request = new DefaultExchange(context()); request.getIn().setHeader(Exchange.CONTENT_TYPE,"application/soap+xml"); request.getIn().setHeader(EbmsConstants.MESSAGE_TYPE, MessageType.SIGNAL_MESSAGE_ERROR.name()); request.getIn().setHeader(EbmsConstants.MESSAGE_ID,"9e81f6b8-c02c-4d43-91cf-d160983fa957@jentrata.org"); request.getIn().setHeader(EbmsConstants.CPA_ID,"testCPAId"); request.getIn().setBody(fileFromClasspath("simple-as4-error.xml")); Exchange response = context().createProducerTemplate().send("direct:test",request); assertMockEndpointsSatisfied(); } @Test public void testIncomingSignalMessageUnknownCPAId() throws Exception { mockUpdateMessageStore.setExpectedMessageCount(0); Exchange request = new DefaultExchange(context()); request.getIn().setHeader(Exchange.CONTENT_TYPE,"application/soap+xml"); request.getIn().setHeader(EbmsConstants.MESSAGE_TYPE, MessageType.SIGNAL_MESSAGE_ERROR.name()); request.getIn().setHeader(EbmsConstants.MESSAGE_ID,"9e81f6b8-c02c-4d43-91cf-d160983fa957@jentrata.org"); request.getIn().setHeader(EbmsConstants.CPA_ID,EbmsConstants.CPA_ID_UNKNOWN); request.getIn().setBody(fileFromClasspath("simple-as4-error.xml")); Exchange response = context().createProducerTemplate().send("direct:test",request); assertMockEndpointsSatisfied(); } @Test public void testIncomingSignalMessageUnknownMessageType() throws Exception { mockUpdateMessageStore.setExpectedMessageCount(0); Exchange request = new DefaultExchange(context()); request.getIn().setHeader(Exchange.CONTENT_TYPE,"application/soap+xml"); request.getIn().setHeader(EbmsConstants.MESSAGE_TYPE, MessageType.USER_MESSAGE.name()); request.getIn().setHeader(EbmsConstants.MESSAGE_ID,"9e81f6b8-c02c-4d43-91cf-d160983fa957@jentrata.org"); request.getIn().setHeader(EbmsConstants.CPA_ID,EbmsConstants.CPA_ID_UNKNOWN); request.getIn().setBody(fileFromClasspath("simple-as4-error.xml")); Exchange response = context().createProducerTemplate().send("direct:test",request); assertMockEndpointsSatisfied(); } @Override protected RouteBuilder createRouteBuilder() throws Exception { EbmsSignalMessageHandlerRouteBuilder routeBuilder = new EbmsSignalMessageHandlerRouteBuilder(); routeBuilder.setInboundEbmsSignalsQueue("direct:test"); routeBuilder.setMessageUpdateEndpoint(mockUpdateMessageStore.getEndpointUri()); return routeBuilder; } protected static String fileFromClasspath(String filename) throws IOException { File file = new File(Thread.currentThread().getContextClassLoader().getResource(filename).getFile()); return IOUtils.toString(new FileInputStream(file)); } }