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.
This commit is contained in:
Aere Network 2026-08-29 18:50:10 +03:00
parent a7b24b8f30
commit 4ef6565275
3 changed files with 21 additions and 4 deletions

View File

@ -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

View File

@ -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);
}
}

View File

@ -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();