From 4ef6565275fea632432430481165121eb276ec9a Mon Sep 17 00:00:00 2001 From: Aere Network Date: Sat, 29 Aug 2026 18:50:10 +0300 Subject: [PATCH] Apply the isolation guard one twin had and the other lacked D140FleetRestartArmingTest did not clear the aere.pq.* properties and the per-JVM anchor config cache in setUp, while its twin PqFleetRestartArmingTest has done so since 20 August 2026. Without it the class is green on its own and red inside the full suite, on identical sources, because a neighbouring class leaves an armed anchor config cached. That is the concrete cost of keeping two copies of a test: a repair lands in one and not the other, and nothing fails to say so. 1,012 tests, 0 failures. --- anchor/MANIFEST-sha256.txt | 4 ++-- .../common/bft/D078ThresholdReachabilityTest.java | 6 ++++-- .../common/bft/D140FleetRestartArmingTest.java | 15 +++++++++++++++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/anchor/MANIFEST-sha256.txt b/anchor/MANIFEST-sha256.txt index 4093c4c..2842c3c 100644 --- a/anchor/MANIFEST-sha256.txt +++ b/anchor/MANIFEST-sha256.txt @@ -38,11 +38,11 @@ addba40c0d931a3ecfa3b2f0179311dacaa604884e3ebb1d79f958bd913f72e2 consensus/comm b6c9ecbf3cd2ee73111984cd04a89c32ee56a1cc699a197b65ef7c10001b8cbc consensus/common/src/main/java/org/hyperledger/besu/consensus/common/bft/blockcreation/BftBlockCreatorFactory.java 5c8861eba1ea697d8deb88139d92c6ea6636b29d76c881b13e7f6c841ba2324f consensus/common/src/main/java/org/hyperledger/besu/consensus/common/bft/blockcreation/PqAnchorProducer.java 6ace00e18914a1558563e689b7427654b5e6226a31447bef1d0416d993f78840 consensus/common/src/main/java/org/hyperledger/besu/consensus/common/bft/tools/PqRegistryHashTool.java -fab7a67ca190e6cb2469bac842112116208ea5e84e47b064d6617c36be14ae23 consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/D078ThresholdReachabilityTest.java +2620bb98485e5d5649b58d331d1a35031bef56cab8bd18d1e7f9050e61bc09de consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/D078ThresholdReachabilityTest.java 5534cfab3bd59968823265655351491abef8ea73f594677a62bf47c8e88deb54 consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/D078ValidatorSetChangeTest.java da249c59f356e06928f73543d5529ae1911e4613a8125477f475b1dd54daed62 consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/D079ForkArmingTest.java 9a794d7a4010ff5c561008229cb2ae97d5f79367641190c97cde8802b83daa72 consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/D081RegistryRotationTest.java -a4c979fcd296f974c58b372d763b2bbf7fa96997f0fd52d66e5ac14185d5b8ab consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/D140FleetRestartArmingTest.java +9ab9918f4e5bef6485fef1251a07504e32b8b2d42393d3fcbb35d7e1241a7deb consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/D140FleetRestartArmingTest.java 2e81e02a419cdb2053b67e2bc9e699af1366955fa18d351178637b64a48a27be consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/D141SealPersistenceTest.java 42dd6396583aa19475e23c9781f568958d9789f0dba084dc63ac9833203f3f1f consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/D146ArmingGateTest.java 75fca200a2ac9e7226c70d96916a4ae33201a8acb466d0fdc591576e09edb3fc consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/D147InertBinaryTest.java diff --git a/anchor/consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/D078ThresholdReachabilityTest.java b/anchor/consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/D078ThresholdReachabilityTest.java index 8b040bc..c64af47 100644 --- a/anchor/consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/D078ThresholdReachabilityTest.java +++ b/anchor/consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/D078ThresholdReachabilityTest.java @@ -19,6 +19,8 @@ import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import org.hyperledger.besu.consensus.common.bft.blockcreation.PqAnchorProducer; + import java.lang.reflect.Field; import java.nio.file.Files; import java.nio.file.Path; @@ -128,8 +130,7 @@ public class D078ThresholdReachabilityTest { // fixtures into AERE-PQC-REG-ARM-02 refusals, green alone, red in the suite, identical sources. // The twin (PqForkThresholdReachabilityTest) has carried this line since 2026-08-11 with the // same story; this class was forked before that fix and never received it. - org.hyperledger.besu.consensus.common.bft.blockcreation.PqAnchorProducer.useConfigForTesting( - null); + PqAnchorProducer.useConfigForTesting(null); resetFalconSingleton(); } @@ -352,3 +353,4 @@ public class D078ThresholdReachabilityTest { f.set(null, null); } } + diff --git a/anchor/consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/D140FleetRestartArmingTest.java b/anchor/consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/D140FleetRestartArmingTest.java index d2b0217..0399191 100644 --- a/anchor/consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/D140FleetRestartArmingTest.java +++ b/anchor/consensus/common/src/test/java/org/hyperledger/besu/consensus/common/bft/D140FleetRestartArmingTest.java @@ -114,6 +114,21 @@ public class D140FleetRestartArmingTest { @BeforeEach public void setUp() throws Exception { + // ADDED 2026-08-29 (finding D-293), and it was MISSING here while its twin had carried it since + // 2026-08-20. That is the whole danger of keeping two copies of a test: a repair lands in one + // and not the other, and nothing fails to say so. This class never arms the certificate anchor, + // but FalconSealSupport's constructor consults it (anchorArmedFrom() -> PqAnchorProducer.config(), + // a per-JVM cache): a neighbouring class that leaves an ARMED config cached turns every + // proof-less fixture below into an AERE-PQC-REG-ARM-02 refusal. Measured on the production tree: + // alone 5/5 green, inside the full suite the same 5 red, identical sources. Clearing the + // properties does not clear the caches. + for (final String p : System.getProperties().stringPropertyNames()) { + if (p.startsWith("aere.pq.")) { + System.clearProperty(p); + } + } + org.hyperledger.besu.consensus.common.bft.blockcreation.PqAnchorProducer.useConfigForTesting( + null); resetFalconSingleton(); final SecureRandom rnd = SecureRandomProvider.createSecureRandom();