camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mick Knutson" <mknut...@baselogic.com>
Subject Re: Trying to understand how to deal with process() errors and creating an exceptionChannel for bad messages.
Date Thu, 02 Oct 2008 01:24:14 GMT
So I have gotten a bit further, but not all the way.

It appears that if I have a unit test that is overloaded as I can do in
TestNG, then I can seemingly re-use the same mock endpoints.
Here is a valid test that is overloaded 3 different times:

    *@Test(groups = {"functional"})
    @Parameters({"startEndpointUri", "successEndpointUri",
"errorEndpointUri", "messageInputBody"})
    public void testCreateInvalidChangeRequest(String startEndpointUri,
                                               String successEndpointUri,
                                               String errorEndpointUri,
                                               String messageInputBody
    )
            throws Exception {

        MockEndpoint mockSuccessEndpoint =
getMockEndpoint(successEndpointUri);
        MockEndpoint mockFailureEndpoint =
getMockEndpoint(errorEndpointUri);

        mockFailureEndpoint.expectedBodiesReceived(messageInputBody);
        mockFailureEndpoint.expectedMessageCount(1);
        mockSuccessEndpoint.expectedMessageCount(0);

        try {
            // Create and Send message to input queue
            camelContext.addRoutes(
                    createRoute(startEndpointUri,
                            changeRequestProcessor,
                            successEndpointUri,
                            errorEndpointUri
                    )
            );

            producerTemplate.sendBody(startEndpointUri, messageInputBody);

            Assert.fail("Should have thrown a RuntimeCamelException");
        } catch (RuntimeCamelException e) {
            assertIsInstanceOf(e, RuntimeCamelException.class);
        }

        // this is optional.
        testMocksAreValid();

        MockEndpoint.assertIsSatisfied(mockFailureEndpoint,
mockSuccessEndpoint);
    }
*



Now here is the kicker, when I have another test method in this class
running with the same endpoint values:


    *@Test(groups = {"functional"})
    @Parameters({"startEndpointUri", "successEndpointUri",
"errorEndpointUri", "messageInputBody"})
    public void testCreateValidRequest(String startEndpointUri,
                                       String successEndpointUri,
                                       String errorEndpointUri,
                                       String messageInputBody
    )
            throws Exception {
        MockEndpoint mockSuccessEndpoint =
getMockEndpoint(successEndpointUri);
        MockEndpoint mockFailureEndpoint =
getMockEndpoint(errorEndpointUri);

        mockSuccessEndpoint.expectedMessageCount(1);

mockSuccessEndpoint.message(0).header(Constants.REQUEST_DESTINATION).isEqualTo(Constants.CHANNEL_GG_CS_COMMAND_CLUSTER);

        mockFailureEndpoint.expectedMessageCount(0);

        try {
            // setup RouteBuilder...
            // Create and Send message to input queue
            camelContext.addRoutes(
                    createRoute(startEndpointUri,
                            changeRequestProcessor,
                            successEndpointUri,
                            errorEndpointUri
                    )
            );

            // Create and Send message to input queue
            producerTemplate.sendBodyAndHeader(startEndpointUri,
messageInputBody, Constants.COMMAND_TYPE, Constants.PROVISION);

        } catch (RuntimeCamelException e) {
            Assert.fail("Should have thrown a RuntimeCamelException");
        }

        testMocksAreValid();

        MockEndpoint.assertIsSatisfied(mockSuccessEndpoint,
mockFailureEndpoint);
    }
*

*
I get the following errors:*

*<test name="InvalidChangeRequest-bad-commandType">
.....
<exception class="java.lang.AssertionError">
            <message>
              <![CDATA[mock:error Received message count. Expected: <1> but
was: <2>]]>
            </message>
*


So the mock:error queue is not getting cleaned up and there is an extra
message.

So how on earth do I DELETE or RESET or CLEAR this mock? I have spun through
each one and ran mock.reset() but that did not help.

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message