use of io.libp2p.core.pubsub.ValidationResult in project teku by ConsenSys.
the class ProposerSlashingTopicHandlerTest method handleMessage_rejectedSlashing.
@Test
public void handleMessage_rejectedSlashing() {
final ProposerSlashing slashing = dataStructureUtil.randomProposerSlashing();
when(processor.process(slashing)).thenReturn(SafeFuture.completedFuture(InternalValidationResult.reject("Nope")));
Bytes serialized = gossipEncoding.encode(slashing);
final SafeFuture<ValidationResult> result = topicHandler.handleMessage(topicHandler.prepareMessage(serialized));
asyncRunner.executeQueuedActions();
assertThat(result).isCompletedWithValue(ValidationResult.Invalid);
}
use of io.libp2p.core.pubsub.ValidationResult in project teku by ConsenSys.
the class VoluntaryExitTopicHandlerTest method handleMessage_invalidSSZ.
@Test
public void handleMessage_invalidSSZ() {
Bytes serialized = Bytes.fromHexString("0x1234");
final ValidationResult result = topicHandler.handleMessage(topicHandler.prepareMessage(serialized)).join();
assertThat(result).isEqualTo(ValidationResult.Invalid);
}
use of io.libp2p.core.pubsub.ValidationResult in project teku by ConsenSys.
the class VoluntaryExitTopicHandlerTest method handleMessage_validExit.
@Test
public void handleMessage_validExit() {
final SignedVoluntaryExit exit = exitGenerator.withEpoch(getBestState(), 3, 3);
when(processor.process(exit)).thenReturn(SafeFuture.completedFuture(InternalValidationResult.ACCEPT));
Bytes serialized = gossipEncoding.encode(exit);
final SafeFuture<ValidationResult> result = topicHandler.handleMessage(topicHandler.prepareMessage(serialized));
asyncRunner.executeQueuedActions();
assertThat(result).isCompletedWithValue(ValidationResult.Valid);
}
use of io.libp2p.core.pubsub.ValidationResult in project teku by ConsenSys.
the class VoluntaryExitTopicHandlerTest method handleMessage_ignoredExit.
@Test
public void handleMessage_ignoredExit() {
final SignedVoluntaryExit exit = exitGenerator.withEpoch(getBestState(), 3, 3);
when(processor.process(exit)).thenReturn(SafeFuture.completedFuture(InternalValidationResult.IGNORE));
Bytes serialized = gossipEncoding.encode(exit);
final SafeFuture<ValidationResult> result = topicHandler.handleMessage(topicHandler.prepareMessage(serialized));
asyncRunner.executeQueuedActions();
assertThat(result).isCompletedWithValue(ValidationResult.Ignore);
}
use of io.libp2p.core.pubsub.ValidationResult in project teku by ConsenSys.
the class LibP2PGossipNetworkBuilder method createGossip.
protected Gossip createGossip(GossipConfig gossipConfig, boolean gossipLogsEnabled, PreparedGossipMessageFactory defaultMessageFactory, GossipTopicFilter gossipTopicFilter, GossipTopicHandlers topicHandlers) {
final GossipParams gossipParams = LibP2PParamsFactory.createGossipParams(gossipConfig);
final GossipScoreParams scoreParams = LibP2PParamsFactory.createGossipScoreParams(gossipConfig.getScoringConfig());
final TopicSubscriptionFilter subscriptionFilter = new MaxCountTopicSubscriptionFilter(MAX_SUBSCIPTIONS_PER_MESSAGE, MAX_SUBSCRIBED_TOPICS, gossipTopicFilter::isRelevantTopic);
GossipRouter router = new GossipRouter(gossipParams, scoreParams, PubsubProtocol.Gossip_V_1_1, subscriptionFilter) {
final SeenCache<Optional<ValidationResult>> seenCache = new TTLSeenCache<>(new FastIdSeenCache<>(msg -> Bytes.wrap(Hash.sha256(msg.getProtobufMessage().getData().toByteArray()))), gossipParams.getSeenTTL(), getCurTimeMillis());
@NotNull
@Override
protected SeenCache<Optional<ValidationResult>> getSeenMessages() {
return seenCache;
}
};
router.setMessageFactory(msg -> {
Preconditions.checkArgument(msg.getTopicIDsCount() == 1, "Unexpected number of topics for a single message: " + msg.getTopicIDsCount());
String topic = msg.getTopicIDs(0);
Bytes payload = Bytes.wrap(msg.getData().toByteArray());
PreparedGossipMessage preparedMessage = topicHandlers.getHandlerForTopic(topic).map(handler -> handler.prepareMessage(payload)).orElse(defaultMessageFactory.create(topic, payload));
return new PreparedPubsubMessage(msg, preparedMessage);
});
router.setMessageValidator(STRICT_FIELDS_VALIDATOR);
if (gossipLogsEnabled) {
if (debugGossipHandler != null) {
throw new IllegalStateException("Adding more than 1 gossip debug handlers is not implemented yet");
}
debugGossipHandler = new LoggingHandler("wire.gossip", LogLevel.DEBUG);
}
PubsubApi pubsubApi = PubsubApiKt.createPubsubApi(router);
return new Gossip(router, pubsubApi, debugGossipHandler);
}
Aggregations