You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2023/07/18 09:47:36 UTC

[camel] branch main updated: CAMEL-18957: added conversion documentation

This is an automated email from the ASF dual-hosted git repository.

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 236afe4e581 CAMEL-18957: added conversion documentation
236afe4e581 is described below

commit 236afe4e581eb3ad173ed6fa4e4ea4b131b4c262
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Tue Jul 18 11:26:13 2023 +0200

    CAMEL-18957: added conversion documentation
---
 test-infra/camel-test-infra-core/README.md | 137 +++++++++++++++++++++++++++++
 1 file changed, 137 insertions(+)

diff --git a/test-infra/camel-test-infra-core/README.md b/test-infra/camel-test-infra-core/README.md
new file mode 100644
index 00000000000..5aeb8c2608a
--- /dev/null
+++ b/test-infra/camel-test-infra-core/README.md
@@ -0,0 +1,137 @@
+# Converting Projects
+
+## Converting projects that manage the CamelContext directly
+
+This section describe how to convert projects that create and manage a `CamelContext` directly (i.e.; not relying on `CamelTestSupport`).
+
+1. Add the dependency that brings the CamelContext JUnit 5 extension
+
+```xml
+<dependency>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>camel-test-infra-core</artifactId>
+    <version>${project.version}</version>
+    <type>test-jar</type>
+    <scope>test</scope>
+</dependency>
+```
+
+2. Add the extension as a member variable to the test case:
+
+```java
+@RegisterExtension
+private static CamelContextExtension camelContextExtension = new DefaultCamelContextExtension();
+```
+
+**Tips**: when running multiple tests in the same class, it may be necessary to completed trash the context instance. In this case, create an instance of `TransientCamelContextExtension` and JUnit will properly dispose the instance and create a new one. 
+
+
+3. If necessary, add a private variable for the camel context and assign it during setup:
+
+```java
+private CamelContext context;
+
+@BeforeEach
+void setupTest() throws Exception {
+    context = camelContextExtension.getContext();
+}
+```
+
+4. Routes can be configured by creating a public method annotated with the `@RouteFixture` annotation:
+
+```java
+@RouteFixture
+public void setupRoute(CamelContext camelContext) throws Exception {
+    camelContext.addRoutes(new RouteBuilder() {
+        @Override
+        public void configure() {
+            restConfiguration()
+                .host("localhost")
+                .component("dummy-rest");
+
+            from("direct:foo")
+                .routeId("foo")
+                .to("mock:foo");
+        	}
+   	});
+}
+```
+
+5. The context can be configured by creating a `public` method annotated with the `@ContextFixture` annotation: 
+
+```java
+@ContextFixture
+public void setupContext(CamelContext camelContext) throws Exception{
+    // configure the context
+}
+```
+
+
+## Converting projects that use `CamelTestSupport`
+
+### Easy way
+
+1. Add the dependency that brings the CamelContext JUnit 5 extension
+
+```xml
+<dependency>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>camel-test-infra-core</artifactId>
+    <version>${project.version}</version>
+    <type>test-jar</type>
+    <scope>test</scope>
+</dependency>
+```
+
+2. Replace the inheritance from `CamelTestSupport` with the implementation of support interfaces from `CamelTestSupportHelper`, `ConfigurableRoute` and `ConfigurableContext`. These brings several helper methods from CamelTestSupport and simulate the legacy behavior. 
+
+```java
+public class MyTest implements ConfigurableRoute, CamelTestSupportHelper {
+   // ...
+}
+```
+
+2. Add the extension as a member variable to the test case:
+
+```java
+@RegisterExtension
+public static CamelContextExtension camelContextExtension = new DefaultCamelContextExtension();
+```
+
+**Tips**: when running multiple tests in the same class, it may be necessary to completed trash the context instance. In this case, create an instance of `TransientCamelContextExtension` and JUnit will properly dispose the instance and create a new one.
+
+3. (Optional) If using other test-infra services, adjust the startup ordering, so that it reflects the expected order in which services should be initialized: 
+
+```java
+@Order(1)
+@RegisterExtension
+public static MyLocalContainerService service = new MyLocalContainerService();
+
+@Order(2)
+@RegisterExtension
+public static CamelContextExtension camelContextExtension = new DefaultCamelContextExtension();
+```
+
+
+4. Create the route configuration fixture. Previously that used to be done in a method `createRouteBuilder`, so just create a new method that calls that old method, but, make sure to annotated it with the `@RouteFixture` annotation: 
+
+```java
+@Override
+@RouteFixture
+public void createRouteBuilder(CamelContext context) throws Exception {
+    final RouteBuilder routeBuilder = createRouteBuilder();
+
+    if (routeBuilder != null) {
+        context.addRoutes(routeBuilder);
+    }
+}
+```
+
+5. If necessary, the context can be configured by creating a `public` method annotated with the `@ContextFixture` annotation:
+
+```java
+@ContextFixture
+public void setupContext(CamelContext camelContext) throws Exception {
+    // configure the context
+}
+```