You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Minh Tran (JIRA)" <ji...@apache.org> on 2016/08/11 23:07:20 UTC

[jira] [Created] (CAMEL-10241) MockEndpointAndSkip and DirtiesContext not working

Minh Tran created CAMEL-10241:
---------------------------------

             Summary: MockEndpointAndSkip and DirtiesContext not working
                 Key: CAMEL-10241
                 URL: https://issues.apache.org/jira/browse/CAMEL-10241
             Project: Camel
          Issue Type: Bug
          Components: camel-test
    Affects Versions: 2.17.3
         Environment: java8
spring boot 1.3.6
            Reporter: Minh Tran


MockEndpointAndSkip does not seem to get re-applied after each test when used in conjunction with DirtiesContext. Here is a unit test exhibiting the problem

{noformat}
@RunWith(CamelSpringBootJUnit4ClassRunner.class)
@SpringApplicationConfiguration
@MockEndpointsAndSkip("direct:b")
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
public class MockTest {

	@Produce(uri = "direct:a")
	private ProducerTemplate producer;

	@EndpointInject(uri = "mock:end")
	private MockEndpoint end;

	@EndpointInject(uri = "mock:direct:b")
	private MockEndpoint directB;

	@Autowired
	private CamelContext context;

	@Configuration
	@EnableAutoConfiguration
	public static class Config extends SpringRouteBuilder {

		@Override
		public void configure() throws Exception {
			from("direct:a").to("direct:b");
			from("direct:b").to("mock:end");
		}
	}

	@Test
	public void testMock() throws InterruptedException {
		end.expectedMessageCount(0);
		directB.expectedBodiesReceived("hello");

		producer.sendBody("hello");

		MockEndpoint.assertIsSatisfied(context);
	}

	@Test
	public void testMock2() throws InterruptedException {
		end.expectedMessageCount(0);
		directB.expectedBodiesReceived("hello");

		producer.sendBody("hello");

		MockEndpoint.assertIsSatisfied(context);
	}
}
{noformat}
testMock and testMock2 are exactly the same and if run individually, they pass. However if you run both, the second one will always fail. Running them both inside eclipse and from maven command line exhibit the same behaviour. 

The error I get is
{noformat}
java.lang.AssertionError: mock://end Received message count. Expected: <0> but was: <1>
{noformat}

Which must mean that the skipping isn’t working. Here’s the tracer output to confirm
{noformat}
org.apache.camel.processor.interceptor.Tracer - ID-minhmac-local-51406-1470352938165-1-2 >>> (route3) from(direct://a) --> direct://b <<< Pattern:InOnly, Headers:{breadcrumbId=ID-minhmac-local-51406-1470352938165-1-1}, BodyType:String, Body:hello
org.apache.camel.processor.interceptor.Tracer - ID-minhmac-local-51406-1470352938165-1-2 >>> (route4) direct://b --> mock://end <<< Pattern:InOnly, Headers:{breadcrumbId=ID-minhmac-local-51406-1470352938165-1-1}, BodyType:String, Body:hello
{noformat}

If you remove the DirtiesContext, then both tests passes. My suspicion is that there is a bug when re-applying the MockEndpointAndSkip when the spring context is being rebuilt between tests.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)