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

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

commit fdf5beaa8ccdf335feb03b32d3a8495502e57eae
Author: James Netherton <[email protected]>
AuthorDate: Fri Jul 8 08:03:41 2022 +0100

    Add test for @Singleton scoped beans in dev mode
    
    Fixes #3856
---
 extensions-core/core/deployment/pom.xml            | 10 +++
 .../runtime/CamelDevModeSingletonBeanTest.java     | 90 ++++++++++++++++++++++
 2 files changed, 100 insertions(+)

diff --git a/extensions-core/core/deployment/pom.xml 
b/extensions-core/core/deployment/pom.xml
index 765250a7de..d1dd124d5b 100644
--- a/extensions-core/core/deployment/pom.xml
+++ b/extensions-core/core/deployment/pom.xml
@@ -61,6 +61,11 @@
         </dependency>
 
         <!-- test dependencies -->
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-bean</artifactId>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-direct</artifactId>
@@ -71,6 +76,11 @@
             <artifactId>camel-log</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-timer</artifactId>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-junit5-internal</artifactId>
diff --git 
a/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelDevModeSingletonBeanTest.java
 
b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelDevModeSingletonBeanTest.java
new file mode 100644
index 0000000000..35ab6f8422
--- /dev/null
+++ 
b/extensions-core/core/deployment/src/test/java/org/apache/camel/quarkus/core/runtime/CamelDevModeSingletonBeanTest.java
@@ -0,0 +1,90 @@
+/*
+ * 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.quarkus.core.runtime;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.Properties;
+import java.util.UUID;
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import io.quarkus.test.QuarkusDevModeTest;
+import org.apache.camel.builder.RouteBuilder;
+import org.awaitility.Awaitility;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.Asset;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+public class CamelDevModeSingletonBeanTest {
+
+    @RegisterExtension
+    static final QuarkusDevModeTest TEST = new QuarkusDevModeTest()
+            .setLogRecordPredicate(record -> 
record.getLevel().equals(Level.INFO))
+            .setArchiveProducer(() -> ShrinkWrap
+                    .create(JavaArchive.class)
+                    .addClasses(Routes.class, GreetingBean.class)
+                    .addAsResource(applicationProperties(), 
"application.properties"));
+
+    public static final String LOG_MESSAGE = UUID.randomUUID().toString();
+
+    public static Asset applicationProperties() {
+        Writer writer = new StringWriter();
+
+        Properties props = new Properties();
+        props.setProperty("quarkus.banner.enabled", "false");
+        try {
+            props.store(writer, "");
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+
+        return new StringAsset(writer.toString());
+    }
+
+    @Test
+    public void testDevModeSingletonBeanInvocation() {
+        Awaitility.await().atMost(10, TimeUnit.SECONDS).until(() -> {
+            return TEST.getLogRecords().stream().anyMatch(logRecord -> 
logRecord.getMessage().contains(LOG_MESSAGE));
+        });
+    }
+
+    @Singleton
+    @Named("greeting")
+    public static class GreetingBean {
+        public String greet() {
+            return LOG_MESSAGE;
+        }
+    }
+
+    public static class Routes extends RouteBuilder {
+        @Override
+        public void configure() {
+            from("timer:invokeBean?repeatCount=1")
+                    .bean("greeting", "greet")
+                    .log("${body}");
+        }
+    }
+
+}

Reply via email to