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 886d318a4d Improve master-openshift test to capture log of child
process
886d318a4d is described below
commit 886d318a4de210e42001b159484f52e90f08c230
Author: Lukas Lowinger <[email protected]>
AuthorDate: Mon Oct 27 17:33:04 2025 +0100
Improve master-openshift test to capture log of child process
---
.../component/master/it/MasterOpenShiftTest.java | 74 +++++++++++++---------
1 file changed, 44 insertions(+), 30 deletions(-)
diff --git
a/integration-tests/master-openshift/src/test/java/org/apache/camel/quarkus/component/master/it/MasterOpenShiftTest.java
b/integration-tests/master-openshift/src/test/java/org/apache/camel/quarkus/component/master/it/MasterOpenShiftTest.java
index e764ac4f52..4e83e18b28 100644
---
a/integration-tests/master-openshift/src/test/java/org/apache/camel/quarkus/component/master/it/MasterOpenShiftTest.java
+++
b/integration-tests/master-openshift/src/test/java/org/apache/camel/quarkus/component/master/it/MasterOpenShiftTest.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.quarkus.component.master.it;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
@@ -37,6 +38,8 @@ import org.eclipse.microprofile.config.Config;
import org.eclipse.microprofile.config.ConfigProvider;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.zeroturnaround.exec.ProcessExecutor;
import org.zeroturnaround.exec.StartedProcess;
@@ -47,6 +50,7 @@ import static org.hamcrest.Matchers.emptyString;
@QuarkusTest
class MasterOpenShiftTest {
+ private static final Logger LOG =
LoggerFactory.getLogger(MasterOpenShiftTest.class);
@KubernetesTestServer
private KubernetesServer mockOpenShiftServer;
@@ -69,38 +73,47 @@ class MasterOpenShiftTest {
jvmArgs.add("-Dkubernetes.trust.certificates=" +
config.getValue("kubernetes.trust.certificates", String.class));
jvmArgs.add(
"-Dkubernetes.auth.tryServiceAccount=" +
config.getValue("kubernetes.auth.tryServiceAccount", String.class));
- jvmArgs.add("-Dhttp2.disable=" + config.getValue("http2.disable",
String.class));
// Start secondary application process faking KubernetesClusterService
so it assumes being run from a pod named follower
- Consumer<ProcessExecutor> customizer = pe ->
pe.environment("HOSTNAME", "follower");
- QuarkusProcessExecutor followerProcessExecutor = new
QuarkusProcessExecutor(customizer, jvmArgs.toArray(String[]::new));
- StartedProcess followerProcess = null;
-
- try {
- // Verify that this process is the cluster leader
- Awaitility.await().atMost(10, TimeUnit.SECONDS).with().until(() ->
{
- return readLeaderFile("leader").equals("leader");
- });
-
- // Start the follower process and wait until fully initialized
- followerProcess = followerProcessExecutor.start();
- awaitStartup(followerProcessExecutor);
-
- // Verify the follower hasn't taken the leader role yet
- assertThat(readLeaderFile("follower"), emptyString());
-
- // Stop camel and delete the lease mock to trigger fail-over
-
RestAssured.given().get("/master/camel/stop/leader").then().statusCode(204);
- mockOpenShiftServer.getClient().leases().delete();
-
- // Verify that the secondary application has been elected as the
- // cluster leader
- Awaitility.await().atMost(10, TimeUnit.SECONDS).until(() -> {
- return readLeaderFile("follower").equals("leader");
- });
- } finally {
- if (followerProcess != null &&
followerProcess.getProcess().isAlive()) {
- followerProcessExecutor.destroy();
+ try (ByteArrayOutputStream standardStream = new
ByteArrayOutputStream();
+ ByteArrayOutputStream errorStream = new
ByteArrayOutputStream()) {
+ Consumer<ProcessExecutor> customizer = pe ->
pe.environment("HOSTNAME", "follower")
+ .redirectOutputAlsoTo(standardStream)
+ .redirectErrorAlsoTo(errorStream);
+ QuarkusProcessExecutor followerProcessExecutor = new
QuarkusProcessExecutor(customizer,
+ jvmArgs.toArray(String[]::new));
+ StartedProcess followerProcess = null;
+
+ try {
+ // Verify that this process is the cluster leader
+ Awaitility.await().atMost(10,
TimeUnit.SECONDS).with().until(() -> {
+ return readLeaderFile("leader").equals("leader");
+ });
+
+ // Start the follower process and wait until fully initialized
+ followerProcess = followerProcessExecutor.start();
+ awaitStartup(followerProcessExecutor);
+
+ // Verify the follower hasn't taken the leader role yet
+ assertThat(readLeaderFile("follower"), emptyString());
+
+ // Stop camel and delete the lease mock to trigger fail-over
+
RestAssured.given().get("/master/camel/stop/leader").then().statusCode(204);
+ mockOpenShiftServer.getClient().leases().delete();
+
+ // Verify that the secondary application has been elected as
the
+ // cluster leader
+ Awaitility.await().atMost(10, TimeUnit.SECONDS).until(() -> {
+ return readLeaderFile("follower").equals("leader");
+ });
+ } finally {
+ LOG.info("Follower process standard log[start] {}",
standardStream);
+ LOG.info("Follower process standard log[end]");
+ LOG.info("Follower process error log[start] {}", errorStream);
+ LOG.info("Follower process error log[end]");
+ if (followerProcess != null &&
followerProcess.getProcess().isAlive()) {
+ followerProcessExecutor.destroy();
+ }
}
}
}
@@ -116,6 +129,7 @@ class MasterOpenShiftTest {
int status =
RestAssured.given().port(port).get("/q/health").then().extract().statusCode();
return status == 200;
} catch (Exception e) {
+ LOG.error("App is not healthy yet", e);
return false;
}
}