You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Minh Tran <da...@gmail.com> on 2016/08/05 00:03:14 UTC

Spring boot + MockEndpointsAndSkip + DirtiesContext

Hi

I am using Camel 2.17.2, Spring Boot 1.3.6 and seeing strange behaviour in my unit tests. I’ve simplified it to the following example

@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);
	}
}

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
java.lang.AssertionError: mock://end Received message count. Expected: <0> but was: <1>

Which must mean that the skipping isn’t working. Here’s the tracer output to confirm
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


	

Re: Spring boot + MockEndpointsAndSkip + DirtiesContext

Posted by Pontus Ullgren <ul...@gmail.com>.
Thanks for quick reply.

Turned out I was using the wrong runner class in the @RunWith annotation.
Following Claus instructions in the ticket solved the issue.

Thanks
Pontus

On Tue, 10 Jan 2017 at 23:24 Minh Tran <da...@gmail.com> wrote:

> Hi Pontus,
>
> Yep I ended up raising this
> https://issues.apache.org/jira/browse/CAMEL-9332 <
> https://issues.apache.org/jira/browse/CAMEL-9332>
>
> It was fixed when I last checked this in 2.17.1. Not sure about 2.18.0
> though.
>
> > On 11 Jan 2017, at 9:13 am, Pontus Ullgren <ul...@gmail.com> wrote:
> >
> > Hi,
> >
> > Did anyone ever raise a Jira for this issue ?
> >
> > It seems that @MockEndpointAndSkip still (2.18.0) does not work.
> >
> > Best regards
> > Pontus Ullgren
> >
> > On Tue, 9 Aug 2016 at 02:59 Minh Tran <da...@gmail.com> wrote:
> >
> >> Hi, should I raise a jira for this?
> >>
> >>> On 5 Aug 2016, at 10:03 AM, Minh Tran <da...@gmail.com>
> wrote:
> >>>
> >>> Hi
> >>>
> >>> I am using Camel 2.17.2, Spring Boot 1.3.6 and seeing strange behaviour
> >> in my unit tests. I’ve simplified it to the following example
> >>>
> >>> @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);
> >>>      }
> >>> }
> >>>
> >>> 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
> >>> java.lang.AssertionError: mock://end Received message count. Expected:
> >> <0> but was: <1>
> >>>
> >>> Which must mean that the skipping isn’t working. Here’s the tracer
> >> output to confirm
> >>> 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
> >>>
> >>>
> >>>
> >>
> >>
>
>

Re: Spring boot + MockEndpointsAndSkip + DirtiesContext

Posted by Minh Tran <da...@gmail.com>.
Hi Pontus,

Yep I ended up raising this https://issues.apache.org/jira/browse/CAMEL-9332 <https://issues.apache.org/jira/browse/CAMEL-9332>

It was fixed when I last checked this in 2.17.1. Not sure about 2.18.0 though.

> On 11 Jan 2017, at 9:13 am, Pontus Ullgren <ul...@gmail.com> wrote:
> 
> Hi,
> 
> Did anyone ever raise a Jira for this issue ?
> 
> It seems that @MockEndpointAndSkip still (2.18.0) does not work.
> 
> Best regards
> Pontus Ullgren
> 
> On Tue, 9 Aug 2016 at 02:59 Minh Tran <da...@gmail.com> wrote:
> 
>> Hi, should I raise a jira for this?
>> 
>>> On 5 Aug 2016, at 10:03 AM, Minh Tran <da...@gmail.com> wrote:
>>> 
>>> Hi
>>> 
>>> I am using Camel 2.17.2, Spring Boot 1.3.6 and seeing strange behaviour
>> in my unit tests. I’ve simplified it to the following example
>>> 
>>> @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);
>>>      }
>>> }
>>> 
>>> 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
>>> java.lang.AssertionError: mock://end Received message count. Expected:
>> <0> but was: <1>
>>> 
>>> Which must mean that the skipping isn’t working. Here’s the tracer
>> output to confirm
>>> 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
>>> 
>>> 
>>> 
>> 
>> 


Re: Spring boot + MockEndpointsAndSkip + DirtiesContext

Posted by Pontus Ullgren <ul...@gmail.com>.
Hi,

Did anyone ever raise a Jira for this issue ?

It seems that @MockEndpointAndSkip still (2.18.0) does not work.

Best regards
Pontus Ullgren

On Tue, 9 Aug 2016 at 02:59 Minh Tran <da...@gmail.com> wrote:

> Hi, should I raise a jira for this?
>
> > On 5 Aug 2016, at 10:03 AM, Minh Tran <da...@gmail.com> wrote:
> >
> > Hi
> >
> > I am using Camel 2.17.2, Spring Boot 1.3.6 and seeing strange behaviour
> in my unit tests. I’ve simplified it to the following example
> >
> > @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);
> >       }
> > }
> >
> > 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
> > java.lang.AssertionError: mock://end Received message count. Expected:
> <0> but was: <1>
> >
> > Which must mean that the skipping isn’t working. Here’s the tracer
> output to confirm
> > 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
> >
> >
> >
>
>

Re: Spring boot + MockEndpointsAndSkip + DirtiesContext

Posted by Minh Tran <da...@gmail.com>.
Hi, should I raise a jira for this?

> On 5 Aug 2016, at 10:03 AM, Minh Tran <da...@gmail.com> wrote:
> 
> Hi
> 
> I am using Camel 2.17.2, Spring Boot 1.3.6 and seeing strange behaviour in my unit tests. I’ve simplified it to the following example
> 
> @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);
> 	}
> }
> 
> 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
> java.lang.AssertionError: mock://end Received message count. Expected: <0> but was: <1>
> 
> Which must mean that the skipping isn’t working. Here’s the tracer output to confirm
> 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
> 
> 
>