package org.jentrata.ebms.as4.internal.routes; import org.apache.camel.EndpointInject; import org.apache.camel.Exchange; import org.apache.camel.LoggingLevel; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.impl.DefaultExchange; import org.apache.camel.impl.JndiRegistry; import org.apache.camel.test.junit4.CamelTestSupport; import org.jentrata.ebms.EbmsConstants; import org.jentrata.ebms.MessageType; import org.jentrata.ebms.cpa.PartnerAgreement; import org.jentrata.ebms.cpa.pmode.Security; import org.jentrata.ebms.messaging.MessageStore; import org.jentrata.ebms.messaging.UUIDGenerator; import org.junit.Test; import org.w3c.dom.Document; import java.io.File; import java.io.FileInputStream; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.Matchers.endsWith; import static org.hamcrest.Matchers.hasXPath; /** * Unit test for org.jentrata.ebms.as4.internal.routes.EbmsSignalMessageRouteBuilder * * @author aaronwalker */ public class EbmsSignalMessageRouteBuilderTest extends CamelTestSupport { @EndpointInject(uri = "mock:mockEbmsOutbound") protected MockEndpoint mockEbmsOutbound; @EndpointInject(uri = "mock:mockUpdateMessageStore") protected MockEndpoint mockUpdateMessageStore; @Test public void testGenerateValidReceiptSignalMessage() throws Exception{ mockEbmsOutbound.setExpectedMessageCount(1); mockUpdateMessageStore.setExpectedMessageCount(1); Exchange request = new DefaultExchange(context()); request.getIn().setHeader(EbmsConstants.MESSAGE_FROM,"123456789"); request.getIn().setHeader(EbmsConstants.MESSAGE_TO,"192837465"); request.getIn().setHeader(EbmsConstants.MESSAGE_ID,"orders123@buyer.jentrata.org"); request.getIn().setBody(new FileInputStream(fileFromClasspath("simple-as4-receipt.xml"))); context().createProducerTemplate().send("direct:testGenerateReceipt",request); assertMockEndpointsSatisfied(); Exchange receipt = mockEbmsOutbound.getExchanges().get(0); assertThat(receipt, notNullValue()); assertThat(receipt.getIn().getBody(Document.class), hasXPath("//*[local-name()='SignalMessage']")); assertThat(receipt.getIn().getBody(Document.class), hasXPath("//*[local-name()='MessageId' and contains(text(), '@jentrata.org')]")); assertThat(receipt.getIn().getBody(Document.class), hasXPath("//*[local-name()='RefToMessageId' and text()='orders123@buyer.jentrata.org']")); assertThat(receipt.getIn().getHeader(EbmsConstants.MESSAGE_TYPE,String.class), equalTo(MessageType.SIGNAL_MESSAGE.name())); assertThat(receipt.getIn().getHeader(EbmsConstants.MESSAGE_ID,String.class), endsWith("@jentrata.org")); assertThat(receipt.getIn().getHeader(EbmsConstants.MESSAGE_DIRECTION, String.class), equalTo(EbmsConstants.MESSAGE_DIRECTION_OUTBOUND)); assertThat(receipt.getIn().getHeader(EbmsConstants.CONTENT_TYPE, String.class), equalTo(EbmsConstants.SOAP_XML_CONTENT_TYPE)); assertThat(receipt.getIn().getHeader(EbmsConstants.REF_TO_MESSAGE_ID, String.class), equalTo("orders123@buyer.jentrata.org")); } @Override protected JndiRegistry createRegistry() throws Exception { JndiRegistry registry = super.createRegistry(); registry.bind("uuidGenerator", new UUIDGenerator()); return registry; } @Override protected RouteBuilder [] createRouteBuilders() throws Exception { EbmsSignalMessageRouteBuilder routeBuilder = new EbmsSignalMessageRouteBuilder(); routeBuilder.setInboundEbmsQueue("direct:testGenerateReceipt"); routeBuilder.setOutboundEbmsQueue(mockEbmsOutbound.getEndpointUri()); routeBuilder.setMessageInsertEndpoint(mockUpdateMessageStore.getEndpointUri()); return new RouteBuilder[] { routeBuilder, new RouteBuilder() { @Override public void configure() throws Exception { from(MessageStore.DEFAULT_MESSAGE_STORE_ENDPOINT) .log(LoggingLevel.INFO, "Storing message no where ${headers}") .routeId("mockStoreMessage"); from("direct:wsseAddSecurityToHeader") .log(LoggingLevel.INFO,"adding WSSE Header") .routeId(""); from("direct:lookupCpaId") .choice() .when(header("test").isEqualTo("unknownCPA")) .setHeader(EbmsConstants.CPA, constant(null)) .setHeader(EbmsConstants.CPA_ID, constant(EbmsConstants.CPA_ID_UNKNOWN)) .otherwise() .setHeader(EbmsConstants.CPA,constant(getAgreement())) .routeId("mockLookupCpaId"); } } }; } private PartnerAgreement getAgreement() { PartnerAgreement partnerAgreement = new PartnerAgreement(); partnerAgreement.setCpaId("testCPAId"); Security security = new Security(); partnerAgreement.setSecurity(security); return partnerAgreement; } protected static File fileFromClasspath(String filename) { File file = new File(Thread.currentThread().getContextClassLoader().getResource(filename).getFile()); return file; } }