Hi there, 

Thanks, but this is not what we are looking for nor how all our integration 
tests are setup right now. 

I know Camel provides a myriad of ways to test your routes by changing parts of 
the route as a mock. We also use that for unit-testing our Processors. It is 
how I started out for integration tests as well, until a colleague pointed out 
we should test the route *as is* and just mock the REST call and other 
endpoints. From an integration point of view (treating camel routes as a black 
box) this is a more 'pure' form of testing. Also, it makes it easier to test 
certain how our route is handling HTTP requests and responses, which are harder 
to mock with direct: routes. 

So from a functional point of view: can we still do integration tests on REST 
services in Camel, where the routes are not altered in any form and an actual 
webserver boots and runs the route? Or has there been a conscious choice to no 
longer support that scenario?

Regards,
Evert-Jan


-----Oorspronkelijk bericht-----
Van: [email protected] <[email protected]> 
Verzonden: vrijdag 3 september 2021 22:06
Aan: Evert-Jan de Bruin <[email protected]>
CC: [email protected]
Onderwerp: Re: CamelSpringBootRunner no longer working since 3.5.0?

Hi!

I have walked your way recently.

That is what I achieved.

build.gradle:
_____________
    testImplementation 'org.springframework.boot:spring-boot-starter-
test'
    testImplementation 'org.apache.camel:camel-test-spring-
junit5:3.11.0'


test:
_____

@SpringBootTest(classes = MyApplication.class) // for run test 
@CamelSpringBootTest // for autowire and start Camel Context @UseAdviceWith // 
for modify routes to be able to test them @Transactional // for not to save 
into database public class MyTest {

  @Autowired
  CamelContext camelContext;

  @Test
  void anyTest {
    // you must use advice before starting Camel context
    doMockEndpoints();
    // prepare your data

    MockEndpoint resultEndpoint =
camelContext.getEndpoint(MOKED_ENPOINT_URI, MockEndpoint.class);

    // you must start the context manually
    camelContext.start();

    // set up of mock endpoint
    resultEndpoint.expectedMessageCount(1);
    resultEndpoint.expectedBodiesReceived(aRequest());

    producerTemplate.sendBody(START_ENDPOINT_URI,
objectMapper.writeValueAsString(anIssueCardRequest()));

    // check if result was satisfied
    resultEndpoint.assertIsSatisfied();
    // and stop the context manually
    camelContext.stop();

  }

  private void doMockEndpoints() throws Exception {
    AdviceWith.adviceWith(camelContext, ROUTE_ID, in -> {
            in.interceptSendToEndpoint(ENDPOINT_URI).setBody().body(ex
-> marshal(aDto()));
    });
  }
}

_________

All endpoints URIs must be changed from real connections to "direct". 
If you write second test (method) inside this class (if you have two and more 
tests inside the Class Test) you should mark each test with @DirtiesContext.


On Fri, 2021-09-03 at 19:09 +0000, Evert-Jan de Bruin wrote:
> Hi,
> 
> I have tried the Junit5 / spring-boot example as well. Does not work 
> either, unfortunately.
> 
> The difference with the sample in github is that I am trying to run an 
> actual webserver in my test listening on a certain port, the example 
> is only running a timer router.
> 
> I have tried to modify the example to run as a webserver, but that 
> gives me problems as well.
> 
> Regards
> Evert-Jan
> 
> 
> -----Oorspronkelijk bericht-----
> Van: Claus Ibsen <[email protected]>
> Verzonden: vrijdag 3 september 2021 17:09
> Aan: [email protected]
> Onderwerp: Re: CamelSpringBootRunner no longer working since 3.5.0?
> 
> Hi
> 
> Take a look at the camel-spring-boot example how its unit tested 
> https://github.com/apache/camel-spring-boot-examples/blob/main/spring-
> boot/src/test/java/sample/camel/MyCamelApplicationJUnit5Test.java
> 
> You should not use @RuntWith anymore
> 
> On Fri, Sep 3, 2021 at 4:33 PM Evert-Jan de Bruin 
> <[email protected]> wrote:
> > 
> > Hello,
> > 
> > 
> > 
> > We are currently (happily) using Camel 3.4.4.
> > 
> > 
> > 
> > When trying to upgrade to any version beyond 3.5.0 (also 3.11.1), 
> > our integration tests won’t run anymore. At first it complained 
> > about the @LocalServerPort annotation not working, but it turned out 
> > the spring boot (including the webserver) just wasn’t loading properly.
> > 
> > 
> > 
> > I have reduced it to a very simple testcase:
> > 
> > @SpringBootTest(classes = StudentMain.class, webEnvironment =
> > SpringBootTest.WebEnvironment.DEFINED_PORT)
> > 
> > @ActiveProfiles("integrationtest")
> > 
> > @RunWith(CamelSpringBootRunner.class)
> > 
> > public class ConfigsRouteBuilderTest  {
> > 
> > 
> > 
> >     private int port = 8080;
> > 
> > 
> > 
> >     @Test
> > 
> >     public void testConfigsRoute() throws Exception {
> > 
> >         HttpEntity<String> httpEntity = new HttpEntity<String>(new 
> > HttpHeaders());
> > 
> >         String uri =
> > String.format(http://localhost:%d/integrationtest/hello, port);
> > 
> >         ResponseEntity<String> response = new 
> > RestTemplate().exchange(uri, HttpMethod.GET, httpEntity, 
> > String.class);
> > 
> > 
> > 
> >         assertEquals("<text>hello world!</text>", 
> > response.getBody());
> > 
> >     }
> > 
> > 
> > 
> > }
> > 
> > 
> > When I try to run this test with 3.4.4, it runs fine. When I try to 
> > run it with Apache camel 3.5.0 or 3.11.1, it is simply not starting 
> > right. The CampelSpringBootRunner does not seem to kick into action.
> > There is no spring boot logo, no tomcat starting and the test 
> > obviously fails with “I/O error on GET request for
> > http://localhost:8080/integrationtest/hello: Connection refused”
> > 
> > Does anyone know what I miss to get things going? Do I need to use 
> > different annotations since 3.5.0?
> > 
> > I have also tested with jUnit5 instead of 4, this didn’t make a 
> > difference.
> > 
> > I am new to this group and not sure if this group allows 
> > attachments, but I have added my pom.xml for reference and could 
> > provide a ZIP of the whole testcase as well.
> > 
> > Regards,
> > Evert-Jan
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > Evert-Jan de Bruin | Software Architect | CACI bv | De Ruijterkade 
> > 7,
> > 1013 AA Amsterdam | +31 (088) 654 35 00 | [email protected] 
> > | www.caci.nl
> > 
> > 
> 
> 
> 
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2

--
_________________
Vyacheslav Boyko,
mailto:[email protected]

Reply via email to