You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/12/30 12:04:23 UTC

[camel] 07/30: CAMEL-17384: Developer Console SPI

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

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

commit 0fa70d314675a79b3dd24bd98ce7ba1ae0fab63d
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Dec 27 12:01:13 2021 +0100

    CAMEL-17384: Developer Console SPI
---
 .../camel/impl/engine/AbstractCamelContext.java    |  2 +-
 .../impl/engine/DefaultDevConsoleResolver.java     |  5 +--
 core/camel-console/pom.xml                         | 29 ++++++++++++++--
 .../camel/impl/console/ContextDevConsoleTest.java  | 39 ++++++++++++++++++++++
 .../src/test/resources/log4j2.properties           | 33 ++++++++++++++++++
 5 files changed, 103 insertions(+), 5 deletions(-)

diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 63ad43d..1d9ff77 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -4380,7 +4380,7 @@ public abstract class AbstractCamelContext extends BaseService
     }
 
     public void setDevConsoleResolver(DevConsoleResolver devConsoleResolver) {
-        this.devConsoleResolver = devConsoleResolver;
+        this.devConsoleResolver = doAddService(devConsoleResolver);
     }
 
     @Override
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultDevConsoleResolver.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultDevConsoleResolver.java
index 6efc9ab..16f15bd 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultDevConsoleResolver.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultDevConsoleResolver.java
@@ -67,7 +67,8 @@ public class DefaultDevConsoleResolver implements DevConsoleResolver, CamelConte
 
         if (type != null) {
             if (DevConsole.class.isAssignableFrom(type)) {
-                return (DevConsole) camelContext.getInjector().newInstance(type, false);
+                answer = (DevConsole) camelContext.getInjector().newInstance(type, false);
+                CamelContextAware.trySetCamelContext(answer, camelContext);
             } else {
                 throw new IllegalArgumentException(
                         "Resolving dev-console: " + id + " detected type conflict: Not a DevConsole implementation. Found: "
@@ -75,7 +76,7 @@ public class DefaultDevConsoleResolver implements DevConsoleResolver, CamelConte
             }
         }
 
-        return null;
+        return answer;
     }
 
     protected Class<?> findDevConsole(String name, CamelContext context) throws Exception {
diff --git a/core/camel-console/pom.xml b/core/camel-console/pom.xml
index 17d7611..1247615 100644
--- a/core/camel-console/pom.xml
+++ b/core/camel-console/pom.xml
@@ -45,9 +45,34 @@
             <artifactId>camel-core-engine</artifactId>
         </dependency>
 
+        <!-- testing -->
         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- logging -->
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-slf4j-impl</artifactId>
+            <scope>test</scope>
         </dependency>
 
     </dependencies>
diff --git a/core/camel-console/src/test/java/org/apache/camel/impl/console/ContextDevConsoleTest.java b/core/camel-console/src/test/java/org/apache/camel/impl/console/ContextDevConsoleTest.java
new file mode 100644
index 0000000..ff0d9e2
--- /dev/null
+++ b/core/camel-console/src/test/java/org/apache/camel/impl/console/ContextDevConsoleTest.java
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ */
+package org.apache.camel.impl.console;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.console.DevConsole;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class ContextDevConsoleTest extends ContextTestSupport {
+
+    @Test
+    public void testContext() throws Exception {
+        DevConsole con = context.adapt(ExtendedCamelContext.class).getDevConsoleResolver().resolveDevConsole("context");
+        Assertions.assertNotNull(con);
+        Assertions.assertEquals("camel", con.getGroup());
+        Assertions.assertEquals("context", con.getId());
+
+        String out = (String) con.call(DevConsole.MediaType.TEXT);
+        Assertions.assertNotNull(out);
+        log.info(out);
+        Assertions.assertTrue(out.contains(context.getName()));
+    }
+}
diff --git a/core/camel-console/src/test/resources/log4j2.properties b/core/camel-console/src/test/resources/log4j2.properties
new file mode 100644
index 0000000..5642469
--- /dev/null
+++ b/core/camel-console/src/test/resources/log4j2.properties
@@ -0,0 +1,33 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+appender.console.type = Console
+appender.console.name = console
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+
+appender.file.type = File
+appender.file.name = file
+appender.file.fileName = target/camel-console-test.log
+appender.file.append = true
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+
+rootLogger.level = INFO
+
+rootLogger.appenderRef.file.ref = file
+#rootLogger.appenderRef.console.ref = console
+