You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2023/04/11 19:45:53 UTC

[camel-quarkus] 05/06: Ref #4447: java-joor-dsl - Improve the test coverage

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

nfilotto pushed a commit to branch java-joor-dsl-backports
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git

commit 793c78d4d4b6ec37c2a8c14d28681198c332aa80
Author: Nicolas Filotto <nf...@talend.com>
AuthorDate: Mon Apr 3 15:44:10 2023 +0200

    Ref #4447: java-joor-dsl - Improve the test coverage
---
 integration-tests/java-joor-dsl/pom.xml            | 51 ++++++++++++++++++++++
 .../quarkus/dsl/java/joor/JavaJoorDslResource.java | 21 +++++++++
 .../src/main/resources/application.properties      |  2 +-
 .../src/main/resources/routes/MyBar.java           | 29 ++++++++++++
 .../src/main/resources/routes/MyBarEcho.java       | 30 +++++++++++++
 .../src/main/resources/routes/MyBarRoute.java      | 28 ++++++++++++
 .../main/resources/routes/MyRoutesWithBeans.java   | 38 ++++++++++++++++
 .../main/resources/routes/MyRoutesWithModel.java   | 36 +++++++++++++++
 .../resources/routes/MyRoutesWithNestedClass.java  | 40 +++++++++++++++++
 .../src/main/resources/routes/MyUser.java          | 46 +++++++++++++++++++
 .../quarkus/dsl/java/joor/JavaJoorDslTest.java     | 21 ++++++++-
 11 files changed, 340 insertions(+), 2 deletions(-)

diff --git a/integration-tests/java-joor-dsl/pom.xml b/integration-tests/java-joor-dsl/pom.xml
index 905f083e95..1ca826a316 100644
--- a/integration-tests/java-joor-dsl/pom.xml
+++ b/integration-tests/java-joor-dsl/pom.xml
@@ -39,6 +39,18 @@
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-direct</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-jackson</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-bean</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-rest</artifactId>
+        </dependency>
         <dependency>
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-resteasy</artifactId>
@@ -72,6 +84,19 @@
             </activation>
             <dependencies>
                 <!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory -->
+                <dependency>
+                    <groupId>org.apache.camel.quarkus</groupId>
+                    <artifactId>camel-quarkus-bean-deployment</artifactId>
+                    <version>${project.version}</version>
+                    <type>pom</type>
+                    <scope>test</scope>
+                    <exclusions>
+                        <exclusion>
+                            <groupId>*</groupId>
+                            <artifactId>*</artifactId>
+                        </exclusion>
+                    </exclusions>
+                </dependency>
                 <dependency>
                     <groupId>org.apache.camel.quarkus</groupId>
                     <artifactId>camel-quarkus-direct-deployment</artifactId>
@@ -98,6 +123,32 @@
                         </exclusion>
                     </exclusions>
                 </dependency>
+                <dependency>
+                    <groupId>org.apache.camel.quarkus</groupId>
+                    <artifactId>camel-quarkus-jackson-deployment</artifactId>
+                    <version>${project.version}</version>
+                    <type>pom</type>
+                    <scope>test</scope>
+                    <exclusions>
+                        <exclusion>
+                            <groupId>*</groupId>
+                            <artifactId>*</artifactId>
+                        </exclusion>
+                    </exclusions>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.camel.quarkus</groupId>
+                    <artifactId>camel-quarkus-rest-deployment</artifactId>
+                    <version>${project.version}</version>
+                    <type>pom</type>
+                    <scope>test</scope>
+                    <exclusions>
+                        <exclusion>
+                            <groupId>*</groupId>
+                            <artifactId>*</artifactId>
+                        </exclusion>
+                    </exclusions>
+                </dependency>
             </dependencies>
         </profile>
         <profile>
diff --git a/integration-tests/java-joor-dsl/src/main/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslResource.java b/integration-tests/java-joor-dsl/src/main/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslResource.java
index 5f08ccbeea..f780863002 100644
--- a/integration-tests/java-joor-dsl/src/main/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslResource.java
+++ b/integration-tests/java-joor-dsl/src/main/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslResource.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.quarkus.dsl.java.joor;
 
+import java.util.Set;
 import java.util.stream.Collectors;
 
 import javax.enterprise.context.ApplicationScoped;
@@ -27,13 +28,16 @@ import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 
+import io.quarkus.runtime.annotations.RegisterForReflection;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.Route;
+import org.apache.camel.component.direct.DirectEndpoint;
 import org.apache.camel.dsl.java.joor.JavaRoutesBuilderLoader;
 import org.apache.camel.quarkus.main.CamelMain;
 import org.apache.camel.spi.RoutesBuilderLoader;
 
+@RegisterForReflection(targets = String.class)
 @Path("/java-joor-dsl")
 @ApplicationScoped
 public class JavaJoorDslResource {
@@ -72,6 +76,23 @@ public class JavaJoorDslResource {
                 .collect(Collectors.joining(","));
     }
 
+    @GET
+    @Path("/main/successful/routes")
+    @Consumes(MediaType.TEXT_PLAIN)
+    @Produces(MediaType.TEXT_PLAIN)
+    public int successfulRoutes() {
+        int successful = 0;
+        Set<String> excluded = Set.of("my-java-route", "reflection-route", "inner-classes-route", "routes-with-rest");
+        for (Route route : main.getCamelContext().getRoutes()) {
+            String name = route.getRouteId();
+            if (route.getEndpoint() instanceof DirectEndpoint && !excluded.contains(name)
+                    && Boolean.TRUE.equals(producerTemplate.requestBody(route.getEndpoint(), "", Boolean.class))) {
+                successful++;
+            }
+        }
+        return successful;
+    }
+
     @POST
     @Path("/hello")
     @Consumes(MediaType.TEXT_PLAIN)
diff --git a/integration-tests/java-joor-dsl/src/main/resources/application.properties b/integration-tests/java-joor-dsl/src/main/resources/application.properties
index 0b17e9e265..e03850aeee 100644
--- a/integration-tests/java-joor-dsl/src/main/resources/application.properties
+++ b/integration-tests/java-joor-dsl/src/main/resources/application.properties
@@ -18,4 +18,4 @@
 #
 # Main
 #
-camel.main.routes-include-pattern = classpath:routes/MyRoutes.java
+camel.main.routes-include-pattern = classpath:routes/*.java
diff --git a/integration-tests/java-joor-dsl/src/main/resources/routes/MyBar.java b/integration-tests/java-joor-dsl/src/main/resources/routes/MyBar.java
new file mode 100644
index 0000000000..2bf03dcf76
--- /dev/null
+++ b/integration-tests/java-joor-dsl/src/main/resources/routes/MyBar.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+public class MyBar {
+
+    private String name;
+
+    public MyBar(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+}
\ No newline at end of file
diff --git a/integration-tests/java-joor-dsl/src/main/resources/routes/MyBarEcho.java b/integration-tests/java-joor-dsl/src/main/resources/routes/MyBarEcho.java
new file mode 100644
index 0000000000..f2efc91170
--- /dev/null
+++ b/integration-tests/java-joor-dsl/src/main/resources/routes/MyBarEcho.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import org.apache.camel.BindToRegistry;
+
+@RegisterForReflection
+@BindToRegistry("myBarEcho")
+public class MyBarEcho {
+
+    private MyBar bar = new MyBar("Moes Bar");
+
+    public String echo(String s) {
+        return s + " is at " + bar.getName();
+    }
+
+}
\ No newline at end of file
diff --git a/integration-tests/java-joor-dsl/src/main/resources/routes/MyBarRoute.java b/integration-tests/java-joor-dsl/src/main/resources/routes/MyBarRoute.java
new file mode 100644
index 0000000000..202f18d0fb
--- /dev/null
+++ b/integration-tests/java-joor-dsl/src/main/resources/routes/MyBarRoute.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import org.apache.camel.builder.RouteBuilder;
+
+public class MyBarRoute extends RouteBuilder {
+
+    @Override
+    public void configure() throws Exception {
+        from("direct:routes-with-bean")
+                .id("routes-with-bean")
+                .bean("myBarEcho")
+                .setBody().simple("${body.endsWith(' is at Moes Bar')}");
+    }
+}
\ No newline at end of file
diff --git a/integration-tests/java-joor-dsl/src/main/resources/routes/MyRoutesWithBeans.java b/integration-tests/java-joor-dsl/src/main/resources/routes/MyRoutesWithBeans.java
new file mode 100644
index 0000000000..3896398a32
--- /dev/null
+++ b/integration-tests/java-joor-dsl/src/main/resources/routes/MyRoutesWithBeans.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import org.apache.camel.BindToRegistry;
+import org.apache.camel.builder.RouteBuilder;
+
+@RegisterForReflection(ignoreNested = false)
+public class MyRoutesWithBeans extends RouteBuilder {
+    @Override
+    public void configure() throws Exception {
+        from("direct:routes-with-inner-bean")
+            .id("routes-with-inner-bean")
+            .bean("myBean")
+            .setBody().simple("${body.endsWith('John!')}");
+    }
+
+    @BindToRegistry("myBean")
+    public static class MyBean {
+
+        public String hi() {
+            return "Hi John!";
+        }
+    }
+}
\ No newline at end of file
diff --git a/integration-tests/java-joor-dsl/src/main/resources/routes/MyRoutesWithModel.java b/integration-tests/java-joor-dsl/src/main/resources/routes/MyRoutesWithModel.java
new file mode 100644
index 0000000000..c5997b823b
--- /dev/null
+++ b/integration-tests/java-joor-dsl/src/main/resources/routes/MyRoutesWithModel.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.model.dataformat.JsonLibrary;
+
+public class MyRoutesWithModel extends RouteBuilder {
+    @Override
+    public void configure() throws Exception {
+        rest("/say")
+            .get("/emp/{id}")
+                .id("routes-with-rest-get")
+                .produces("application/json")
+                .outType(MyUser.class)
+                .to("direct:routes-with-rest");
+
+        from("direct:routes-with-rest")
+            .id("routes-with-rest")
+            .process(exchange -> exchange.getMessage().setBody(new MyUser("Bruce", 68)))
+            .marshal().json(JsonLibrary.Jackson);
+    }
+}
\ No newline at end of file
diff --git a/integration-tests/java-joor-dsl/src/main/resources/routes/MyRoutesWithNestedClass.java b/integration-tests/java-joor-dsl/src/main/resources/routes/MyRoutesWithNestedClass.java
new file mode 100644
index 0000000000..aaac2f15e9
--- /dev/null
+++ b/integration-tests/java-joor-dsl/src/main/resources/routes/MyRoutesWithNestedClass.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+
+public class MyRoutesWithNestedClass extends RouteBuilder {
+    @Override
+    public void configure() throws Exception {
+        Processor toUpper = new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                String body = exchange.getIn().getBody(String.class);
+                body = body.toUpperCase();
+
+                exchange.getMessage().setBody(body);
+            }
+        };
+
+        from("direct:routes-with-nested-class")
+            .id("routes-with-nested-class")
+            .setBody().constant("Some Content")
+            .process(toUpper)
+            .setBody().simple("${body.endsWith('CONTENT')}");
+    }
+}
\ No newline at end of file
diff --git a/integration-tests/java-joor-dsl/src/main/resources/routes/MyUser.java b/integration-tests/java-joor-dsl/src/main/resources/routes/MyUser.java
new file mode 100644
index 0000000000..104791b080
--- /dev/null
+++ b/integration-tests/java-joor-dsl/src/main/resources/routes/MyUser.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+
+@RegisterForReflection
+public class MyUser {
+
+    private String name;
+    private int age;
+
+    public MyUser(String name, int age) {
+        this.name = name;
+        this.age = age;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public int getAge() {
+        return age;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public void setAge(int age) {
+        this.age = age;
+    }
+}
diff --git a/integration-tests/java-joor-dsl/src/test/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslTest.java b/integration-tests/java-joor-dsl/src/test/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslTest.java
index 52bfde5bbd..38998a3cb5 100644
--- a/integration-tests/java-joor-dsl/src/test/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslTest.java
+++ b/integration-tests/java-joor-dsl/src/test/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslTest.java
@@ -22,6 +22,8 @@ import org.apache.camel.dsl.java.joor.JavaRoutesBuilderLoader;
 import org.hamcrest.CoreMatchers;
 import org.junit.jupiter.api.Test;
 
+import static org.hamcrest.CoreMatchers.equalTo;
+
 @QuarkusTest
 class JavaJoorDslTest {
 
@@ -73,6 +75,23 @@ class JavaJoorDslTest {
                 .get("/java-joor-dsl/main/routes")
                 .then()
                 .statusCode(200)
-                .body(CoreMatchers.is("inner-classes-route,my-java-route,reflection-route"));
+                .body(CoreMatchers.is(
+                        "inner-classes-route,my-java-route,reflection-route,routes-with-bean,routes-with-inner-bean,routes-with-nested-class,routes-with-rest,routes-with-rest-get"));
+
+        RestAssured.given()
+                .get("/java-joor-dsl/main/successful/routes")
+                .then()
+                .statusCode(200)
+                .body(CoreMatchers.is("3"));
+    }
+
+    @Test
+    void testRestEndpoints() {
+        RestAssured.given()
+                .get("/say/emp/123")
+                .then()
+                .log().ifValidationFails()
+                .statusCode(200)
+                .body("name", equalTo("Bruce"), "age", equalTo(68));
     }
 }