Hi Claus,

I understand junit4 is deprecated but while I was looking at Evert-Jan's issue I found that some of the test classes in starter components in https://github.com/apache/camel-spring-boot are still set up as Junit4 tests, for example the ones in camel-servlet-starter. Maven claims there are no tests at all in this module because the junit-vintage-engine dependency isn't present so the Junit4 tests are ignored. If I add this dependency then the tests are run but one of them fails due to the change in the property "camel.servlet.mapping.enabled."

So shall I create a JIRA to update the camel-spring-boot tests to Junit5 and fix any that are broken?

Karen

On 09/09/2021 13:35, Claus Ibsen wrote:
Hi

junit4 is deprecated and to be removed in a future Camel release.

On Thu, Sep 9, 2021 at 1:03 PM Karen Lease <karenlease...@gmail.com> wrote:

Hi Evert-Jan,

I found a working Junit5 solution in current camel and addded a comment
a working files to the JIRA issue. But so far I didn't figure out why it
no longer works with Junit4.

Regards,
Karen Lease

On 06/09/2021 11:22, Evert-Jan de Bruin wrote:
Hi Claus,

I have created a JIRA issue with a sample testcase: 
https://issues.apache.org/jira/browse/CAMEL-16925

Thank you!

Evert-Jan de Bruin

-----Oorspronkelijk bericht-----
Van: Claus Ibsen <claus.ib...@gmail.com>
Verzonden: zaterdag 4 september 2021 22:50
Aan: users@camel.apache.org
Onderwerp: Re: CamelSpringBootRunner no longer working since 3.5.0?

Hi

Put together a small spring boot sample app that does this web app port number 
testing thingy, and add the Camel route.
Then put it on github somewhere or create a JIRA and attach a .zip file so 
others can take a look.

On Sat, Sep 4, 2021 at 10:34 PM Evert-Jan de Bruin 
<evert-jan.de.br...@caci.nl.invalid> wrote:

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: mail4...@gmail.com <mail4...@gmail.com>
Verzonden: vrijdag 3 september 2021 22:06
Aan: Evert-Jan de Bruin <evert-jan.de.br...@caci.nl.INVALID>
CC: users@camel.apache.org
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 <claus.ib...@gmail.com>
Verzonden: vrijdag 3 september 2021 17:09
Aan: users@camel.apache.org
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/sprin
g- 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
<evert-jan.de.br...@caci.nl.invalid> 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 |
evert-jan.de.br...@caci.nl
| www.caci.nl





--
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

--
_________________
Vyacheslav Boyko,
mailto:mail4...@gmail.com



--
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2




Reply via email to