Skip to content

Commit

Permalink
refactor: EventSignatureValidator uses AncientMode (#11433)
Browse files Browse the repository at this point in the history
Signed-off-by: Edward Wertz <edward@swirldslabs.com>
  • Loading branch information
edward-swirldslabs authored and imalygin committed Apr 17, 2024
1 parent 0da729d commit f166424
Showing 1 changed file with 41 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,18 +32,22 @@
import com.swirlds.common.crypto.SerializablePublicKey;
import com.swirlds.common.platform.NodeId;
import com.swirlds.common.test.fixtures.platform.TestPlatformContextBuilder;
import com.swirlds.config.extensions.test.fixtures.TestConfigBuilder;
import com.swirlds.platform.consensus.ConsensusConstants;
import com.swirlds.platform.consensus.NonAncientEventWindow;
import com.swirlds.platform.crypto.SignatureVerifier;
import com.swirlds.platform.event.AncientMode;
import com.swirlds.platform.event.GossipEvent;
import com.swirlds.platform.eventhandling.EventConfig;
import com.swirlds.platform.eventhandling.EventConfig_;
import com.swirlds.platform.gossip.IntakeEventCounter;
import com.swirlds.platform.system.BasicSoftwareVersion;
import com.swirlds.platform.system.SoftwareVersion;
import com.swirlds.platform.system.address.Address;
import com.swirlds.platform.system.address.AddressBook;
import com.swirlds.platform.system.events.BaseEventHashedData;
import com.swirlds.platform.system.events.BaseEventUnhashedData;
import com.swirlds.platform.system.events.EventConstants;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.security.PublicKey;
import java.util.List;
Expand All @@ -52,6 +56,8 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

class EventSignatureValidatorTests {
private Random random;
Expand Down Expand Up @@ -247,20 +253,48 @@ void verificationFails() {
assertEquals(1, exitedIntakePipelineCount.get());
}

@Test
@ParameterizedTest
@ValueSource(booleans = {true, false})
@DisplayName("Ancient events are discarded")
void ancientEvent() {
final GossipEvent event = generateMockEvent(defaultVersion, randomHash(random), currentNodeAddress.getNodeId());
void ancientEvent(final boolean useBirthRoundForAncientThreshold) {
final PlatformContext platformContext = TestPlatformContextBuilder.create()
.withConfiguration(new TestConfigBuilder()
.withValue(EventConfig_.USE_BIRTH_ROUND_ANCIENT_THRESHOLD, useBirthRoundForAncientThreshold)
.getOrCreateConfig())
.build();
final AddressBook previousAddressBook = new AddressBook(List.of(previousNodeAddress));

assertNotEquals(null, validatorWithTrueVerifier.validateSignature(event));
final EventSignatureValidator validator = new EventSignatureValidator(
platformContext,
time,
trueVerifier,
defaultVersion,
previousAddressBook,
currentAddressBook,
intakeEventCounter);

final GossipEvent event = generateMockEvent(defaultVersion, randomHash(random), currentNodeAddress.getNodeId());
final BaseEventHashedData hData = event.getHashedData();
when(hData.getBirthRound()).thenReturn(EventConstants.MINIMUM_ROUND_CREATED);
when(hData.getGeneration()).thenReturn(EventConstants.FIRST_GENERATION);
when(event.getAncientIndicator(any())).thenAnswer(invocation -> {
final AncientMode mode = invocation.getArgument(0);
return mode == AncientMode.GENERATION_THRESHOLD
? EventConstants.FIRST_GENERATION
: EventConstants.MINIMUM_ROUND_CREATED;
});

assertNotEquals(null, validator.validateSignature(event));
assertEquals(0, exitedIntakePipelineCount.get());

// FUTURE WORK: expand to handle birthRound comparison for ancient.
validatorWithTrueVerifier.setNonAncientEventWindow(new NonAncientEventWindow(
ConsensusConstants.ROUND_FIRST,
100L,
0 /* ignored in this context */,
AncientMode.GENERATION_THRESHOLD));
ConsensusConstants.ROUND_FIRST /* ignored in this context */,
platformContext
.getConfiguration()
.getConfigData(EventConfig.class)
.getAncientMode()));

assertNull(validatorWithTrueVerifier.validateSignature(event));
assertEquals(1, exitedIntakePipelineCount.get());
Expand Down

0 comments on commit f166424

Please sign in to comment.