camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christian Müller <christian.muel...@gmail.com>
Subject Re: MockEndpoint expectedBodiesReceived should handle duplicates
Date Mon, 23 Jul 2012 21:51:19 GMT
Thanks for reporting William!

Do you consider to raise an JIRA [1] and attach your patch?

[1] https://issues.apache.org/jira/browse/CAMEL

Best,
Christian

On Mon, Jul 23, 2012 at 10:24 PM, wjmcdonald <
william.mcdonald@transcentra.com> wrote:

> When trying to test bodies received like:
>     mock.expectedBodiesReceivedInAnyOrder("100000", "400000", "300000",
> "200000", "400000");
>
> The assertMockEndpointsSatisfied() fails because it does not allow
> duplicate
> items in the list (eg. two "400000").
>
> There is nothing in the javadoc headers that describes the contract these
> methods have (ie. duplicates allowed or not).  However, I believe that
> duplicate message bodies allowed is the correct way it should work.
>
> Looking at the implementation, the family of expectedBodiesReceivedxxx()
> use
> a Set which doesn't allow duplicate items.  The following change to a
> Multiset fixes the problem.  I don't know if it is threadsafe.
>
> (Also, in general, I don't like using 'remove' from collection classes in
> an
> iteration as a way of counting things, etc.  I'd prefer an empty container
> that you add to, rather than one that you subtract from.  Perhaps modern
> Java doesn't have any problems with 'remove()' in a loop anymore, or in
> this
> situation since its not using an Iterator.)
>
> import com.google.common.collect.HashMultiset;
> import com.google.common.collect.Multiset;
>
>   /**
>      * Adds an expectation that the given body values are received by this
>      * endpoint in any order
>      */
>     public void expectedBodiesReceivedInAnyOrder(final List<?> bodies) {
>         expectedMessageCount(bodies.size());
>         this.expectedBodyValues = bodies;
>         this.actualBodyValues = new ArrayList();
>
>         expects(new Runnable() {
>             public void run() {
>              /* These two lines changed */
>                 Multiset actualBodyValuesSet = HashMultiset.create();
>                 actualBodyValuesSet.addAll(actualBodyValues);
>                 for (int i = 0; i < expectedBodyValues.size(); i++) {
>                     Exchange exchange = getReceivedExchange(i);
>                     assertTrue("No exchange received for counter: " + i,
> exchange != null);
>
>                     Object expectedBody = expectedBodyValues.get(i);
>                     assertTrue("Message with body " + expectedBody
>                             + " was expected but not found in " +
> actualBodyValuesSet,
>                             actualBodyValuesSet.remove(expectedBody));
>                 }
>             }
>         });
>     }
>
> Can you fix this family of methods to accept duplicates?
>
>
>
>
> --
> View this message in context:
> http://camel.465427.n5.nabble.com/MockEndpoint-expectedBodiesReceived-should-handle-duplicates-tp5716363.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>

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