diff --git a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/ForwardSyncPhaseTest.java b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/ForwardSyncPhaseTest.java index 8581c6d4ff4..1374e54af81 100644 --- a/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/ForwardSyncPhaseTest.java +++ b/ethereum/eth/src/test/java/org/hyperledger/besu/ethereum/eth/sync/backwardsync/ForwardSyncPhaseTest.java @@ -176,6 +176,22 @@ public void shouldDropBlocksThatWeTrust() { .isEqualTo(getBlockByNumber(LOCAL_HEIGHT + 2).getHeader()); } + @Test + public void shouldMergeEvenLongerChains() { + final BackwardChain backwardChain = createBackwardChain(LOCAL_HEIGHT - 5, LOCAL_HEIGHT+7); + backwardChain.appendExpectedBlock(getBlockByNumber(LOCAL_HEIGHT + 1)); + final BackwardChain finalChain = createBackwardChain(LOCAL_HEIGHT + 2, LOCAL_HEIGHT + 5); + finalChain.prependChain(backwardChain); + + ForwardSyncPhase step = new ForwardSyncPhase(context, finalChain); + + assertThat(finalChain.getFirstAncestorHeader().orElseThrow()) + .isEqualTo(getBlockByNumber(LOCAL_HEIGHT - 5).getHeader()); + step.processKnownAncestors(null); + assertThat(finalChain.getFirstAncestorHeader().orElseThrow()) + .isEqualTo(getBlockByNumber(LOCAL_HEIGHT + 2).getHeader()); + } + @Test public void shouldFindBlockWhenRequested() throws Exception { ForwardSyncPhase step =