From 2cae4b822bacb54f5bc26b2c5d6956c717d10175 Mon Sep 17 00:00:00 2001 From: Sally MacFarlane Date: Mon, 2 Mar 2026 10:01:19 +1000 Subject: [PATCH 1/2] potential fix for race condidion affecting ATs Signed-off-by: Sally MacFarlane --- .../besu/tests/acceptance/dsl/node/BesuNode.java | 10 ++++++++-- .../acceptance/dsl/node/ProcessBesuNodeRunner.java | 11 +++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/BesuNode.java b/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/BesuNode.java index 3421072ff09..97f739ce872 100644 --- a/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/BesuNode.java +++ b/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/BesuNode.java @@ -365,8 +365,14 @@ private String getDiscoveryPort() { public Optional jsonRpcBaseUrl() { if (isJsonRpcEnabled()) { - return Optional.of( - HTTP + jsonRpcConfiguration.getHost() + ":" + portsProperties.getProperty(JSON_RPC)); + final String port = portsProperties.getProperty(JSON_RPC); + if (port == null) { + throw new IllegalStateException( + "JSON-RPC port not available for node " + + name + + ". Node may have failed to start or ports file was not written."); + } + return Optional.of(HTTP + jsonRpcConfiguration.getHost() + ":" + port); } else { return Optional.empty(); } diff --git a/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/ProcessBesuNodeRunner.java b/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/ProcessBesuNodeRunner.java index 1cd5b4f8c48..2fd714f1208 100644 --- a/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/ProcessBesuNodeRunner.java +++ b/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/ProcessBesuNodeRunner.java @@ -461,8 +461,15 @@ private void waitForFileOrExit(final BesuNode node, final String fileName) { Awaitility.waitAtMost(60, TimeUnit.SECONDS) .until( () -> { - if (!besuProcesses.get(node.getName()).isAlive()) { - return true; + final Process process = besuProcesses.get(node.getName()); + if (!process.isAlive()) { + throw new IllegalStateException( + "Besu process for node " + + node.getName() + + " exited with code " + + process.exitValue() + + " before writing " + + fileName); } try (final Stream s = Files.lines(file.toPath())) { From 685c089d67b5f956f80053312c9b1230b8561630 Mon Sep 17 00:00:00 2001 From: Sally MacFarlane Date: Mon, 9 Mar 2026 12:35:53 +1000 Subject: [PATCH 2/2] restore the original return true behavior when the process exits, but log a WARN instead of throwing. The test can then proceed to check exitCode() as it was designed to do. Signed-off-by: Sally MacFarlane --- .../acceptance/dsl/node/ProcessBesuNodeRunner.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/ProcessBesuNodeRunner.java b/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/ProcessBesuNodeRunner.java index 2fd714f1208..729b68001ba 100644 --- a/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/ProcessBesuNodeRunner.java +++ b/acceptance-tests/dsl/src/main/java/org/hyperledger/besu/tests/acceptance/dsl/node/ProcessBesuNodeRunner.java @@ -463,13 +463,12 @@ private void waitForFileOrExit(final BesuNode node, final String fileName) { () -> { final Process process = besuProcesses.get(node.getName()); if (!process.isAlive()) { - throw new IllegalStateException( - "Besu process for node " - + node.getName() - + " exited with code " - + process.exitValue() - + " before writing " - + fileName); + LOG.warn( + "Besu process for node {} exited with code {} before writing {}", + node.getName(), + process.exitValue(), + fileName); + return true; } try (final Stream s = Files.lines(file.toPath())) {