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
The following commit(s) were added to refs/heads/main by this push: new f9a98e9d98 Add tests for context reloading f9a98e9d98 is described below commit f9a98e9d9824c0b86d4139bc0636742dc6b4f9ad Author: James Netherton <jamesnether...@gmail.com> AuthorDate: Fri Oct 4 13:50:48 2024 +0100 Add tests for context reloading --- integration-tests/main/pom.xml | 5 ++ .../camel/quarkus/main/ContextReloadObserver.java | 34 ++++++++++++ .../camel/quarkus/main/CoreMainResource.java | 28 ++++++++++ .../apache/camel/quarkus/main/ContextReloadIT.java | 23 ++++++++ .../camel/quarkus/main/ContextReloadTest.java | 63 ++++++++++++++++++++++ 5 files changed, 153 insertions(+) diff --git a/integration-tests/main/pom.xml b/integration-tests/main/pom.xml index a5f51e0333..4c74884b24 100644 --- a/integration-tests/main/pom.xml +++ b/integration-tests/main/pom.xml @@ -89,6 +89,11 @@ <artifactId>assertj-core</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.awaitility</groupId> + <artifactId>awaitility</artifactId> + <scope>test</scope> + </dependency> <dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-integration-test-support</artifactId> diff --git a/integration-tests/main/src/main/java/org/apache/camel/quarkus/main/ContextReloadObserver.java b/integration-tests/main/src/main/java/org/apache/camel/quarkus/main/ContextReloadObserver.java new file mode 100644 index 0000000000..57fcc49161 --- /dev/null +++ b/integration-tests/main/src/main/java/org/apache/camel/quarkus/main/ContextReloadObserver.java @@ -0,0 +1,34 @@ +/* + * 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.main; + +import java.util.concurrent.atomic.AtomicBoolean; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.event.Observes; +import org.apache.camel.impl.event.CamelContextReloadedEvent; + +@ApplicationScoped +public class ContextReloadObserver { + static final AtomicBoolean contextReloaded = new AtomicBoolean(false); + + void onReload(@Observes CamelContextReloadedEvent event) { + if (event.getAction().getClass().equals(CoreMainResource.class)) { + contextReloaded.set(true); + } + } +} diff --git a/integration-tests/main/src/main/java/org/apache/camel/quarkus/main/CoreMainResource.java b/integration-tests/main/src/main/java/org/apache/camel/quarkus/main/CoreMainResource.java index 5b369df9ce..40c4887851 100644 --- a/integration-tests/main/src/main/java/org/apache/camel/quarkus/main/CoreMainResource.java +++ b/integration-tests/main/src/main/java/org/apache/camel/quarkus/main/CoreMainResource.java @@ -46,6 +46,7 @@ import org.apache.camel.quarkus.it.support.typeconverter.MyPair; import org.apache.camel.reactive.vertx.VertXReactiveExecutor; import org.apache.camel.reactive.vertx.VertXThreadPoolFactory; import org.apache.camel.spi.BeanRepository; +import org.apache.camel.spi.ContextReloadStrategy; import org.apache.camel.spi.DataFormat; import org.apache.camel.spi.FactoryFinderResolver; import org.apache.camel.spi.Language; @@ -282,4 +283,31 @@ public class CoreMainResource { return isNativeMode && e instanceof ConnectException; } } + + @Path("/context/reload/strategy") + @GET + @Produces(MediaType.TEXT_PLAIN) + public String contextReloadStrategy() { + ContextReloadStrategy contextReloadStrategy = main.getCamelContext().hasService(ContextReloadStrategy.class); + if (contextReloadStrategy != null) { + return contextReloadStrategy.getClass().getName(); + } + return null; + } + + @Path("/context/reload") + @GET + @Produces(MediaType.TEXT_PLAIN) + public boolean contextReloadStatus() { + return ContextReloadObserver.contextReloaded.get(); + } + + @Path("/context/reload") + @POST + public void contextReload() { + ContextReloadStrategy contextReloadStrategy = main.getCamelContext().hasService(ContextReloadStrategy.class); + if (contextReloadStrategy != null) { + contextReloadStrategy.onReload(this); + } + } } diff --git a/integration-tests/main/src/test/java/org/apache/camel/quarkus/main/ContextReloadIT.java b/integration-tests/main/src/test/java/org/apache/camel/quarkus/main/ContextReloadIT.java new file mode 100644 index 0000000000..5fded54019 --- /dev/null +++ b/integration-tests/main/src/test/java/org/apache/camel/quarkus/main/ContextReloadIT.java @@ -0,0 +1,23 @@ +/* + * 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.main; + +import io.quarkus.test.junit.QuarkusIntegrationTest; + +@QuarkusIntegrationTest +class ContextReloadIT extends ContextReloadTest { +} diff --git a/integration-tests/main/src/test/java/org/apache/camel/quarkus/main/ContextReloadTest.java b/integration-tests/main/src/test/java/org/apache/camel/quarkus/main/ContextReloadTest.java new file mode 100644 index 0000000000..7f01e381c8 --- /dev/null +++ b/integration-tests/main/src/test/java/org/apache/camel/quarkus/main/ContextReloadTest.java @@ -0,0 +1,63 @@ +/* + * 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.main; + +import java.time.Duration; +import java.util.Map; + +import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.junit.QuarkusTestProfile; +import io.quarkus.test.junit.TestProfile; +import io.restassured.RestAssured; +import org.apache.camel.support.DefaultContextReloadStrategy; +import org.junit.jupiter.api.Test; + +import static org.awaitility.Awaitility.await; +import static org.hamcrest.Matchers.is; + +@QuarkusTest +@TestProfile(ContextReloadTest.ContextReloadTestProfile.class) +class ContextReloadTest { + @Test + void contextReloadStrategyConfigured() { + RestAssured.get("/test/context/reload/strategy") + .then() + .statusCode(200) + .body(is(DefaultContextReloadStrategy.class.getName())); + } + + @Test + void contextReload() { + RestAssured.post("/test/context/reload") + .then() + .statusCode(204); + + await().atMost(Duration.ofSeconds(10)).pollDelay(Duration.ofMillis(100)).untilAsserted(() -> { + RestAssured.get("/test/context/reload") + .then() + .statusCode(200) + .body(is("true")); + }); + } + + public static final class ContextReloadTestProfile implements QuarkusTestProfile { + @Override + public Map<String, String> getConfigOverrides() { + return Map.of("camel.main.context-reload-enabled", "true"); + } + } +}