Skip to content

Commit

Permalink
Add tests for context reloading
Browse files Browse the repository at this point in the history
  • Loading branch information
jamesnetherton committed Oct 7, 2024
1 parent c7162f2 commit c75d88e
Show file tree
Hide file tree
Showing 5 changed files with 153 additions and 0 deletions.
5 changes: 5 additions & 0 deletions integration-tests/main/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
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;
Expand Down Expand Up @@ -282,4 +283,31 @@ public boolean jmxConnectorServiceAvailabilityIsExpectedState() {
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);
}
}
}
Original file line number Diff line number Diff line change
@@ -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 {
}
Original file line number Diff line number Diff line change
@@ -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");
}
}
}

0 comments on commit c75d88e

Please sign in to comment.