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]
