...
synchronnous routes don't need database => AbstractExampleModuleTest is suitable parent class
Code Block @ActiveRoutes(classes = SyncHelloRoute.class) public class SyncHelloRouteTest extends AbstractExampleModuleTest { @Produce(uri = TestWsUriBuilder.URI_WS_IN + "syncHelloRequest") private ProducerTemplate producer; @EndpointInject(uri = "mock:test") private MockEndpoint mock; /** * Checking successful calling. */ @Test public void testSyncHelloRoute() throws Exception { String xml = "<syncHelloRequest xmlns=\"http://openhubframework.org/ws/HelloService-v1\">" + " <name>Mr. Parker</name>" + "</syncHelloRequest>"; String output = producer.requestBody((Object)xml, String.class); SyncHelloResponse res = Tools.unmarshalFromXml(output, SyncHelloResponse.class); assertThat(res, notNullValue()); assertThat(res.getGreeting(), is("Hello Mr. Parker")); } }
asynchronnous routes save messages into dabatase therefore they need DB configuration => AbstractExampleModulesDbTest is suitable parent class
Code Block @ActiveRoutes(classes = AsyncHelloRoute.class) public class AsyncHelloRouteTest extends AbstractExampleModulesDbTest { private static final String REQ_XML = "<asyncHelloRequest xmlns=\"http://openhubframework.org/ws/HelloService-v1\">" + " <name>Mr. Parker</name>" + "</asyncHelloRequest>"; @Produce(uri = TestWsUriBuilder.URI_WS_IN + "asyncHelloRequest") private ProducerTemplate producer; @EndpointInject(uri = "mock:test") private MockEndpoint mock; @Test public void testRouteIn_responseOK() throws Exception { getCamelContext().getRouteDefinition(AsyncHelloRoute.ROUTE_ID_ASYNC_IN) .adviceWith(getCamelContext(), new AdviceWithRouteBuilder() { @Override public void configure() throws Exception { TestUtils.replaceToAsynch(this); weaveAddLast().to("mock:test"); } }); mock.expectedMessageCount(1); // action String output = producer.requestBody((Object) REQ_XML, String.class); // verify mock.assertIsSatisfied(); // verify OK response AsyncHelloResponse res = Tools.unmarshalFromXml(output, AsyncHelloResponse.class); assertThat(res.getConfirmAsyncHello().getStatus(), is(ConfirmationTypes.OK)); // check message header Message inMsg = mock.getExchanges().get(0).getIn(); assertThat((String) inMsg.getHeader(AsynchConstants.OBJECT_ID_HEADER), is("Mr. Parker")); } @Test public void testRouteOut() throws Exception { getCamelContext().getRouteDefinition(AsyncHelloRoute.ROUTE_ID_ASYNC_OUT) .adviceWith(getCamelContext(), new AdviceWithRouteBuilder() { @Override public void configure() throws Exception { weaveAddLast().to("mock:test"); } }); mock.expectedMessageCount(1); // action org.openhubframework.openhub.api.entity.Message msg = createAndSaveMessage(ExternalSystemTestEnum.CRM, ServiceTestEnum.ACCOUNT, "testOp", "payload"); producer.sendBodyAndHeader(AsyncHelloRoute.URI_ASYNC_HELLO_OUT, REQ_XML, AsynchConstants.MSG_HEADER, msg); // verify mock.assertIsSatisfied(); // nothing to verify } }
We should test input and output processing at least.
Webservices testing / mocking
TestWsUriBuilder
- implementation of interface org.openhubframework.openhub.api.route.WebServiceUriBuilder
- does support redirecting webservices inbound and outbound calls to defined "direct" component route
- To enable this, annotation @EnableTestWsUriBuilder is provided, meant to be used in scope of testing class
See javadoc of TestWsUriBuilder for futher reference, and following short snippet of replacing inbound call:
Code Block language java @EnableTestWsUriBuilder @ActiveRoutes(classes = AsyncHelloRoute.class) public class AsyncHelloRouteTest extends AbstractDbTest { private static final String REQ_XML = "<asyncHelloRequest xmlns=\"http://openhubframework.org/ws/HelloService-v1\">" + " <name>Mr. Parker</name>" + "</asyncHelloRequest>"; @Produce(uri = TestWsUriBuilder.URI_WS_IN + "asyncHelloRequest") private ProducerTemplate producer; ... // inbound call final String response = producer.requestBody((Object) REQ_XML, String.class);