Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • 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
    languagejava
    @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);