diff --git a/consensus/broadcast/shardChainMessenger_test.go b/consensus/broadcast/shardChainMessenger_test.go index f845b669c6d..7846ba12b0d 100644 --- a/consensus/broadcast/shardChainMessenger_test.go +++ b/consensus/broadcast/shardChainMessenger_test.go @@ -56,8 +56,8 @@ func createInterceptorContainer() process.InterceptorsContainer { return &testscommon.InterceptorsContainerStub{ GetCalled: func(topic string) (process.Interceptor, error) { return &testscommon.InterceptorStub{ - ProcessReceivedMessageCalled: func(message p2p.MessageP2P) error { - return nil + ProcessReceivedMessageCalled: func(message p2p.MessageP2P) ([]byte, error) { + return nil, nil }, }, nil }, diff --git a/consensus/spos/interface.go b/consensus/spos/interface.go index 1236ce3cf40..cbbe4c3236e 100644 --- a/consensus/spos/interface.go +++ b/consensus/spos/interface.go @@ -112,7 +112,7 @@ type WorkerHandler interface { // RemoveAllReceivedMessagesCalls removes all the functions handlers RemoveAllReceivedMessagesCalls() // ProcessReceivedMessage method redirects the received message to the channel which should handle it - ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) error + ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) ([]byte, error) // Extend does an extension for the subround with subroundId Extend(subroundId int) // GetConsensusStateChangedChannel gets the channel for the consensusStateChanged diff --git a/consensus/spos/worker.go b/consensus/spos/worker.go index bf17e9c5c6f..825e46eb231 100644 --- a/consensus/spos/worker.go +++ b/consensus/spos/worker.go @@ -384,15 +384,15 @@ func (wrk *Worker) getCleanedList(cnsDataList []*consensus.Message) []*consensus } // ProcessReceivedMessage method redirects the received message to the channel which should handle it -func (wrk *Worker) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, _ p2p.MessageHandler) error { +func (wrk *Worker) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, _ p2p.MessageHandler) ([]byte, error) { if check.IfNil(message) { - return ErrNilMessage + return nil, ErrNilMessage } if message.Data() == nil { - return ErrNilDataToProcess + return nil, ErrNilDataToProcess } if len(message.Signature()) == 0 { - return ErrNilSignatureOnP2PMessage + return nil, ErrNilSignatureOnP2PMessage } isPeerBlacklisted := wrk.peerBlacklistHandler.IsPeerBlacklisted(fromConnectedPeer) @@ -400,13 +400,13 @@ func (wrk *Worker) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedP log.Debug("received message from blacklisted peer", "peer", fromConnectedPeer.Pretty(), ) - return ErrBlacklistedConsensusPeer + return nil, ErrBlacklistedConsensusPeer } topic := GetConsensusTopicID(wrk.shardCoordinator) err := wrk.antifloodHandler.CanProcessMessagesOnTopic(message.Peer(), topic, 1, uint64(len(message.Data())), message.SeqNo()) if err != nil { - return err + return nil, err } defer func() { @@ -423,7 +423,7 @@ func (wrk *Worker) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedP cnsMsg := &consensus.Message{} err = wrk.marshalizer.Unmarshal(cnsMsg, message.Data()) if err != nil { - return err + return nil, err } wrk.consensusState.ResetRoundsWithoutReceivedMessages(cnsMsg.GetPubKey(), message.Peer()) @@ -438,7 +438,7 @@ func (wrk *Worker) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedP err = wrk.checkValidityAndProcessFinalInfo(cnsMsg, message) if err != nil { - return err + return nil, err } wrk.networkShardingCollector.UpdatePeerIDInfo(message.Peer(), cnsMsg.PubKey, wrk.shardCoordinator.SelfId()) @@ -455,7 +455,7 @@ func (wrk *Worker) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedP if isMessageWithBlockHeader || isMessageWithBlockBodyAndHeader { err = wrk.doJobOnMessageWithHeader(cnsMsg) if err != nil { - return err + return nil, err } } @@ -468,12 +468,12 @@ func (wrk *Worker) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedP log.Trace("checkSelfState", "error", errNotCritical.Error()) // in this case should return nil but do not process the message // nil error will mean that the interceptor will validate this message and broadcast it to the connected peers - return nil + return nil, nil } go wrk.executeReceivedMessages(cnsMsg) - return nil + return nil, nil } func (wrk *Worker) shouldBlacklistPeer(err error) bool { diff --git a/consensus/spos/worker_test.go b/consensus/spos/worker_test.go index 97ca9545957..5860fc020c8 100644 --- a/consensus/spos/worker_test.go +++ b/consensus/spos/worker_test.go @@ -422,8 +422,9 @@ func TestWorker_ProcessReceivedMessageShouldErrIfFloodIsDetectedOnTopic(t *testi TopicField: "topic1", SignatureField: []byte("signature"), } - err := wrk.ProcessReceivedMessage(msg, "peer", &p2pmocks.MessengerStub{}) + msgID, err := wrk.ProcessReceivedMessage(msg, "peer", &p2pmocks.MessengerStub{}) assert.Equal(t, expectedErr, err) + assert.Nil(t, msgID) } func TestWorker_ReceivedSyncStateShouldNotSendOnChannelWhenInputIsFalse(t *testing.T) { @@ -537,35 +538,37 @@ func TestWorker_ProcessReceivedMessageTxBlockBodyShouldRetNil(t *testing.T) { PeerField: currentPid, SignatureField: []byte("signature"), } - err := wrk.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) - + msgID, err := wrk.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.Nil(t, err) + assert.Nil(t, msgID) } func TestWorker_ProcessReceivedMessageNilMessageShouldErr(t *testing.T) { t.Parallel() wrk := *initWorker(&statusHandlerMock.AppStatusHandlerStub{}) - err := wrk.ProcessReceivedMessage(nil, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := wrk.ProcessReceivedMessage(nil, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) assert.Equal(t, 0, len(wrk.ReceivedMessages()[bls.MtBlockBody])) assert.Equal(t, spos.ErrNilMessage, err) + assert.Nil(t, msgID) } func TestWorker_ProcessReceivedMessageNilMessageDataFieldShouldErr(t *testing.T) { t.Parallel() wrk := *initWorker(&statusHandlerMock.AppStatusHandlerStub{}) - err := wrk.ProcessReceivedMessage(&p2pmocks.P2PMessageMock{}, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := wrk.ProcessReceivedMessage(&p2pmocks.P2PMessageMock{}, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) assert.Equal(t, 0, len(wrk.ReceivedMessages()[bls.MtBlockBody])) assert.Equal(t, spos.ErrNilDataToProcess, err) + assert.Nil(t, msgID) } func TestWorker_ProcessReceivedMessageEmptySignatureFieldShouldErr(t *testing.T) { t.Parallel() wrk := *initWorker(&statusHandlerMock.AppStatusHandlerStub{}) - err := wrk.ProcessReceivedMessage( + msgID, err := wrk.ProcessReceivedMessage( &p2pmocks.P2PMessageMock{ DataField: []byte("data field"), }, @@ -576,6 +579,7 @@ func TestWorker_ProcessReceivedMessageEmptySignatureFieldShouldErr(t *testing.T) assert.Equal(t, 0, len(wrk.ReceivedMessages()[bls.MtBlockBody])) assert.Equal(t, spos.ErrNilSignatureOnP2PMessage, err) + assert.Nil(t, msgID) } func TestWorker_ProcessReceivedMessageRedundancyNodeShouldResetInactivityIfNeeded(t *testing.T) { @@ -592,7 +596,7 @@ func TestWorker_ProcessReceivedMessageRedundancyNodeShouldResetInactivityIfNeede } wrk.SetNodeRedundancyHandler(nodeRedundancyMock) buff, _ := wrk.Marshalizer().Marshal(&consensus.Message{}) - _ = wrk.ProcessReceivedMessage( + _, _ = wrk.ProcessReceivedMessage( &p2pmocks.P2PMessageMock{ DataField: buff, SignatureField: []byte("signature"), @@ -626,7 +630,7 @@ func TestWorker_ProcessReceivedMessageNodeNotInEligibleListShouldErr(t *testing. nil, ) buff, _ := wrk.Marshalizer().Marshal(cnsMsg) - err := wrk.ProcessReceivedMessage( + msgID, err := wrk.ProcessReceivedMessage( &p2pmocks.P2PMessageMock{ DataField: buff, SignatureField: []byte("signature"), @@ -638,6 +642,7 @@ func TestWorker_ProcessReceivedMessageNodeNotInEligibleListShouldErr(t *testing. assert.Equal(t, 0, len(wrk.ReceivedMessages()[bls.MtBlockBody])) assert.True(t, errors.Is(err, spos.ErrNodeIsNotInEligibleList)) + assert.Nil(t, msgID) } func TestWorker_ProcessReceivedMessageComputeReceivedProposedBlockMetric(t *testing.T) { @@ -833,7 +838,7 @@ func testWorkerProcessReceivedMessageComputeReceivedProposedBlockMetric( PeerField: currentPid, SignatureField: []byte("signature"), } - _ = wrk.ProcessReceivedMessage(msg, "", &p2pmocks.MessengerStub{}) + _, _ = wrk.ProcessReceivedMessage(msg, "", &p2pmocks.MessengerStub{}) return receivedValue, redundancyReason, redundancyStatus } @@ -861,7 +866,7 @@ func TestWorker_ProcessReceivedMessageInconsistentChainIDInConsensusMessageShoul nil, ) buff, _ := wrk.Marshalizer().Marshal(cnsMsg) - err := wrk.ProcessReceivedMessage( + msgID, err := wrk.ProcessReceivedMessage( &p2pmocks.P2PMessageMock{ DataField: buff, SignatureField: []byte("signature"), @@ -871,6 +876,7 @@ func TestWorker_ProcessReceivedMessageInconsistentChainIDInConsensusMessageShoul ) assert.True(t, errors.Is(err, spos.ErrInvalidChainID)) + assert.Nil(t, msgID) } func TestWorker_ProcessReceivedMessageTypeInvalidShouldErr(t *testing.T) { @@ -895,7 +901,7 @@ func TestWorker_ProcessReceivedMessageTypeInvalidShouldErr(t *testing.T) { nil, ) buff, _ := wrk.Marshalizer().Marshal(cnsMsg) - err := wrk.ProcessReceivedMessage( + msgID, err := wrk.ProcessReceivedMessage( &p2pmocks.P2PMessageMock{ DataField: buff, SignatureField: []byte("signature"), @@ -907,6 +913,7 @@ func TestWorker_ProcessReceivedMessageTypeInvalidShouldErr(t *testing.T) { assert.Equal(t, 0, len(wrk.ReceivedMessages()[666])) assert.True(t, errors.Is(err, spos.ErrInvalidMessageType), err) + assert.Nil(t, msgID) } func TestWorker_ProcessReceivedHeaderHashSizeInvalidShouldErr(t *testing.T) { @@ -931,7 +938,7 @@ func TestWorker_ProcessReceivedHeaderHashSizeInvalidShouldErr(t *testing.T) { nil, ) buff, _ := wrk.Marshalizer().Marshal(cnsMsg) - err := wrk.ProcessReceivedMessage( + msgID, err := wrk.ProcessReceivedMessage( &p2pmocks.P2PMessageMock{ DataField: buff, SignatureField: []byte("signature"), @@ -943,6 +950,7 @@ func TestWorker_ProcessReceivedHeaderHashSizeInvalidShouldErr(t *testing.T) { assert.Equal(t, 0, len(wrk.ReceivedMessages()[bls.MtBlockBody])) assert.True(t, errors.Is(err, spos.ErrInvalidHeaderHashSize), err) + assert.Nil(t, msgID) } func TestWorker_ProcessReceivedMessageForFutureRoundShouldErr(t *testing.T) { @@ -967,7 +975,7 @@ func TestWorker_ProcessReceivedMessageForFutureRoundShouldErr(t *testing.T) { nil, ) buff, _ := wrk.Marshalizer().Marshal(cnsMsg) - err := wrk.ProcessReceivedMessage( + msgID, err := wrk.ProcessReceivedMessage( &p2pmocks.P2PMessageMock{ DataField: buff, SignatureField: []byte("signature"), @@ -979,6 +987,7 @@ func TestWorker_ProcessReceivedMessageForFutureRoundShouldErr(t *testing.T) { assert.Equal(t, 0, len(wrk.ReceivedMessages()[bls.MtBlockBody])) assert.True(t, errors.Is(err, spos.ErrMessageForFutureRound)) + assert.Nil(t, msgID) } func TestWorker_ProcessReceivedMessageForPastRoundShouldErr(t *testing.T) { @@ -1003,7 +1012,7 @@ func TestWorker_ProcessReceivedMessageForPastRoundShouldErr(t *testing.T) { nil, ) buff, _ := wrk.Marshalizer().Marshal(cnsMsg) - err := wrk.ProcessReceivedMessage( + msgID, err := wrk.ProcessReceivedMessage( &p2pmocks.P2PMessageMock{ DataField: buff, SignatureField: []byte("signature"), @@ -1015,6 +1024,7 @@ func TestWorker_ProcessReceivedMessageForPastRoundShouldErr(t *testing.T) { assert.Equal(t, 0, len(wrk.ReceivedMessages()[bls.MtBlockBody])) assert.True(t, errors.Is(err, spos.ErrMessageForPastRound)) + assert.Nil(t, msgID) } func TestWorker_ProcessReceivedMessageTypeLimitReachedShouldErr(t *testing.T) { @@ -1045,20 +1055,23 @@ func TestWorker_ProcessReceivedMessageTypeLimitReachedShouldErr(t *testing.T) { SignatureField: []byte("signature"), } - err := wrk.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := wrk.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) assert.Equal(t, 1, len(wrk.ReceivedMessages()[bls.MtBlockBody])) assert.Nil(t, err) + assert.Nil(t, msgID) - err = wrk.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err = wrk.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) assert.Equal(t, 1, len(wrk.ReceivedMessages()[bls.MtBlockBody])) assert.True(t, errors.Is(err, spos.ErrMessageTypeLimitReached)) + assert.Nil(t, msgID) - err = wrk.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err = wrk.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) assert.Equal(t, 1, len(wrk.ReceivedMessages()[bls.MtBlockBody])) assert.True(t, errors.Is(err, spos.ErrMessageTypeLimitReached)) + assert.Nil(t, msgID) } func TestWorker_ProcessReceivedMessageInvalidSignatureShouldErr(t *testing.T) { @@ -1083,7 +1096,7 @@ func TestWorker_ProcessReceivedMessageInvalidSignatureShouldErr(t *testing.T) { nil, ) buff, _ := wrk.Marshalizer().Marshal(cnsMsg) - err := wrk.ProcessReceivedMessage( + msgID, err := wrk.ProcessReceivedMessage( &p2pmocks.P2PMessageMock{ DataField: buff, SignatureField: []byte("signature"), @@ -1095,6 +1108,7 @@ func TestWorker_ProcessReceivedMessageInvalidSignatureShouldErr(t *testing.T) { assert.Equal(t, 0, len(wrk.ReceivedMessages()[bls.MtBlockBody])) assert.True(t, errors.Is(err, spos.ErrInvalidSignatureSize)) + assert.Nil(t, msgID) } func TestWorker_ProcessReceivedMessageReceivedMessageIsFromSelfShouldRetNilAndNotProcess(t *testing.T) { @@ -1124,11 +1138,12 @@ func TestWorker_ProcessReceivedMessageReceivedMessageIsFromSelfShouldRetNilAndNo PeerField: currentPid, SignatureField: []byte("signature"), } - err := wrk.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := wrk.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) assert.Equal(t, 0, len(wrk.ReceivedMessages()[bls.MtBlockBody])) assert.Nil(t, err) + assert.Nil(t, msgID) } func TestWorker_ProcessReceivedMessageWhenRoundIsCanceledShouldRetNilAndNotProcess(t *testing.T) { @@ -1159,11 +1174,12 @@ func TestWorker_ProcessReceivedMessageWhenRoundIsCanceledShouldRetNilAndNotProce PeerField: currentPid, SignatureField: []byte("signature"), } - err := wrk.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := wrk.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) assert.Equal(t, 0, len(wrk.ReceivedMessages()[bls.MtBlockBody])) assert.Nil(t, err) + assert.Nil(t, msgID) } func TestWorker_ProcessReceivedMessageWrongChainIDInProposedBlockShouldError(t *testing.T) { @@ -1205,7 +1221,7 @@ func TestWorker_ProcessReceivedMessageWrongChainIDInProposedBlockShouldError(t * nil, ) buff, _ := wrk.Marshalizer().Marshal(cnsMsg) - err := wrk.ProcessReceivedMessage( + msgID, err := wrk.ProcessReceivedMessage( &p2pmocks.P2PMessageMock{ DataField: buff, SignatureField: []byte("signature"), @@ -1216,6 +1232,7 @@ func TestWorker_ProcessReceivedMessageWrongChainIDInProposedBlockShouldError(t * time.Sleep(time.Second) assert.True(t, errors.Is(err, spos.ErrInvalidChainID)) + assert.Nil(t, msgID) } func TestWorker_ProcessReceivedMessageWithABadOriginatorShouldErr(t *testing.T) { @@ -1266,11 +1283,12 @@ func TestWorker_ProcessReceivedMessageWithABadOriginatorShouldErr(t *testing.T) PeerField: "other originator", SignatureField: []byte("signature"), } - err := wrk.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := wrk.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) assert.Equal(t, 0, len(wrk.ReceivedMessages()[bls.MtBlockHeader])) assert.True(t, errors.Is(err, spos.ErrOriginatorMismatch)) + assert.Nil(t, msgID) } func TestWorker_ProcessReceivedMessageWithHeaderAndWrongHash(t *testing.T) { @@ -1325,11 +1343,12 @@ func TestWorker_ProcessReceivedMessageWithHeaderAndWrongHash(t *testing.T) { PeerField: currentPid, SignatureField: []byte("signature"), } - err := wrk.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := wrk.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) assert.Equal(t, 0, len(wrk.ReceivedMessages()[bls.MtBlockHeader])) assert.ErrorIs(t, err, spos.ErrWrongHashForHeader) + assert.Nil(t, msgID) } func TestWorker_ProcessReceivedMessageOkValsShouldWork(t *testing.T) { @@ -1395,12 +1414,13 @@ func TestWorker_ProcessReceivedMessageOkValsShouldWork(t *testing.T) { PeerField: currentPid, SignatureField: []byte("signature"), } - err := wrk.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := wrk.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) assert.Equal(t, 1, len(wrk.ReceivedMessages()[bls.MtBlockHeader])) assert.Nil(t, err) assert.True(t, wasUpdatePeerIDInfoCalled) + assert.Nil(t, msgID) } func TestWorker_CheckSelfStateShouldErrMessageFromItself(t *testing.T) { @@ -1922,8 +1942,9 @@ func TestWorker_ProcessReceivedMessageWrongHeaderShouldErr(t *testing.T) { PeerField: currentPid, SignatureField: []byte("signature"), } - err := wrk.ProcessReceivedMessage(msg, "", &p2pmocks.MessengerStub{}) + msgID, err := wrk.ProcessReceivedMessage(msg, "", &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, spos.ErrInvalidHeader)) + assert.Nil(t, msgID) } func TestWorker_ProcessReceivedMessageWithSignature(t *testing.T) { @@ -1968,8 +1989,9 @@ func TestWorker_ProcessReceivedMessageWithSignature(t *testing.T) { PeerField: currentPid, SignatureField: []byte("signature"), } - err = wrk.ProcessReceivedMessage(msg, "", &p2pmocks.MessengerStub{}) + msgID, err := wrk.ProcessReceivedMessage(msg, "", &p2pmocks.MessengerStub{}) assert.Nil(t, err) + assert.Nil(t, msgID) p2pMsgWithSignature, ok := wrk.ConsensusState().GetMessageWithSignature(string(pubKey)) require.True(t, ok) diff --git a/dataRetriever/interface.go b/dataRetriever/interface.go index 886ed42a186..ec833525195 100644 --- a/dataRetriever/interface.go +++ b/dataRetriever/interface.go @@ -22,7 +22,7 @@ type ResolverThrottler interface { // Resolver defines what a data resolver should do type Resolver interface { - ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) error + ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) ([]byte, error) SetDebugHandler(handler DebugHandler) error Close() error IsInterfaceNil() bool diff --git a/dataRetriever/mock/headerResolverStub.go b/dataRetriever/mock/headerResolverStub.go index fa87219b082..bb5fc6c75ab 100644 --- a/dataRetriever/mock/headerResolverStub.go +++ b/dataRetriever/mock/headerResolverStub.go @@ -2,16 +2,17 @@ package mock import ( "github.com/multiversx/mx-chain-core-go/core" + "github.com/pkg/errors" + "github.com/multiversx/mx-chain-go/dataRetriever" "github.com/multiversx/mx-chain-go/p2p" - "github.com/pkg/errors" ) var errNotImplemented = errors.New("not implemented") // HeaderResolverStub - type HeaderResolverStub struct { - ProcessReceivedMessageCalled func(message p2p.MessageP2P) error + ProcessReceivedMessageCalled func(message p2p.MessageP2P) ([]byte, error) SetEpochHandlerCalled func(epochHandler dataRetriever.EpochHandler) error SetDebugHandlerCalled func(handler dataRetriever.DebugHandler) error CloseCalled func() error @@ -26,12 +27,12 @@ func (hrs *HeaderResolverStub) SetEpochHandler(epochHandler dataRetriever.EpochH } // ProcessReceivedMessage - -func (hrs *HeaderResolverStub) ProcessReceivedMessage(message p2p.MessageP2P, _ core.PeerID, _ p2p.MessageHandler) error { +func (hrs *HeaderResolverStub) ProcessReceivedMessage(message p2p.MessageP2P, _ core.PeerID, _ p2p.MessageHandler) ([]byte, error) { if hrs.ProcessReceivedMessageCalled != nil { return hrs.ProcessReceivedMessageCalled(message) } - return errNotImplemented + return nil, errNotImplemented } // SetDebugHandler - diff --git a/dataRetriever/mock/resolverStub.go b/dataRetriever/mock/resolverStub.go index c667c9459b2..a1d0b546f4b 100644 --- a/dataRetriever/mock/resolverStub.go +++ b/dataRetriever/mock/resolverStub.go @@ -2,19 +2,20 @@ package mock import ( "github.com/multiversx/mx-chain-core-go/core" + "github.com/multiversx/mx-chain-go/dataRetriever" "github.com/multiversx/mx-chain-go/p2p" ) // ResolverStub - type ResolverStub struct { - ProcessReceivedMessageCalled func(message p2p.MessageP2P) error + ProcessReceivedMessageCalled func(message p2p.MessageP2P) ([]byte, error) SetDebugHandlerCalled func(handler dataRetriever.DebugHandler) error CloseCalled func() error } // ProcessReceivedMessage - -func (rs *ResolverStub) ProcessReceivedMessage(message p2p.MessageP2P, _ core.PeerID, _ p2p.MessageHandler) error { +func (rs *ResolverStub) ProcessReceivedMessage(message p2p.MessageP2P, _ core.PeerID, _ p2p.MessageHandler) ([]byte, error) { return rs.ProcessReceivedMessageCalled(message) } diff --git a/dataRetriever/resolvers/disabled/resolver.go b/dataRetriever/resolvers/disabled/resolver.go index ac51a954260..c031ac2de48 100644 --- a/dataRetriever/resolvers/disabled/resolver.go +++ b/dataRetriever/resolvers/disabled/resolver.go @@ -2,6 +2,7 @@ package disabled import ( "github.com/multiversx/mx-chain-core-go/core" + "github.com/multiversx/mx-chain-go/dataRetriever" "github.com/multiversx/mx-chain-go/p2p" ) @@ -15,8 +16,8 @@ func NewDisabledResolver() *resolver { } // ProcessReceivedMessage returns nil as it is disabled -func (r *resolver) ProcessReceivedMessage(_ p2p.MessageP2P, _ core.PeerID, _ p2p.MessageHandler) error { - return nil +func (r *resolver) ProcessReceivedMessage(_ p2p.MessageP2P, _ core.PeerID, _ p2p.MessageHandler) ([]byte, error) { + return []byte{}, nil } // SetDebugHandler returns nil as it is disabled diff --git a/dataRetriever/resolvers/headerResolver.go b/dataRetriever/resolvers/headerResolver.go index 877c57a31da..cfa849c2a7f 100644 --- a/dataRetriever/resolvers/headerResolver.go +++ b/dataRetriever/resolvers/headerResolver.go @@ -6,12 +6,13 @@ import ( "github.com/multiversx/mx-chain-core-go/core" "github.com/multiversx/mx-chain-core-go/core/check" "github.com/multiversx/mx-chain-core-go/data/typeConverters" + "github.com/multiversx/mx-chain-logger-go" + "github.com/multiversx/mx-chain-go/dataRetriever" "github.com/multiversx/mx-chain-go/dataRetriever/resolvers/epochproviders/disabled" "github.com/multiversx/mx-chain-go/p2p" "github.com/multiversx/mx-chain-go/sharding" "github.com/multiversx/mx-chain-go/storage" - "github.com/multiversx/mx-chain-logger-go" ) var log = logger.GetOrCreate("dataRetriever/resolvers") @@ -109,10 +110,10 @@ func (hdrRes *HeaderResolver) SetEpochHandler(epochHandler dataRetriever.EpochHa // ProcessReceivedMessage will be the callback func from the p2p.Messenger and will be called each time a new message was received // (for the topic this validator was registered to, usually a request topic) -func (hdrRes *HeaderResolver) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) error { +func (hdrRes *HeaderResolver) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) ([]byte, error) { err := hdrRes.canProcessMessage(message, fromConnectedPeer) if err != nil { - return err + return nil, err } hdrRes.throttler.StartProcessing() @@ -120,7 +121,7 @@ func (hdrRes *HeaderResolver) ProcessReceivedMessage(message p2p.MessageP2P, fro rd, err := hdrRes.parseReceivedMessage(message, fromConnectedPeer) if err != nil { - return err + return nil, err } var buff []byte @@ -133,7 +134,7 @@ func (hdrRes *HeaderResolver) ProcessReceivedMessage(message p2p.MessageP2P, fro case dataRetriever.EpochType: buff, err = hdrRes.resolveHeaderFromEpoch(rd.Value) default: - return dataRetriever.ErrResolveTypeUnknown + return nil, dataRetriever.ErrResolveTypeUnknown } if err != nil { hdrRes.DebugHandler().LogFailedToResolveData( @@ -141,7 +142,7 @@ func (hdrRes *HeaderResolver) ProcessReceivedMessage(message p2p.MessageP2P, fro rd.Value, err, ) - return err + return nil, err } if buff == nil { @@ -153,12 +154,12 @@ func (hdrRes *HeaderResolver) ProcessReceivedMessage(message p2p.MessageP2P, fro log.Trace("missing data", "data", rd) - return nil + return []byte{}, nil } hdrRes.DebugHandler().LogSucceededToResolveData(hdrRes.topic, rd.Value) - return hdrRes.Send(buff, message.Peer(), source) + return nil, hdrRes.Send(buff, message.Peer(), source) } func (hdrRes *HeaderResolver) resolveHeaderFromNonce(rd *dataRetriever.RequestData) ([]byte, error) { diff --git a/dataRetriever/resolvers/headerResolver_test.go b/dataRetriever/resolvers/headerResolver_test.go index f50606a244e..2a8754a54cd 100644 --- a/dataRetriever/resolvers/headerResolver_test.go +++ b/dataRetriever/resolvers/headerResolver_test.go @@ -12,13 +12,14 @@ import ( "github.com/multiversx/mx-chain-core-go/core/check" "github.com/multiversx/mx-chain-core-go/data" "github.com/multiversx/mx-chain-core-go/data/block" + "github.com/stretchr/testify/assert" + "github.com/multiversx/mx-chain-go/dataRetriever" "github.com/multiversx/mx-chain-go/dataRetriever/mock" "github.com/multiversx/mx-chain-go/dataRetriever/resolvers" "github.com/multiversx/mx-chain-go/p2p" "github.com/multiversx/mx-chain-go/testscommon/p2pmocks" storageStubs "github.com/multiversx/mx-chain-go/testscommon/storage" - "github.com/stretchr/testify/assert" ) func createMockArgBaseResolver() resolvers.ArgBaseResolver { @@ -165,10 +166,11 @@ func TestHeaderResolver_ProcessReceivedCanProcessMessageErrorsShouldErr(t *testi } hdrRes, _ := resolvers.NewHeaderResolver(arg) - err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.NonceType, nil), fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.NonceType, nil), fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, expectedErr)) assert.False(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.False(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Len(t, msgID, 0) } func TestHeaderResolver_ProcessReceivedMessageNilValueShouldErr(t *testing.T) { @@ -177,10 +179,11 @@ func TestHeaderResolver_ProcessReceivedMessageNilValueShouldErr(t *testing.T) { arg := createMockArgHeaderResolver() hdrRes, _ := resolvers.NewHeaderResolver(arg) - err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.NonceType, nil), fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.NonceType, nil), fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.Equal(t, dataRetriever.ErrNilValue, err) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestHeaderResolver_ProcessReceivedMessage_WrongIdentifierStartBlock(t *testing.T) { @@ -190,10 +193,11 @@ func TestHeaderResolver_ProcessReceivedMessage_WrongIdentifierStartBlock(t *test hdrRes, _ := resolvers.NewHeaderResolver(arg) requestedData := []byte("request") - err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.EpochType, requestedData), "", &p2pmocks.MessengerStub{}) + msgID, err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.EpochType, requestedData), "", &p2pmocks.MessengerStub{}) assert.Equal(t, core.ErrInvalidIdentifierForEpochStartBlockRequest, err) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestHeaderResolver_ProcessReceivedMessageEpochTypeUnknownEpochShouldWork(t *testing.T) { @@ -215,11 +219,12 @@ func TestHeaderResolver_ProcessReceivedMessageEpochTypeUnknownEpochShouldWork(t hdrRes, _ := resolvers.NewHeaderResolver(arg) requestedData := []byte(fmt.Sprintf("epoch_%d", math.MaxUint32)) - err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.EpochType, requestedData), "", &p2pmocks.MessengerStub{}) + msgID, err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.EpochType, requestedData), "", &p2pmocks.MessengerStub{}) assert.NoError(t, err) assert.True(t, wasSent) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Len(t, msgID, 0) } func TestHeaderResolver_ProcessReceivedMessage_Ok(t *testing.T) { @@ -234,10 +239,11 @@ func TestHeaderResolver_ProcessReceivedMessage_Ok(t *testing.T) { hdrRes, _ := resolvers.NewHeaderResolver(arg) requestedData := []byte("request_1") - err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.EpochType, requestedData), "", &p2pmocks.MessengerStub{}) + msgID, err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.EpochType, requestedData), "", &p2pmocks.MessengerStub{}) assert.Nil(t, err) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Len(t, msgID, 0) } func TestHeaderResolver_ProcessReceivedMessageRequestUnknownTypeShouldErr(t *testing.T) { @@ -246,17 +252,17 @@ func TestHeaderResolver_ProcessReceivedMessageRequestUnknownTypeShouldErr(t *tes arg := createMockArgHeaderResolver() hdrRes, _ := resolvers.NewHeaderResolver(arg) - err := hdrRes.ProcessReceivedMessage(createRequestMsg(254, make([]byte, 0)), fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := hdrRes.ProcessReceivedMessage(createRequestMsg(254, make([]byte, 0)), fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.Equal(t, dataRetriever.ErrResolveTypeUnknown, err) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestHeaderResolver_ValidateRequestHashTypeFoundInHdrPoolShouldSearchAndSend(t *testing.T) { t.Parallel() requestedData := []byte("aaaa") - searchWasCalled := false sendWasCalled := false @@ -280,12 +286,13 @@ func TestHeaderResolver_ValidateRequestHashTypeFoundInHdrPoolShouldSearchAndSend arg.Headers = headers hdrRes, _ := resolvers.NewHeaderResolver(arg) - err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, requestedData), fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, requestedData), fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.Nil(t, err) assert.True(t, searchWasCalled) assert.True(t, sendWasCalled) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestHeaderResolver_ValidateRequestHashTypeFoundInHdrPoolShouldSearchAndSendFullHistory(t *testing.T) { @@ -317,12 +324,13 @@ func TestHeaderResolver_ValidateRequestHashTypeFoundInHdrPoolShouldSearchAndSend arg.Headers = headers hdrRes, _ := resolvers.NewHeaderResolver(arg) - err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, requestedData), fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, requestedData), fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.Nil(t, err) assert.True(t, searchWasCalled) assert.True(t, sendWasCalled) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestHeaderResolver_ProcessReceivedMessageRequestHashTypeFoundInHdrPoolMarshalizerFailsShouldErr(t *testing.T) { @@ -360,10 +368,11 @@ func TestHeaderResolver_ProcessReceivedMessageRequestHashTypeFoundInHdrPoolMarsh arg.Headers = headers hdrRes, _ := resolvers.NewHeaderResolver(arg) - err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, requestedData), fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, requestedData), fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.Equal(t, errExpected, err) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestHeaderResolver_ProcessReceivedMessageRequestRetFromStorageShouldRetValAndSend(t *testing.T) { @@ -400,12 +409,13 @@ func TestHeaderResolver_ProcessReceivedMessageRequestRetFromStorageShouldRetValA arg.HdrStorage = store hdrRes, _ := resolvers.NewHeaderResolver(arg) - err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, requestedData), fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, requestedData), fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.Nil(t, err) assert.True(t, wasGotFromStorage) assert.True(t, wasSent) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestHeaderResolver_ProcessReceivedMessageRequestNonceTypeInvalidSliceShouldErr(t *testing.T) { @@ -419,10 +429,11 @@ func TestHeaderResolver_ProcessReceivedMessageRequestNonceTypeInvalidSliceShould } hdrRes, _ := resolvers.NewHeaderResolver(arg) - err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.NonceType, []byte("aaa")), fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.NonceType, []byte("aaa")), fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.Equal(t, dataRetriever.ErrInvalidNonceByteSlice, err) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestHeaderResolver_ProcessReceivedMessageRequestNonceShouldCallWithTheCorrectEpoch(t *testing.T) { @@ -446,7 +457,7 @@ func TestHeaderResolver_ProcessReceivedMessageRequestNonceShouldCallWithTheCorre }, ) msg := &p2pmocks.P2PMessageMock{DataField: buff} - _ = hdrRes.ProcessReceivedMessage(msg, "", &p2pmocks.MessengerStub{}) + _, _ = hdrRes.ProcessReceivedMessage(msg, "", &p2pmocks.MessengerStub{}) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) } @@ -488,7 +499,7 @@ func TestHeaderResolver_ProcessReceivedMessageRequestNonceTypeNotFoundInHdrNonce } hdrRes, _ := resolvers.NewHeaderResolver(arg) - err := hdrRes.ProcessReceivedMessage( + msgID, err := hdrRes.ProcessReceivedMessage( createRequestMsg(dataRetriever.NonceType, arg.NonceConverter.ToByteSlice(requestedNonce)), fromConnectedPeerId, &p2pmocks.MessengerStub{}, @@ -497,6 +508,7 @@ func TestHeaderResolver_ProcessReceivedMessageRequestNonceTypeNotFoundInHdrNonce assert.False(t, wasSent) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestHeaderResolver_ProcessReceivedMessageRequestNonceTypeFoundInHdrNoncePoolShouldRetFromPoolAndSend(t *testing.T) { @@ -534,7 +546,7 @@ func TestHeaderResolver_ProcessReceivedMessageRequestNonceTypeFoundInHdrNoncePoo } hdrRes, _ := resolvers.NewHeaderResolver(arg) - err := hdrRes.ProcessReceivedMessage( + msgID, err := hdrRes.ProcessReceivedMessage( createRequestMsg(dataRetriever.NonceType, arg.NonceConverter.ToByteSlice(requestedNonce)), fromConnectedPeerId, &p2pmocks.MessengerStub{}, @@ -545,6 +557,7 @@ func TestHeaderResolver_ProcessReceivedMessageRequestNonceTypeFoundInHdrNoncePoo assert.True(t, wasSent) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestHeaderResolver_ProcessReceivedMessageRequestNonceTypeFoundInHdrNoncePoolShouldRetFromStorageAndSend(t *testing.T) { @@ -597,7 +610,7 @@ func TestHeaderResolver_ProcessReceivedMessageRequestNonceTypeFoundInHdrNoncePoo } hdrRes, _ := resolvers.NewHeaderResolver(arg) - err := hdrRes.ProcessReceivedMessage( + msgID, err := hdrRes.ProcessReceivedMessage( createRequestMsg(dataRetriever.NonceType, arg.NonceConverter.ToByteSlice(requestedNonce)), fromConnectedPeerId, &p2pmocks.MessengerStub{}, @@ -608,6 +621,7 @@ func TestHeaderResolver_ProcessReceivedMessageRequestNonceTypeFoundInHdrNoncePoo assert.True(t, wasSend) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestHeaderResolver_ProcessReceivedMessageRequestNonceTypeFoundInHdrNoncePoolButMarshalFailsShouldError(t *testing.T) { @@ -654,7 +668,7 @@ func TestHeaderResolver_ProcessReceivedMessageRequestNonceTypeFoundInHdrNoncePoo } hdrRes, _ := resolvers.NewHeaderResolver(arg) - err := hdrRes.ProcessReceivedMessage( + msgID, err := hdrRes.ProcessReceivedMessage( createRequestMsg(dataRetriever.NonceType, arg.NonceConverter.ToByteSlice(requestedNonce)), fromConnectedPeerId, &p2pmocks.MessengerStub{}, @@ -664,6 +678,7 @@ func TestHeaderResolver_ProcessReceivedMessageRequestNonceTypeFoundInHdrNoncePoo assert.True(t, wasResolved) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestHeaderResolver_ProcessReceivedMessageRequestNonceTypeNotFoundInHdrNoncePoolShouldRetFromPoolAndSend(t *testing.T) { @@ -696,7 +711,7 @@ func TestHeaderResolver_ProcessReceivedMessageRequestNonceTypeNotFoundInHdrNonce } hdrRes, _ := resolvers.NewHeaderResolver(arg) - err := hdrRes.ProcessReceivedMessage( + msgID, err := hdrRes.ProcessReceivedMessage( createRequestMsg(dataRetriever.NonceType, arg.NonceConverter.ToByteSlice(requestedNonce)), fromConnectedPeerId, &p2pmocks.MessengerStub{}, @@ -706,6 +721,7 @@ func TestHeaderResolver_ProcessReceivedMessageRequestNonceTypeNotFoundInHdrNonce assert.True(t, wasSend) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestHeaderResolver_ProcessReceivedMessageRequestNonceTypeFoundInHdrNoncePoolCheckRetErr(t *testing.T) { @@ -753,7 +769,7 @@ func TestHeaderResolver_ProcessReceivedMessageRequestNonceTypeFoundInHdrNoncePoo } hdrRes, _ := resolvers.NewHeaderResolver(arg) - err := hdrRes.ProcessReceivedMessage( + msgID, err := hdrRes.ProcessReceivedMessage( createRequestMsg(dataRetriever.NonceType, arg.NonceConverter.ToByteSlice(requestedNonce)), fromConnectedPeerId, &p2pmocks.MessengerStub{}, @@ -762,6 +778,7 @@ func TestHeaderResolver_ProcessReceivedMessageRequestNonceTypeFoundInHdrNoncePoo assert.Equal(t, errExpected, err) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestHeaderResolver_SetEpochHandlerNilShouldErr(t *testing.T) { @@ -816,8 +833,9 @@ func TestHeaderResolver_SetEpochHandlerConcurrency(t *testing.T) { assert.Nil(t, err) return } - err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.EpochType, []byte("request_1")), fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := hdrRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.EpochType, []byte("request_1")), fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.Nil(t, err) + assert.Len(t, msgID, 0) }(i) } wg.Wait() diff --git a/dataRetriever/resolvers/miniblockResolver.go b/dataRetriever/resolvers/miniblockResolver.go index 0c1a1460074..b0ac8738849 100644 --- a/dataRetriever/resolvers/miniblockResolver.go +++ b/dataRetriever/resolvers/miniblockResolver.go @@ -6,10 +6,11 @@ import ( "github.com/multiversx/mx-chain-core-go/core" "github.com/multiversx/mx-chain-core-go/core/check" "github.com/multiversx/mx-chain-core-go/data/batch" + logger "github.com/multiversx/mx-chain-logger-go" + "github.com/multiversx/mx-chain-go/dataRetriever" "github.com/multiversx/mx-chain-go/p2p" "github.com/multiversx/mx-chain-go/storage" - logger "github.com/multiversx/mx-chain-logger-go" ) var _ dataRetriever.Resolver = (*miniblockResolver)(nil) @@ -77,10 +78,10 @@ func checkArgMiniblockResolver(arg ArgMiniblockResolver) error { // ProcessReceivedMessage will be the callback func from the p2p.Messenger and will be called each time a new message was received // (for the topic this validator was registered to, usually a request topic) -func (mbRes *miniblockResolver) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) error { +func (mbRes *miniblockResolver) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) ([]byte, error) { err := mbRes.canProcessMessage(message, fromConnectedPeer) if err != nil { - return err + return nil, err } mbRes.throttler.StartProcessing() @@ -88,7 +89,7 @@ func (mbRes *miniblockResolver) ProcessReceivedMessage(message p2p.MessageP2P, f rd, err := mbRes.parseReceivedMessage(message, fromConnectedPeer) if err != nil { - return err + return nil, err } switch rd.Type { @@ -104,7 +105,7 @@ func (mbRes *miniblockResolver) ProcessReceivedMessage(message p2p.MessageP2P, f err = fmt.Errorf("%w for hash %s", err, logger.DisplayByteSlice(rd.Value)) } - return err + return nil, err } func (mbRes *miniblockResolver) resolveMbRequestByHash(hash []byte, pid core.PeerID, epoch uint32, source p2p.MessageHandler) error { diff --git a/dataRetriever/resolvers/miniblockResolver_test.go b/dataRetriever/resolvers/miniblockResolver_test.go index 6bacadd6861..23787184404 100644 --- a/dataRetriever/resolvers/miniblockResolver_test.go +++ b/dataRetriever/resolvers/miniblockResolver_test.go @@ -129,10 +129,11 @@ func TestMiniblockResolver_ProcessReceivedAntifloodErrorsShouldErr(t *testing.T) } mbRes, _ := resolvers.NewMiniblockResolver(arg) - err := mbRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, nil), fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := mbRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, nil), fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, expectedErr)) assert.False(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.False(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestMiniblockResolver_ProcessReceivedMessageNilValueShouldErr(t *testing.T) { @@ -141,10 +142,11 @@ func TestMiniblockResolver_ProcessReceivedMessageNilValueShouldErr(t *testing.T) arg := createMockArgMiniblockResolver() mbRes, _ := resolvers.NewMiniblockResolver(arg) - err := mbRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, nil), fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := mbRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, nil), fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.Equal(t, dataRetriever.ErrNilValue, err) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestMiniblockResolver_ProcessReceivedMessageWrongTypeShouldErr(t *testing.T) { @@ -153,11 +155,12 @@ func TestMiniblockResolver_ProcessReceivedMessageWrongTypeShouldErr(t *testing.T arg := createMockArgMiniblockResolver() mbRes, _ := resolvers.NewMiniblockResolver(arg) - err := mbRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.NonceType, make([]byte, 0)), fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := mbRes.ProcessReceivedMessage(createRequestMsg(dataRetriever.NonceType, make([]byte, 0)), fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, dataRetriever.ErrRequestTypeNotImplemented)) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestMiniblockResolver_ProcessReceivedMessageFoundInPoolShouldRetValAndSend(t *testing.T) { @@ -199,7 +202,7 @@ func TestMiniblockResolver_ProcessReceivedMessageFoundInPoolShouldRetValAndSend( } mbRes, _ := resolvers.NewMiniblockResolver(arg) - err := mbRes.ProcessReceivedMessage( + msgID, err := mbRes.ProcessReceivedMessage( createRequestMsg(dataRetriever.HashArrayType, requestedBuff), fromConnectedPeerId, &p2pmocks.MessengerStub{}, @@ -210,6 +213,7 @@ func TestMiniblockResolver_ProcessReceivedMessageFoundInPoolShouldRetValAndSend( assert.True(t, wasSent) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestMiniblockResolver_ProcessReceivedMessageFoundInPoolMarshalizerFailShouldErr(t *testing.T) { @@ -254,7 +258,7 @@ func TestMiniblockResolver_ProcessReceivedMessageFoundInPoolMarshalizerFailShoul arg.Marshaller = marshalizer mbRes, _ := resolvers.NewMiniblockResolver(arg) - err := mbRes.ProcessReceivedMessage( + msgID, err := mbRes.ProcessReceivedMessage( createRequestMsg(dataRetriever.HashArrayType, requestedBuff), fromConnectedPeerId, &p2pmocks.MessengerStub{}, @@ -263,6 +267,7 @@ func TestMiniblockResolver_ProcessReceivedMessageFoundInPoolMarshalizerFailShoul assert.True(t, errors.Is(err, errExpected)) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestMiniblockResolver_ProcessReceivedMessageUnmarshalFails(t *testing.T) { @@ -310,7 +315,7 @@ func TestMiniblockResolver_ProcessReceivedMessageUnmarshalFails(t *testing.T) { } mbRes, _ := resolvers.NewMiniblockResolver(arg) - err := mbRes.ProcessReceivedMessage( + msgID, err := mbRes.ProcessReceivedMessage( createRequestMsg(dataRetriever.HashArrayType, requestedBuff), fromConnectedPeerId, &p2pmocks.MessengerStub{}, @@ -319,6 +324,7 @@ func TestMiniblockResolver_ProcessReceivedMessageUnmarshalFails(t *testing.T) { assert.True(t, errors.Is(err, expectedErr)) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestMiniblockResolver_ProcessReceivedMessagePackDataInChunksFails(t *testing.T) { @@ -354,7 +360,7 @@ func TestMiniblockResolver_ProcessReceivedMessagePackDataInChunksFails(t *testin } mbRes, _ := resolvers.NewMiniblockResolver(arg) - err := mbRes.ProcessReceivedMessage( + msgID, err := mbRes.ProcessReceivedMessage( createRequestMsg(dataRetriever.HashArrayType, requestedBuff), fromConnectedPeerId, &p2pmocks.MessengerStub{}, @@ -363,6 +369,7 @@ func TestMiniblockResolver_ProcessReceivedMessagePackDataInChunksFails(t *testin assert.True(t, errors.Is(err, expectedErr)) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestMiniblockResolver_ProcessReceivedMessageSendFails(t *testing.T) { @@ -398,7 +405,7 @@ func TestMiniblockResolver_ProcessReceivedMessageSendFails(t *testing.T) { } mbRes, _ := resolvers.NewMiniblockResolver(arg) - err := mbRes.ProcessReceivedMessage( + msgID, err := mbRes.ProcessReceivedMessage( createRequestMsg(dataRetriever.HashArrayType, requestedBuff), fromConnectedPeerId, &p2pmocks.MessengerStub{}, @@ -407,6 +414,7 @@ func TestMiniblockResolver_ProcessReceivedMessageSendFails(t *testing.T) { assert.True(t, errors.Is(err, expectedErr)) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestMiniblockResolver_ProcessReceivedMessageNotFoundInPoolShouldRetFromStorageAndSend(t *testing.T) { @@ -444,7 +452,7 @@ func TestMiniblockResolver_ProcessReceivedMessageNotFoundInPoolShouldRetFromStor arg.MiniBlockStorage = store mbRes, _ := resolvers.NewMiniblockResolver(arg) - err := mbRes.ProcessReceivedMessage( + msgID, err := mbRes.ProcessReceivedMessage( createRequestMsg(dataRetriever.HashType, requestedBuff), fromConnectedPeerId, &p2pmocks.MessengerStub{}, @@ -455,6 +463,7 @@ func TestMiniblockResolver_ProcessReceivedMessageNotFoundInPoolShouldRetFromStor assert.True(t, wasSend) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestMiniblockResolver_ProcessReceivedMessageMarshalFails(t *testing.T) { @@ -497,7 +506,7 @@ func TestMiniblockResolver_ProcessReceivedMessageMarshalFails(t *testing.T) { } mbRes, _ := resolvers.NewMiniblockResolver(arg) - err := mbRes.ProcessReceivedMessage( + msgID, err := mbRes.ProcessReceivedMessage( createRequestMsg(dataRetriever.HashType, requestedBuff), fromConnectedPeerId, &p2pmocks.MessengerStub{}, @@ -507,6 +516,7 @@ func TestMiniblockResolver_ProcessReceivedMessageMarshalFails(t *testing.T) { assert.True(t, wasResolved) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestMiniblockResolver_ProcessReceivedMessageMissingDataShouldNotSend(t *testing.T) { @@ -541,7 +551,7 @@ func TestMiniblockResolver_ProcessReceivedMessageMissingDataShouldNotSend(t *tes arg.MiniBlockStorage = store mbRes, _ := resolvers.NewMiniblockResolver(arg) - _ = mbRes.ProcessReceivedMessage( + _, _ = mbRes.ProcessReceivedMessage( createRequestMsg(dataRetriever.HashType, requestedBuff), fromConnectedPeerId, &p2pmocks.MessengerStub{}, diff --git a/dataRetriever/resolvers/peerAuthenticationResolver.go b/dataRetriever/resolvers/peerAuthenticationResolver.go index dc2a45892c2..8b42399a0d7 100644 --- a/dataRetriever/resolvers/peerAuthenticationResolver.go +++ b/dataRetriever/resolvers/peerAuthenticationResolver.go @@ -6,11 +6,12 @@ import ( "github.com/multiversx/mx-chain-core-go/core" "github.com/multiversx/mx-chain-core-go/core/check" "github.com/multiversx/mx-chain-core-go/data/batch" + logger "github.com/multiversx/mx-chain-logger-go" + "github.com/multiversx/mx-chain-go/dataRetriever" "github.com/multiversx/mx-chain-go/heartbeat" "github.com/multiversx/mx-chain-go/p2p" "github.com/multiversx/mx-chain-go/storage" - logger "github.com/multiversx/mx-chain-logger-go" ) // maxBuffToSendPeerAuthentications represents max buffer size to send in bytes @@ -75,10 +76,10 @@ func checkArgPeerAuthenticationResolver(arg ArgPeerAuthenticationResolver) error // ProcessReceivedMessage represents the callback func from the p2p.Messenger that is called each time a new message is received // (for the topic this validator was registered to, usually a request topic) -func (res *peerAuthenticationResolver) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) error { +func (res *peerAuthenticationResolver) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) ([]byte, error) { err := res.canProcessMessage(message, fromConnectedPeer) if err != nil { - return err + return nil, err } res.throttler.StartProcessing() @@ -86,12 +87,12 @@ func (res *peerAuthenticationResolver) ProcessReceivedMessage(message p2p.Messag rd, err := res.parseReceivedMessage(message, fromConnectedPeer) if err != nil { - return err + return nil, err } switch rd.Type { case dataRetriever.HashArrayType: - return res.resolveMultipleHashesRequest(rd.Value, message.Peer(), source) + return nil, res.resolveMultipleHashesRequest(rd.Value, message.Peer(), source) default: err = dataRetriever.ErrRequestTypeNotImplemented } @@ -99,7 +100,7 @@ func (res *peerAuthenticationResolver) ProcessReceivedMessage(message p2p.Messag err = fmt.Errorf("%w for value %s", err, logger.DisplayByteSlice(rd.Value)) } - return err + return nil, err } // resolveMultipleHashesRequest sends the response for multiple hashes request diff --git a/dataRetriever/resolvers/peerAuthenticationResolver_test.go b/dataRetriever/resolvers/peerAuthenticationResolver_test.go index 8d6df446772..4918a5f041d 100644 --- a/dataRetriever/resolvers/peerAuthenticationResolver_test.go +++ b/dataRetriever/resolvers/peerAuthenticationResolver_test.go @@ -166,8 +166,9 @@ func TestPeerAuthenticationResolver_ProcessReceivedMessage(t *testing.T) { assert.Nil(t, err) assert.False(t, res.IsInterfaceNil()) - err = res.ProcessReceivedMessage(nil, fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(nil, fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Equal(t, dataRetriever.ErrNilMessage, err) + assert.Nil(t, msgID) }) t.Run("canProcessMessage due to antiflood handler error", func(t *testing.T) { t.Parallel() @@ -182,10 +183,11 @@ func TestPeerAuthenticationResolver_ProcessReceivedMessage(t *testing.T) { assert.Nil(t, err) assert.False(t, res.IsInterfaceNil()) - err = res.ProcessReceivedMessage(createRequestMsg(dataRetriever.ChunkType, nil), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.ChunkType, nil), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, expectedErr)) assert.False(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.False(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) }) t.Run("parseReceivedMessage returns error due to marshaller error", func(t *testing.T) { t.Parallel() @@ -200,8 +202,9 @@ func TestPeerAuthenticationResolver_ProcessReceivedMessage(t *testing.T) { assert.Nil(t, err) assert.False(t, res.IsInterfaceNil()) - err = res.ProcessReceivedMessage(createRequestMsg(dataRetriever.ChunkType, nil), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.ChunkType, nil), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, expectedErr)) + assert.Nil(t, msgID) }) t.Run("invalid request type should error", func(t *testing.T) { t.Parallel() @@ -215,8 +218,9 @@ func TestPeerAuthenticationResolver_ProcessReceivedMessage(t *testing.T) { assert.Nil(t, err) assert.False(t, res.IsInterfaceNil()) - err = res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, requestedBuff), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, requestedBuff), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, dataRetriever.ErrRequestTypeNotImplemented)) + assert.Nil(t, msgID) }) // =============== HashArrayType -> resolveMultipleHashesRequest =============== @@ -229,8 +233,9 @@ func TestPeerAuthenticationResolver_ProcessReceivedMessage(t *testing.T) { assert.Nil(t, err) assert.False(t, res.IsInterfaceNil()) - err = res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, []byte("invalid data")), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, []byte("invalid data")), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.NotNil(t, err) + assert.Nil(t, msgID) }) t.Run("resolveMultipleHashesRequest: all hashes missing from cache should error", func(t *testing.T) { t.Parallel() @@ -256,10 +261,11 @@ func TestPeerAuthenticationResolver_ProcessReceivedMessage(t *testing.T) { hashes := getKeysSlice() providedHashes, err := arg.Marshaller.Marshal(batch.Batch{Data: hashes}) assert.Nil(t, err) - err = res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, providedHashes), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, providedHashes), fromConnectedPeer, &p2pmocks.MessengerStub{}) expectedSubstrErr := fmt.Sprintf("%s %x", "from buff", providedHashes) assert.True(t, strings.Contains(fmt.Sprintf("%s", err), expectedSubstrErr)) assert.False(t, wasSent) + assert.Nil(t, msgID) }) t.Run("resolveMultipleHashesRequest: all hashes will return wrong objects should error", func(t *testing.T) { t.Parallel() @@ -285,10 +291,11 @@ func TestPeerAuthenticationResolver_ProcessReceivedMessage(t *testing.T) { hashes := getKeysSlice() providedHashes, err := arg.Marshaller.Marshal(batch.Batch{Data: hashes}) assert.Nil(t, err) - err = res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, providedHashes), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, providedHashes), fromConnectedPeer, &p2pmocks.MessengerStub{}) expectedSubstrErr := fmt.Sprintf("%s %x", "from buff", providedHashes) assert.True(t, strings.Contains(fmt.Sprintf("%s", err), expectedSubstrErr)) assert.False(t, wasSent) + assert.Nil(t, msgID) }) t.Run("resolveMultipleHashesRequest: all hashes will return objects with invalid payload should error", func(t *testing.T) { t.Parallel() @@ -321,11 +328,12 @@ func TestPeerAuthenticationResolver_ProcessReceivedMessage(t *testing.T) { hashes := getKeysSlice() providedHashes, err := arg.Marshaller.Marshal(batch.Batch{Data: hashes}) assert.Nil(t, err) - err = res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, providedHashes), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, providedHashes), fromConnectedPeer, &p2pmocks.MessengerStub{}) expectedSubstrErr := fmt.Sprintf("%s %x", "from buff", providedHashes) assert.True(t, strings.Contains(fmt.Sprintf("%s", err), expectedSubstrErr)) assert.False(t, wasSent) assert.Equal(t, len(hashes), numValidationCalls) + assert.Nil(t, msgID) }) t.Run("resolveMultipleHashesRequest: some data missing from cache should work", func(t *testing.T) { t.Parallel() @@ -389,9 +397,10 @@ func TestPeerAuthenticationResolver_ProcessReceivedMessage(t *testing.T) { assert.Nil(t, err) assert.False(t, res.IsInterfaceNil()) - err = res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, providedHashes), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, providedHashes), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Nil(t, err) assert.True(t, wasSent) + assert.Nil(t, msgID) }) t.Run("resolveMultipleHashesRequest: PackDataInChunks returns error", func(t *testing.T) { t.Parallel() @@ -415,8 +424,9 @@ func TestPeerAuthenticationResolver_ProcessReceivedMessage(t *testing.T) { hashes := getKeysSlice() providedHashes, err := arg.Marshaller.Marshal(batch.Batch{Data: hashes}) assert.Nil(t, err) - err = res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, providedHashes), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, providedHashes), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, expectedErr)) + assert.Nil(t, msgID) }) t.Run("resolveMultipleHashesRequest: Send returns error", func(t *testing.T) { t.Parallel() @@ -440,8 +450,9 @@ func TestPeerAuthenticationResolver_ProcessReceivedMessage(t *testing.T) { hashes := getKeysSlice() providedHashes, err := arg.Marshaller.Marshal(batch.Batch{Data: hashes}) assert.Nil(t, err) - err = res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, providedHashes), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, providedHashes), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, expectedErr)) + assert.Nil(t, msgID) }) t.Run("resolveMultipleHashesRequest: send large data buff", func(t *testing.T) { t.Parallel() @@ -503,9 +514,10 @@ func TestPeerAuthenticationResolver_ProcessReceivedMessage(t *testing.T) { chunkIndex := uint32(0) providedHashes, err := arg.Marshaller.Marshal(&batch.Batch{Data: providedKeys}) assert.Nil(t, err) - err = res.ProcessReceivedMessage(createRequestMsgWithChunkIndex(dataRetriever.HashArrayType, providedHashes, epoch, chunkIndex), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsgWithChunkIndex(dataRetriever.HashArrayType, providedHashes, epoch, chunkIndex), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Nil(t, err) assert.Equal(t, 2, messagesSent) assert.Equal(t, expectedLen, hashesReceived) + assert.Nil(t, msgID) }) } diff --git a/dataRetriever/resolvers/transactionResolver.go b/dataRetriever/resolvers/transactionResolver.go index 3a88bd13c15..fbe3004ffb9 100644 --- a/dataRetriever/resolvers/transactionResolver.go +++ b/dataRetriever/resolvers/transactionResolver.go @@ -6,10 +6,11 @@ import ( "github.com/multiversx/mx-chain-core-go/core" "github.com/multiversx/mx-chain-core-go/core/check" "github.com/multiversx/mx-chain-core-go/data/batch" + logger "github.com/multiversx/mx-chain-logger-go" + "github.com/multiversx/mx-chain-go/dataRetriever" "github.com/multiversx/mx-chain-go/p2p" "github.com/multiversx/mx-chain-go/storage" - logger "github.com/multiversx/mx-chain-logger-go" ) var _ dataRetriever.Resolver = (*TxResolver)(nil) @@ -82,10 +83,10 @@ func checkArgTxResolver(arg ArgTxResolver) error { // ProcessReceivedMessage will be the callback func from the p2p.Messenger and will be called each time a new message was received // (for the topic this validator was registered to, usually a request topic) -func (txRes *TxResolver) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) error { +func (txRes *TxResolver) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) ([]byte, error) { err := txRes.canProcessMessage(message, fromConnectedPeer) if err != nil { - return err + return nil, err } txRes.throttler.StartProcessing() @@ -93,7 +94,7 @@ func (txRes *TxResolver) ProcessReceivedMessage(message p2p.MessageP2P, fromConn rd, err := txRes.parseReceivedMessage(message, fromConnectedPeer) if err != nil { - return err + return nil, err } switch rd.Type { @@ -109,7 +110,7 @@ func (txRes *TxResolver) ProcessReceivedMessage(message p2p.MessageP2P, fromConn err = fmt.Errorf("%w for hash %s", err, logger.DisplayByteSlice(rd.Value)) } - return err + return nil, err } func (txRes *TxResolver) resolveTxRequestByHash(hash []byte, pid core.PeerID, epoch uint32, source p2p.MessageHandler) error { diff --git a/dataRetriever/resolvers/transactionResolver_test.go b/dataRetriever/resolvers/transactionResolver_test.go index 2af167aae70..33d6c2c4104 100644 --- a/dataRetriever/resolvers/transactionResolver_test.go +++ b/dataRetriever/resolvers/transactionResolver_test.go @@ -9,6 +9,8 @@ import ( "github.com/multiversx/mx-chain-core-go/core/check" "github.com/multiversx/mx-chain-core-go/data/batch" "github.com/multiversx/mx-chain-core-go/data/transaction" + "github.com/stretchr/testify/assert" + "github.com/multiversx/mx-chain-go/dataRetriever" "github.com/multiversx/mx-chain-go/dataRetriever/mock" "github.com/multiversx/mx-chain-go/dataRetriever/resolvers" @@ -16,7 +18,6 @@ import ( "github.com/multiversx/mx-chain-go/testscommon" "github.com/multiversx/mx-chain-go/testscommon/p2pmocks" storageStubs "github.com/multiversx/mx-chain-go/testscommon/storage" - "github.com/stretchr/testify/assert" ) var connectedPeerId = core.PeerID("connected peer id") @@ -131,11 +132,12 @@ func TestTxResolver_ProcessReceivedMessageCanProcessMessageErrorsShouldErr(t *te } txRes, _ := resolvers.NewTxResolver(arg) - err := txRes.ProcessReceivedMessage(&p2pmocks.P2PMessageMock{}, connectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := txRes.ProcessReceivedMessage(&p2pmocks.P2PMessageMock{}, connectedPeerId, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, expectedErr)) assert.False(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.False(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTxResolver_ProcessReceivedMessageNilMessageShouldErr(t *testing.T) { @@ -144,11 +146,12 @@ func TestTxResolver_ProcessReceivedMessageNilMessageShouldErr(t *testing.T) { arg := createMockArgTxResolver() txRes, _ := resolvers.NewTxResolver(arg) - err := txRes.ProcessReceivedMessage(nil, connectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := txRes.ProcessReceivedMessage(nil, connectedPeerId, &p2pmocks.MessengerStub{}) assert.Equal(t, dataRetriever.ErrNilMessage, err) assert.False(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.False(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTxResolver_ProcessReceivedMessageWrongTypeShouldErr(t *testing.T) { @@ -161,11 +164,12 @@ func TestTxResolver_ProcessReceivedMessageWrongTypeShouldErr(t *testing.T) { msg := &p2pmocks.P2PMessageMock{DataField: data} - err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, dataRetriever.ErrRequestTypeNotImplemented)) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTxResolver_ProcessReceivedMessageNilValueShouldErr(t *testing.T) { @@ -178,11 +182,12 @@ func TestTxResolver_ProcessReceivedMessageNilValueShouldErr(t *testing.T) { msg := &p2pmocks.P2PMessageMock{DataField: data} - err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) assert.Equal(t, dataRetriever.ErrNilValue, err) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTxResolver_ProcessReceivedMessageFoundInTxPoolShouldSearchAndSend(t *testing.T) { @@ -218,13 +223,14 @@ func TestTxResolver_ProcessReceivedMessageFoundInTxPoolShouldSearchAndSend(t *te msg := &p2pmocks.P2PMessageMock{DataField: data} - err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) assert.Nil(t, err) assert.True(t, searchWasCalled) assert.True(t, sendWasCalled) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTxResolver_ProcessReceivedMessageFoundInTxPoolMarshalizerFailShouldRetNilAndErr(t *testing.T) { @@ -262,11 +268,12 @@ func TestTxResolver_ProcessReceivedMessageFoundInTxPoolMarshalizerFailShouldRetN msg := &p2pmocks.P2PMessageMock{DataField: data} - err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, errExpected)) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTxResolver_ProcessReceivedMessageBatchMarshalFailShouldRetNilAndErr(t *testing.T) { @@ -307,11 +314,12 @@ func TestTxResolver_ProcessReceivedMessageBatchMarshalFailShouldRetNilAndErr(t * msg := &p2pmocks.P2PMessageMock{DataField: data} - err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, expectedErr)) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTxResolver_ProcessReceivedMessageFoundInTxStorageShouldRetValAndSend(t *testing.T) { @@ -321,7 +329,7 @@ func TestTxResolver_ProcessReceivedMessageFoundInTxStorageShouldRetValAndSend(t txPool := testscommon.NewShardedDataStub() txPool.SearchFirstDataCalled = func(key []byte) (value interface{}, ok bool) { - //not found in txPool + // not found in txPool return nil, false } searchWasCalled := false @@ -355,13 +363,14 @@ func TestTxResolver_ProcessReceivedMessageFoundInTxStorageShouldRetValAndSend(t msg := &p2pmocks.P2PMessageMock{DataField: data} - err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) assert.Nil(t, err) assert.True(t, searchWasCalled) assert.True(t, sendWasCalled) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTxResolver_ProcessReceivedMessageFoundInTxStorageCheckRetError(t *testing.T) { @@ -371,7 +380,7 @@ func TestTxResolver_ProcessReceivedMessageFoundInTxStorageCheckRetError(t *testi txPool := testscommon.NewShardedDataStub() txPool.SearchFirstDataCalled = func(key []byte) (value interface{}, ok bool) { - //not found in txPool + // not found in txPool return nil, false } @@ -395,11 +404,12 @@ func TestTxResolver_ProcessReceivedMessageFoundInTxStorageCheckRetError(t *testi msg := &p2pmocks.P2PMessageMock{DataField: data} - err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, errExpected)) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTxResolver_ProcessReceivedMessageRequestedTwoSmallTransactionsShouldCallSliceSplitter(t *testing.T) { @@ -455,13 +465,14 @@ func TestTxResolver_ProcessReceivedMessageRequestedTwoSmallTransactionsShouldCal msg := &p2pmocks.P2PMessageMock{DataField: data} - err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) assert.Nil(t, err) assert.True(t, splitSliceWasCalled) assert.True(t, sendWasCalled) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTxResolver_ProcessReceivedMessageRequestedTwoSmallTransactionsFoundOnlyOneShouldWork(t *testing.T) { @@ -516,13 +527,14 @@ func TestTxResolver_ProcessReceivedMessageRequestedTwoSmallTransactionsFoundOnly msg := &p2pmocks.P2PMessageMock{DataField: data} - err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) assert.NotNil(t, err) assert.True(t, splitSliceWasCalled) assert.True(t, sendWasCalled) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTxResolver_ProcessReceivedMessageHashArrayUnmarshalFails(t *testing.T) { @@ -545,11 +557,12 @@ func TestTxResolver_ProcessReceivedMessageHashArrayUnmarshalFails(t *testing.T) data, _ := marshalizer.Marshal(&dataRetriever.RequestData{Type: dataRetriever.HashArrayType, Value: []byte("buff")}) msg := &p2pmocks.P2PMessageMock{DataField: data} - err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, expectedErr)) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTxResolver_ProcessReceivedMessageHashArrayPackDataInChunksFails(t *testing.T) { @@ -570,11 +583,12 @@ func TestTxResolver_ProcessReceivedMessageHashArrayPackDataInChunksFails(t *test data, _ := arg.Marshaller.Marshal(&dataRetriever.RequestData{Type: dataRetriever.HashArrayType, Value: buff}) msg := &p2pmocks.P2PMessageMock{DataField: data} - err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, expectedErr)) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTxResolver_ProcessReceivedMessageHashArraySendFails(t *testing.T) { @@ -595,11 +609,12 @@ func TestTxResolver_ProcessReceivedMessageHashArraySendFails(t *testing.T) { data, _ := arg.Marshaller.Marshal(&dataRetriever.RequestData{Type: dataRetriever.HashArrayType, Value: buff}) msg := &p2pmocks.P2PMessageMock{DataField: data} - err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := txRes.ProcessReceivedMessage(msg, connectedPeerId, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, expectedErr)) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTxResolver_Close(t *testing.T) { diff --git a/dataRetriever/resolvers/trieNodeResolver.go b/dataRetriever/resolvers/trieNodeResolver.go index 275327d44c6..a194edcf2a6 100644 --- a/dataRetriever/resolvers/trieNodeResolver.go +++ b/dataRetriever/resolvers/trieNodeResolver.go @@ -6,9 +6,10 @@ import ( "github.com/multiversx/mx-chain-core-go/core" "github.com/multiversx/mx-chain-core-go/core/check" "github.com/multiversx/mx-chain-core-go/data/batch" + logger "github.com/multiversx/mx-chain-logger-go" + "github.com/multiversx/mx-chain-go/dataRetriever" "github.com/multiversx/mx-chain-go/p2p" - logger "github.com/multiversx/mx-chain-logger-go" ) var _ dataRetriever.Resolver = (*TrieNodeResolver)(nil) @@ -62,10 +63,10 @@ func checkArgTrieNodeResolver(arg ArgTrieNodeResolver) error { // ProcessReceivedMessage will be the callback func from the p2p.Messenger and will be called each time a new message was received // (for the topic this validator was registered to, usually a request topic) -func (tnRes *TrieNodeResolver) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) error { +func (tnRes *TrieNodeResolver) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) ([]byte, error) { err := tnRes.canProcessMessage(message, fromConnectedPeer) if err != nil { - return err + return nil, err } tnRes.throttler.StartProcessing() @@ -73,16 +74,16 @@ func (tnRes *TrieNodeResolver) ProcessReceivedMessage(message p2p.MessageP2P, fr rd, err := tnRes.parseReceivedMessage(message, fromConnectedPeer) if err != nil { - return err + return nil, err } switch rd.Type { case dataRetriever.HashType: - return tnRes.resolveOneHash(rd.Value, rd.ChunkIndex, message, source) + return nil, tnRes.resolveOneHash(rd.Value, rd.ChunkIndex, message, source) case dataRetriever.HashArrayType: - return tnRes.resolveMultipleHashes(rd.Value, message, source) + return nil, tnRes.resolveMultipleHashes(rd.Value, message, source) default: - return dataRetriever.ErrRequestTypeNotImplemented + return nil, dataRetriever.ErrRequestTypeNotImplemented } } @@ -214,7 +215,7 @@ func (tnRes *TrieNodeResolver) sendResponse( ) error { if len(serializedNodes) == 0 { - //do not send useless message + // do not send useless message return nil } diff --git a/dataRetriever/resolvers/trieNodeResolver_test.go b/dataRetriever/resolvers/trieNodeResolver_test.go index b2706f02b36..37d81674b73 100644 --- a/dataRetriever/resolvers/trieNodeResolver_test.go +++ b/dataRetriever/resolvers/trieNodeResolver_test.go @@ -10,14 +10,15 @@ import ( "github.com/multiversx/mx-chain-core-go/core" "github.com/multiversx/mx-chain-core-go/core/check" "github.com/multiversx/mx-chain-core-go/data/batch" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/multiversx/mx-chain-go/dataRetriever" "github.com/multiversx/mx-chain-go/dataRetriever/mock" "github.com/multiversx/mx-chain-go/dataRetriever/resolvers" "github.com/multiversx/mx-chain-go/p2p" "github.com/multiversx/mx-chain-go/testscommon/p2pmocks" trieMock "github.com/multiversx/mx-chain-go/testscommon/trie" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" ) var fromConnectedPeer = core.PeerID("from connected peer") @@ -108,10 +109,11 @@ func TestTrieNodeResolver_ProcessReceivedAntiflooderCanProcessMessageErrShouldEr } tnRes, _ := resolvers.NewTrieNodeResolver(arg) - err := tnRes.ProcessReceivedMessage(&p2pmocks.P2PMessageMock{}, fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := tnRes.ProcessReceivedMessage(&p2pmocks.P2PMessageMock{}, fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, expectedErr)) assert.False(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.False(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTrieNodeResolver_ProcessReceivedMessageNilMessageShouldErr(t *testing.T) { @@ -120,10 +122,11 @@ func TestTrieNodeResolver_ProcessReceivedMessageNilMessageShouldErr(t *testing.T arg := createMockArgTrieNodeResolver() tnRes, _ := resolvers.NewTrieNodeResolver(arg) - err := tnRes.ProcessReceivedMessage(nil, fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := tnRes.ProcessReceivedMessage(nil, fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Equal(t, dataRetriever.ErrNilMessage, err) assert.False(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.False(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTrieNodeResolver_ProcessReceivedMessageWrongTypeShouldErr(t *testing.T) { @@ -137,10 +140,11 @@ func TestTrieNodeResolver_ProcessReceivedMessageWrongTypeShouldErr(t *testing.T) data, _ := marshalizer.Marshal(&dataRetriever.RequestData{Type: dataRetriever.NonceType, Value: []byte("aaa")}) msg := &p2pmocks.P2PMessageMock{DataField: data} - err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Equal(t, dataRetriever.ErrRequestTypeNotImplemented, err) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTrieNodeResolver_ProcessReceivedMessageNilValueShouldErr(t *testing.T) { @@ -154,13 +158,14 @@ func TestTrieNodeResolver_ProcessReceivedMessageNilValueShouldErr(t *testing.T) data, _ := marshalizer.Marshal(&dataRetriever.RequestData{Type: dataRetriever.HashType, Value: nil}) msg := &p2pmocks.P2PMessageMock{DataField: data} - err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Equal(t, dataRetriever.ErrNilValue, err) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } -//TODO in this PR: add more unit tests +// TODO in this PR: add more unit tests func TestTrieNodeResolver_ProcessReceivedMessageShouldGetFromTrieAndSend(t *testing.T) { t.Parallel() @@ -193,13 +198,14 @@ func TestTrieNodeResolver_ProcessReceivedMessageShouldGetFromTrieAndSend(t *test data, _ := marshalizer.Marshal(&dataRetriever.RequestData{Type: dataRetriever.HashType, Value: []byte("node1")}) msg := &p2pmocks.P2PMessageMock{DataField: data} - err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Nil(t, err) assert.True(t, getSerializedNodesWasCalled) assert.True(t, sendWasCalled) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTrieNodeResolver_ProcessReceivedMessageShouldGetFromTrieAndMarshalizerFailShouldRetNilAndErr(t *testing.T) { @@ -223,10 +229,11 @@ func TestTrieNodeResolver_ProcessReceivedMessageShouldGetFromTrieAndMarshalizerF data, _ := marshalizerMock.Marshal(&dataRetriever.RequestData{Type: dataRetriever.HashType, Value: []byte("node1")}) msg := &p2pmocks.P2PMessageMock{DataField: data} - err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Equal(t, errExpected, err) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTrieNodeResolver_ProcessReceivedMessageTrieErrorsShouldErr(t *testing.T) { @@ -243,10 +250,11 @@ func TestTrieNodeResolver_ProcessReceivedMessageTrieErrorsShouldErr(t *testing.T data, _ := arg.Marshaller.Marshal(&dataRetriever.RequestData{Type: dataRetriever.HashType, Value: []byte("node1")}) msg := &p2pmocks.P2PMessageMock{DataField: data} - err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Equal(t, expectedErr, err) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTrieNodeResolver_ProcessReceivedMessageMultipleHashesUnmarshalFails(t *testing.T) { @@ -286,10 +294,11 @@ func TestTrieNodeResolver_ProcessReceivedMessageMultipleHashesUnmarshalFails(t * ) msg := &p2pmocks.P2PMessageMock{DataField: data} - err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Equal(t, expectedErr, err) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTrieNodeResolver_ProcessReceivedMessageMultipleHashesGetSerializedNodeErrorsShouldNotSend(t *testing.T) { @@ -322,10 +331,11 @@ func TestTrieNodeResolver_ProcessReceivedMessageMultipleHashesGetSerializedNodeE ) msg := &p2pmocks.P2PMessageMock{DataField: data} - err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Nil(t, err) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) } func TestTrieNodeResolver_ProcessReceivedMessageMultipleHashesGetSerializedNodesErrorsShouldNotSendSubtrie(t *testing.T) { @@ -375,12 +385,13 @@ func TestTrieNodeResolver_ProcessReceivedMessageMultipleHashesGetSerializedNodes ) msg := &p2pmocks.P2PMessageMock{DataField: data} - err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Nil(t, err) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) require.Equal(t, 1, len(receivedNodes)) assert.Equal(t, nodes[0], receivedNodes[0]) + assert.Nil(t, msgID) } func TestTrieNodeResolver_ProcessReceivedMessageMultipleHashesNotEnoughSpaceShouldNotReadSubtries(t *testing.T) { @@ -431,12 +442,13 @@ func TestTrieNodeResolver_ProcessReceivedMessageMultipleHashesNotEnoughSpaceShou ) msg := &p2pmocks.P2PMessageMock{DataField: data} - err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Nil(t, err) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) require.Equal(t, 1, len(receivedNodes)) assert.Equal(t, nodes[0], receivedNodes[0]) + assert.Nil(t, msgID) } func TestTrieNodeResolver_ProcessReceivedMessageMultipleHashesShouldWorkWithSubtries(t *testing.T) { @@ -492,11 +504,12 @@ func TestTrieNodeResolver_ProcessReceivedMessageMultipleHashesShouldWorkWithSubt ) msg := &p2pmocks.P2PMessageMock{DataField: data} - err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Nil(t, err) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) require.Equal(t, 4, len(receivedNodes)) + assert.Nil(t, msgID) for _, n := range nodes { assert.True(t, buffInSlice(n, receivedNodes)) } @@ -558,17 +571,18 @@ func testTrieNodeResolverProcessReceivedMessageLargeTrieNode( ) msg := &p2pmocks.P2PMessageMock{DataField: data} - err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := tnRes.ProcessReceivedMessage(msg, fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Nil(t, err) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.True(t, arg.Throttler.(*mock.ThrottlerStub).EndWasCalled()) require.True(t, sendWasCalled) + assert.Nil(t, msgID) } func TestTrieNodeResolver_ProcessReceivedMessageLargeTrieNodeShouldSendFirstChunk(t *testing.T) { t.Parallel() - randBuff := make([]byte, 1<<20) //1MB + randBuff := make([]byte, 1<<20) // 1MB _, _ = rand.Read(randBuff) testTrieNodeResolverProcessReceivedMessageLargeTrieNode(t, randBuff, 0, 4, 0, core.MaxBufferSizeToSendTrieNodes) } @@ -576,7 +590,7 @@ func TestTrieNodeResolver_ProcessReceivedMessageLargeTrieNodeShouldSendFirstChun func TestTrieNodeResolver_ProcessReceivedMessageLargeTrieNodeShouldSendRequiredChunk(t *testing.T) { t.Parallel() - randBuff := make([]byte, 1<<20) //1MB + randBuff := make([]byte, 1<<20) // 1MB _, _ = rand.Read(randBuff) testTrieNodeResolverProcessReceivedMessageLargeTrieNode( t, @@ -603,7 +617,7 @@ func TestTrieNodeResolver_ProcessReceivedMessageLargeTrieNodeShouldSendRequiredC 4*core.MaxBufferSizeToSendTrieNodes, ) - randBuff = make([]byte, 1<<20+1) //1MB + 1 byte + randBuff = make([]byte, 1<<20+1) // 1MB + 1 byte _, _ = rand.Read(randBuff) startIndex := len(randBuff) - 1 endIndex := len(randBuff) diff --git a/dataRetriever/resolvers/validatorInfoResolver.go b/dataRetriever/resolvers/validatorInfoResolver.go index 9f7e5a6bb1a..ffb61f07ac9 100644 --- a/dataRetriever/resolvers/validatorInfoResolver.go +++ b/dataRetriever/resolvers/validatorInfoResolver.go @@ -8,10 +8,11 @@ import ( "github.com/multiversx/mx-chain-core-go/core/check" "github.com/multiversx/mx-chain-core-go/data/batch" "github.com/multiversx/mx-chain-core-go/marshal" + logger "github.com/multiversx/mx-chain-logger-go" + "github.com/multiversx/mx-chain-go/dataRetriever" "github.com/multiversx/mx-chain-go/p2p" "github.com/multiversx/mx-chain-go/storage" - logger "github.com/multiversx/mx-chain-logger-go" ) // maxBuffToSendValidatorsInfo represents max buffer size to send in bytes @@ -89,10 +90,10 @@ func checkArgs(args ArgValidatorInfoResolver) error { // ProcessReceivedMessage represents the callback func from the p2p.Messenger that is called each time a new message is received // (for the topic this validator was registered to, usually a request topic) -func (res *validatorInfoResolver) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) error { +func (res *validatorInfoResolver) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) ([]byte, error) { err := res.canProcessMessage(message, fromConnectedPeer) if err != nil { - return err + return nil, err } res.throttler.StartProcessing() @@ -100,17 +101,17 @@ func (res *validatorInfoResolver) ProcessReceivedMessage(message p2p.MessageP2P, rd, err := res.parseReceivedMessage(message, fromConnectedPeer) if err != nil { - return err + return nil, err } switch rd.Type { case dataRetriever.HashType: - return res.resolveHashRequest(rd.Value, rd.Epoch, fromConnectedPeer, source) + return nil, res.resolveHashRequest(rd.Value, rd.Epoch, fromConnectedPeer, source) case dataRetriever.HashArrayType: - return res.resolveMultipleHashesRequest(rd.Value, rd.Epoch, fromConnectedPeer, source) + return nil, res.resolveMultipleHashesRequest(rd.Value, rd.Epoch, fromConnectedPeer, source) } - return fmt.Errorf("%w for value %s", dataRetriever.ErrRequestTypeNotImplemented, logger.DisplayByteSlice(rd.Value)) + return nil, fmt.Errorf("%w for value %s", dataRetriever.ErrRequestTypeNotImplemented, logger.DisplayByteSlice(rd.Value)) } // resolveHashRequest sends the response for a hash request diff --git a/dataRetriever/resolvers/validatorInfoResolver_test.go b/dataRetriever/resolvers/validatorInfoResolver_test.go index d17fd1aedb4..1433601e674 100644 --- a/dataRetriever/resolvers/validatorInfoResolver_test.go +++ b/dataRetriever/resolvers/validatorInfoResolver_test.go @@ -10,6 +10,9 @@ import ( "github.com/multiversx/mx-chain-core-go/core/check" "github.com/multiversx/mx-chain-core-go/core/partitioning" "github.com/multiversx/mx-chain-core-go/data/batch" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/multiversx/mx-chain-go/common" "github.com/multiversx/mx-chain-go/dataRetriever" "github.com/multiversx/mx-chain-go/dataRetriever/mock" @@ -21,8 +24,6 @@ import ( "github.com/multiversx/mx-chain-go/testscommon/marshallerMock" "github.com/multiversx/mx-chain-go/testscommon/p2pmocks" "github.com/multiversx/mx-chain-go/testscommon/storage" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" ) func createMockArgValidatorInfoResolver() resolvers.ArgValidatorInfoResolver { @@ -141,8 +142,9 @@ func TestValidatorInfoResolver_ProcessReceivedMessage(t *testing.T) { res, _ := resolvers.NewValidatorInfoResolver(createMockArgValidatorInfoResolver()) require.False(t, check.IfNil(res)) - err := res.ProcessReceivedMessage(nil, fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(nil, fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Equal(t, dataRetriever.ErrNilMessage, err) + assert.Nil(t, msgID) }) t.Run("canProcessMessage due to antiflood handler error", func(t *testing.T) { t.Parallel() @@ -156,10 +158,11 @@ func TestValidatorInfoResolver_ProcessReceivedMessage(t *testing.T) { res, _ := resolvers.NewValidatorInfoResolver(args) require.False(t, check.IfNil(res)) - err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, nil), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, nil), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, expectedErr)) assert.False(t, args.Throttler.(*mock.ThrottlerStub).StartWasCalled()) assert.False(t, args.Throttler.(*mock.ThrottlerStub).EndWasCalled()) + assert.Nil(t, msgID) }) t.Run("parseReceivedMessage returns error due to marshalizer error", func(t *testing.T) { t.Parallel() @@ -173,8 +176,9 @@ func TestValidatorInfoResolver_ProcessReceivedMessage(t *testing.T) { res, _ := resolvers.NewValidatorInfoResolver(args) require.False(t, check.IfNil(res)) - err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, nil), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, nil), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, expectedErr)) + assert.Nil(t, msgID) }) t.Run("invalid request type should error", func(t *testing.T) { @@ -183,8 +187,9 @@ func TestValidatorInfoResolver_ProcessReceivedMessage(t *testing.T) { res, _ := resolvers.NewValidatorInfoResolver(createMockArgValidatorInfoResolver()) require.False(t, check.IfNil(res)) - err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.NonceType, []byte("hash")), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.NonceType, []byte("hash")), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.True(t, errors.Is(err, dataRetriever.ErrRequestTypeNotImplemented)) + assert.Nil(t, msgID) }) // resolveHashRequest @@ -205,8 +210,9 @@ func TestValidatorInfoResolver_ProcessReceivedMessage(t *testing.T) { res, _ := resolvers.NewValidatorInfoResolver(args) require.False(t, check.IfNil(res)) - err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, []byte("hash")), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, []byte("hash")), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Equal(t, expectedErr, err) + assert.Nil(t, msgID) }) t.Run("data found in cache but marshal fails", func(t *testing.T) { t.Parallel() @@ -229,8 +235,9 @@ func TestValidatorInfoResolver_ProcessReceivedMessage(t *testing.T) { res, _ := resolvers.NewValidatorInfoResolver(args) require.False(t, check.IfNil(res)) - err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, []byte("hash")), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, []byte("hash")), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.NotNil(t, err) + assert.Nil(t, msgID) }) t.Run("data found in storage but marshal fails", func(t *testing.T) { t.Parallel() @@ -258,8 +265,9 @@ func TestValidatorInfoResolver_ProcessReceivedMessage(t *testing.T) { res, _ := resolvers.NewValidatorInfoResolver(args) require.False(t, check.IfNil(res)) - err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, []byte("hash")), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, []byte("hash")), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.NotNil(t, err) + assert.Nil(t, msgID) }) t.Run("should work, data from cache", func(t *testing.T) { t.Parallel() @@ -290,9 +298,10 @@ func TestValidatorInfoResolver_ProcessReceivedMessage(t *testing.T) { res, _ := resolvers.NewValidatorInfoResolver(args) require.False(t, check.IfNil(res)) - err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, []byte("hash")), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, []byte("hash")), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Nil(t, err) assert.True(t, wasCalled) + assert.Nil(t, msgID) }) t.Run("should work, data from storage", func(t *testing.T) { t.Parallel() @@ -329,9 +338,10 @@ func TestValidatorInfoResolver_ProcessReceivedMessage(t *testing.T) { res, _ := resolvers.NewValidatorInfoResolver(args) require.False(t, check.IfNil(res)) - err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, []byte("hash")), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashType, []byte("hash")), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Nil(t, err) assert.True(t, wasCalled) + assert.Nil(t, msgID) }) // resolveMultipleHashesRequest @@ -353,8 +363,9 @@ func TestValidatorInfoResolver_ProcessReceivedMessage(t *testing.T) { res, _ := resolvers.NewValidatorInfoResolver(args) require.False(t, check.IfNil(res)) - err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, []byte("hash")), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, []byte("hash")), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Equal(t, expectedErr, err) + assert.Nil(t, msgID) }) t.Run("no hash found", func(t *testing.T) { t.Parallel() @@ -377,9 +388,10 @@ func TestValidatorInfoResolver_ProcessReceivedMessage(t *testing.T) { Data: [][]byte{[]byte("hash")}, } buff, _ := args.Marshaller.Marshal(b) - err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, buff), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, buff), fromConnectedPeer, &p2pmocks.MessengerStub{}) require.NotNil(t, err) assert.True(t, strings.Contains(err.Error(), dataRetriever.ErrValidatorInfoNotFound.Error())) + assert.Nil(t, msgID) }) t.Run("pack data in chunks returns error", func(t *testing.T) { t.Parallel() @@ -407,8 +419,9 @@ func TestValidatorInfoResolver_ProcessReceivedMessage(t *testing.T) { Data: [][]byte{[]byte("hash")}, } buff, _ := args.Marshaller.Marshal(b) - err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, buff), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, buff), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Equal(t, expectedErr, err) + assert.Nil(t, msgID) }) t.Run("send returns error", func(t *testing.T) { t.Parallel() @@ -441,8 +454,9 @@ func TestValidatorInfoResolver_ProcessReceivedMessage(t *testing.T) { require.False(t, check.IfNil(res)) buff, _ := args.Marshaller.Marshal(&batch.Batch{Data: providedHashes}) - err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, buff), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, buff), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Equal(t, expectedErr, err) + assert.Nil(t, msgID) }) t.Run("all hashes in one chunk should work", func(t *testing.T) { t.Parallel() @@ -489,9 +503,10 @@ func TestValidatorInfoResolver_ProcessReceivedMessage(t *testing.T) { require.False(t, check.IfNil(res)) buff, _ := args.Marshaller.Marshal(&batch.Batch{Data: providedHashes}) - err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, buff), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, buff), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Nil(t, err) assert.True(t, wasCalled) + assert.Nil(t, msgID) }) t.Run("multiple chunks should work", func(t *testing.T) { t.Parallel() @@ -551,10 +566,11 @@ func TestValidatorInfoResolver_ProcessReceivedMessage(t *testing.T) { require.False(t, check.IfNil(res)) buff, _ := args.Marshaller.Marshal(&batch.Batch{Data: providedHashes}) - err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, buff), fromConnectedPeer, &p2pmocks.MessengerStub{}) + msgID, err := res.ProcessReceivedMessage(createRequestMsg(dataRetriever.HashArrayType, buff), fromConnectedPeer, &p2pmocks.MessengerStub{}) assert.Nil(t, err) assert.Equal(t, 2, numOfCallsSend) // ~677 messages in a chunk assert.Equal(t, 0, len(providedDataMap)) // all items should have been deleted on Send + assert.Nil(t, msgID) }) } diff --git a/epochStart/bootstrap/process_test.go b/epochStart/bootstrap/process_test.go index 52c04a2f4c8..8669689564c 100644 --- a/epochStart/bootstrap/process_test.go +++ b/epochStart/bootstrap/process_test.go @@ -2465,8 +2465,9 @@ func TestSyncSetGuardianTransaction(t *testing.T) { TimestampField: 0, } - err = interceptor.ProcessReceivedMessage(msg, "pid", nil) + msgID, err := interceptor.ProcessReceivedMessage(msg, "pid", nil) assert.Nil(t, err) + assert.NotNil(t, msgID) time.Sleep(time.Second) diff --git a/factory/interface.go b/factory/interface.go index b18b4ea2729..698c9046d30 100644 --- a/factory/interface.go +++ b/factory/interface.go @@ -393,7 +393,7 @@ type ConsensusWorker interface { // RemoveAllReceivedMessagesCalls removes all the functions handlers RemoveAllReceivedMessagesCalls() // ProcessReceivedMessage method redirects the received message to the channel which should handle it - ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) error + ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) ([]byte, error) // Extend does an extension for the subround with subroundId Extend(subroundId int) // GetConsensusStateChangedChannel gets the channel for the consensusStateChanged diff --git a/go.mod b/go.mod index 993c30f3fc2..d9ebcbb5b01 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/gorilla/websocket v1.5.0 github.com/klauspost/cpuid/v2 v2.2.7 github.com/mitchellh/mapstructure v1.5.0 - github.com/multiversx/mx-chain-communication-go v1.1.1 + github.com/multiversx/mx-chain-communication-go v1.1.2-0.20250307100720-d2d999fc12af github.com/multiversx/mx-chain-core-go v1.2.25-0.20250219104810-75b7a8ff6bbb github.com/multiversx/mx-chain-crypto-go v1.2.12 github.com/multiversx/mx-chain-es-indexer-go v1.7.17-0.20250219142548-1e626a9520a4 diff --git a/go.sum b/go.sum index 909b0862583..c1a00b265e2 100644 --- a/go.sum +++ b/go.sum @@ -389,8 +389,8 @@ github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/n github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= github.com/multiversx/concurrent-map v0.1.4 h1:hdnbM8VE4b0KYJaGY5yJS2aNIW9TFFsUYwbO0993uPI= github.com/multiversx/concurrent-map v0.1.4/go.mod h1:8cWFRJDOrWHOTNSqgYCUvwT7c7eFQ4U2vKMOp4A/9+o= -github.com/multiversx/mx-chain-communication-go v1.1.1 h1:y4DoQeQOJTaSUsRzczQFazf8JYQmInddypApqA3AkwM= -github.com/multiversx/mx-chain-communication-go v1.1.1/go.mod h1:WK6bP4pGEHGDDna/AYRIMtl6G9OA0NByI1Lw8PmOnRM= +github.com/multiversx/mx-chain-communication-go v1.1.2-0.20250307100720-d2d999fc12af h1:7JoTWjlYtJuid/ndLIDBrEOTkpdII64cm7xuUtHFotA= +github.com/multiversx/mx-chain-communication-go v1.1.2-0.20250307100720-d2d999fc12af/go.mod h1:WK6bP4pGEHGDDna/AYRIMtl6G9OA0NByI1Lw8PmOnRM= github.com/multiversx/mx-chain-core-go v1.2.25-0.20250219104810-75b7a8ff6bbb h1:XoFaZ3/KEaI7N0o1gqiek+2s/PlqmcvwukAT4iCvAIM= github.com/multiversx/mx-chain-core-go v1.2.25-0.20250219104810-75b7a8ff6bbb/go.mod h1:B5zU4MFyJezmEzCsAHE9YNULmGCm2zbPHvl9hazNxmE= github.com/multiversx/mx-chain-crypto-go v1.2.12 h1:zWip7rpUS4CGthJxfKn5MZfMfYPjVjIiCID6uX5BSOk= diff --git a/integrationTests/countInterceptor.go b/integrationTests/countInterceptor.go index fba328de387..f7a7d5fc6ee 100644 --- a/integrationTests/countInterceptor.go +++ b/integrationTests/countInterceptor.go @@ -4,6 +4,7 @@ import ( "sync" "github.com/multiversx/mx-chain-core-go/core" + "github.com/multiversx/mx-chain-go/p2p" ) @@ -21,12 +22,12 @@ func NewCountInterceptor() *CountInterceptor { } // ProcessReceivedMessage is called each time a new message is received -func (ci *CountInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, _ core.PeerID, _ p2p.MessageHandler) error { +func (ci *CountInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, _ core.PeerID, _ p2p.MessageHandler) ([]byte, error) { ci.mutMessagesCount.Lock() ci.messagesCount[message.Topic()]++ ci.mutMessagesCount.Unlock() - return nil + return nil, nil } // MessageCount returns the number of messages received on the provided topic diff --git a/integrationTests/longTests/antiflooding/messageProcessor.go b/integrationTests/longTests/antiflooding/messageProcessor.go index 5c3838dea61..144cc700fa5 100644 --- a/integrationTests/longTests/antiflooding/messageProcessor.go +++ b/integrationTests/longTests/antiflooding/messageProcessor.go @@ -5,6 +5,7 @@ import ( "time" "github.com/multiversx/mx-chain-core-go/core" + "github.com/multiversx/mx-chain-go/p2p" "github.com/multiversx/mx-chain-go/process" ) @@ -31,7 +32,7 @@ func NewMessageProcessor(antiflooder process.P2PAntifloodHandler, messenger p2p. } // ProcessReceivedMessage is the callback function from the p2p side whenever a new message is received -func (mp *messageProcessor) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, _ p2p.MessageHandler) error { +func (mp *messageProcessor) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, _ p2p.MessageHandler) ([]byte, error) { atomic.AddUint32(&mp.numMessagesReceived, 1) atomic.AddUint64(&mp.sizeMessagesReceived, uint64(len(message.Data()))) atomic.AddUint32(&mp.numMessagesReceivedPerInterval, 1) @@ -39,13 +40,13 @@ func (mp *messageProcessor) ProcessReceivedMessage(message p2p.MessageP2P, fromC err := mp.antiflooder.CanProcessMessage(message, fromConnectedPeer) if err != nil { - return err + return nil, err } atomic.AddUint32(&mp.numMessagesProcessed, 1) atomic.AddUint64(&mp.sizeMessagesProcessed, uint64(len(message.Data()))) - return nil + return nil, nil } // NumMessagesProcessed returns the number of processed messages diff --git a/integrationTests/p2p/antiflood/messageProcessor.go b/integrationTests/p2p/antiflood/messageProcessor.go index 5f56985861f..b61400f397e 100644 --- a/integrationTests/p2p/antiflood/messageProcessor.go +++ b/integrationTests/p2p/antiflood/messageProcessor.go @@ -5,6 +5,7 @@ import ( "sync/atomic" "github.com/multiversx/mx-chain-core-go/core" + "github.com/multiversx/mx-chain-go/integrationTests/mock" "github.com/multiversx/mx-chain-go/p2p" "github.com/multiversx/mx-chain-go/process" @@ -30,7 +31,7 @@ func newMessageProcessor() *MessageProcessor { } // ProcessReceivedMessage is the callback function from the p2p side whenever a new message is received -func (mp *MessageProcessor) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, _ p2p.MessageHandler) error { +func (mp *MessageProcessor) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, _ p2p.MessageHandler) ([]byte, error) { atomic.AddUint32(&mp.numMessagesReceived, 1) atomic.AddUint64(&mp.sizeMessagesReceived, uint64(len(message.Data()))) @@ -38,7 +39,7 @@ func (mp *MessageProcessor) ProcessReceivedMessage(message p2p.MessageP2P, fromC af, _ := antiflood2.NewP2PAntiflood(&mock.PeerBlackListCacherStub{}, &mock.TopicAntiFloodStub{}, mp.FloodPreventer) err := af.CanProcessMessage(message, fromConnectedPeer) if err != nil { - return err + return nil, err } } @@ -50,7 +51,7 @@ func (mp *MessageProcessor) ProcessReceivedMessage(message p2p.MessageP2P, fromC mp.messages[fromConnectedPeer] = append(mp.messages[fromConnectedPeer], message) - return nil + return []byte{}, nil } // NumMessagesProcessed returns the number of processed messages diff --git a/integrationTests/testHeartbeatNode.go b/integrationTests/testHeartbeatNode.go index caea2235767..27448cd1363 100644 --- a/integrationTests/testHeartbeatNode.go +++ b/integrationTests/testHeartbeatNode.go @@ -708,6 +708,7 @@ func (thn *TestHeartbeatNode) initMultiDataInterceptor(topic string, dataFactory interceptors.ArgMultiDataInterceptor{ Topic: topic, Marshalizer: TestMarshalizer, + Hasher: TestHasher, DataFactory: dataFactory, Processor: processor, Throttler: TestThrottler, diff --git a/node/chainSimulator/components/syncedBroadcastNetwork_test.go b/node/chainSimulator/components/syncedBroadcastNetwork_test.go index 74e061a819a..535b3808203 100644 --- a/node/chainSimulator/components/syncedBroadcastNetwork_test.go +++ b/node/chainSimulator/components/syncedBroadcastNetwork_test.go @@ -6,8 +6,9 @@ import ( "github.com/multiversx/mx-chain-communication-go/p2p" "github.com/multiversx/mx-chain-core-go/core" - "github.com/multiversx/mx-chain-go/testscommon/p2pmocks" "github.com/stretchr/testify/assert" + + "github.com/multiversx/mx-chain-go/testscommon/p2pmocks" ) func TestSyncedBroadcastNetwork_BroadcastShouldWorkOn3Peers(t *testing.T) { @@ -181,6 +182,7 @@ func TestSyncedBroadcastNetwork_SendDirectlyShouldNotDeadlock(t *testing.T) { topic := "topic" testMessage := []byte("test message") + msgID := []byte("msgID") peer1, err := NewSyncedMessenger(network) assert.Nil(t, err) @@ -191,9 +193,9 @@ func TestSyncedBroadcastNetwork_SendDirectlyShouldNotDeadlock(t *testing.T) { peer2, err := NewSyncedMessenger(network) assert.Nil(t, err) processor2 := &p2pmocks.MessageProcessorStub{ - ProcessReceivedMessageCalled: func(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) error { + ProcessReceivedMessageCalled: func(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) ([]byte, error) { log.Debug("sending message back to", "pid", fromConnectedPeer.Pretty()) - return source.SendToConnectedPeer(message.Topic(), []byte("reply: "+string(message.Data())), fromConnectedPeer) + return msgID, source.SendToConnectedPeer(message.Topic(), []byte("reply: "+string(message.Data())), fromConnectedPeer) }, } _ = peer2.CreateTopic(topic, true) @@ -285,7 +287,7 @@ func TestSyncedBroadcastNetwork_GetConnectedPeersOnTopic(t *testing.T) { func createMessageProcessor(t *testing.T, dataMap map[core.PeerID]map[string][]byte, pid core.PeerID) p2p.MessageProcessor { return &p2pmocks.MessageProcessorStub{ - ProcessReceivedMessageCalled: func(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) error { + ProcessReceivedMessageCalled: func(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) ([]byte, error) { m, found := dataMap[pid] if !found { m = make(map[string][]byte) @@ -297,7 +299,7 @@ func createMessageProcessor(t *testing.T, dataMap map[core.PeerID]map[string][]b assert.Equal(t, message.Peer(), fromConnectedPeer) m[message.Topic()] = message.Data() - return nil + return nil, nil }, } } diff --git a/node/chainSimulator/components/syncedMessenger.go b/node/chainSimulator/components/syncedMessenger.go index 09786c45842..70139f7c54b 100644 --- a/node/chainSimulator/components/syncedMessenger.go +++ b/node/chainSimulator/components/syncedMessenger.go @@ -85,7 +85,7 @@ func (messenger *syncedMessenger) receive(fromConnectedPeer core.PeerID, message for _, handler := range handlers { // this is needed to process all received messages on multiple go routines go func(proc p2p.MessageProcessor, p2pMessage p2p.MessageP2P, peer core.PeerID, localWG *sync.WaitGroup) { - err := proc.ProcessReceivedMessage(p2pMessage, peer, messenger) + _, err := proc.ProcessReceivedMessage(p2pMessage, peer, messenger) if err != nil { log.Trace("received message syncedMessenger", "error", err, "topic", p2pMessage.Topic(), "from connected peer", peer.Pretty()) } @@ -98,8 +98,8 @@ func (messenger *syncedMessenger) receive(fromConnectedPeer core.PeerID, message } // ProcessReceivedMessage does nothing and returns nil -func (messenger *syncedMessenger) ProcessReceivedMessage(_ p2p.MessageP2P, _ core.PeerID, _ p2p.MessageHandler) error { - return nil +func (messenger *syncedMessenger) ProcessReceivedMessage(_ p2p.MessageP2P, _ core.PeerID, _ p2p.MessageHandler) ([]byte, error) { + return nil, nil } // CreateTopic will create a topic for receiving data diff --git a/node/chainSimulator/components/syncedMessenger_test.go b/node/chainSimulator/components/syncedMessenger_test.go index c8c17918141..b8bb82f5342 100644 --- a/node/chainSimulator/components/syncedMessenger_test.go +++ b/node/chainSimulator/components/syncedMessenger_test.go @@ -4,8 +4,9 @@ import ( "fmt" "testing" - "github.com/multiversx/mx-chain-go/testscommon/p2pmocks" "github.com/stretchr/testify/assert" + + "github.com/multiversx/mx-chain-go/testscommon/p2pmocks" ) func TestNewSyncedMessenger(t *testing.T) { @@ -58,7 +59,9 @@ func TestSyncedMessenger_DisabledMethodsShouldNotPanic(t *testing.T) { assert.Nil(t, messenger.SetPeerShardResolver(nil)) assert.Nil(t, messenger.ConnectToPeer("")) assert.Nil(t, messenger.Bootstrap()) - assert.Nil(t, messenger.ProcessReceivedMessage(nil, "", nil)) + msgID, err := messenger.ProcessReceivedMessage(nil, "", nil) + assert.Nil(t, err) + assert.Nil(t, msgID) messenger.WaitForConnections(0, 0) diff --git a/p2p/disabled/networkMessenger.go b/p2p/disabled/networkMessenger.go index 4f854d976bc..c66443a4379 100644 --- a/p2p/disabled/networkMessenger.go +++ b/p2p/disabled/networkMessenger.go @@ -4,6 +4,7 @@ import ( "time" "github.com/multiversx/mx-chain-core-go/core" + "github.com/multiversx/mx-chain-go/p2p" ) @@ -176,8 +177,8 @@ func (netMes *networkMessenger) SignUsingPrivateKey(_ []byte, _ []byte) ([]byte, } // ProcessReceivedMessage returns nil as it is disabled -func (netMes *networkMessenger) ProcessReceivedMessage(_ p2p.MessageP2P, _ core.PeerID, _ p2p.MessageHandler) error { - return nil +func (netMes *networkMessenger) ProcessReceivedMessage(_ p2p.MessageP2P, _ core.PeerID, _ p2p.MessageHandler) ([]byte, error) { + return nil, nil } // SetDebugger returns nil as it is disabled diff --git a/process/factory/interceptorscontainer/baseInterceptorsContainerFactory.go b/process/factory/interceptorscontainer/baseInterceptorsContainerFactory.go index 271f2ac26aa..cb4e73e7dc3 100644 --- a/process/factory/interceptorscontainer/baseInterceptorsContainerFactory.go +++ b/process/factory/interceptorscontainer/baseInterceptorsContainerFactory.go @@ -298,6 +298,7 @@ func (bicf *baseInterceptorsContainerFactory) createOneTxInterceptor(topic strin interceptors.ArgMultiDataInterceptor{ Topic: topic, Marshalizer: internalMarshaller, + Hasher: bicf.argInterceptorFactory.CoreComponents.Hasher(), DataFactory: txFactory, Processor: txProcessor, Throttler: bicf.globalThrottler, @@ -347,6 +348,7 @@ func (bicf *baseInterceptorsContainerFactory) createOneUnsignedTxInterceptor(top interceptors.ArgMultiDataInterceptor{ Topic: topic, Marshalizer: internalMarshaller, + Hasher: bicf.argInterceptorFactory.CoreComponents.Hasher(), DataFactory: txFactory, Processor: txProcessor, Throttler: bicf.globalThrottler, @@ -396,6 +398,7 @@ func (bicf *baseInterceptorsContainerFactory) createOneRewardTxInterceptor(topic interceptors.ArgMultiDataInterceptor{ Topic: topic, Marshalizer: internalMarshaller, + Hasher: bicf.argInterceptorFactory.CoreComponents.Hasher(), DataFactory: txFactory, Processor: txProcessor, Throttler: bicf.globalThrottler, @@ -540,6 +543,7 @@ func (bicf *baseInterceptorsContainerFactory) createOneMiniBlocksInterceptor(top interceptors.ArgMultiDataInterceptor{ Topic: topic, Marshalizer: internalMarshaller, + Hasher: hasher, DataFactory: miniblockFactory, Processor: miniblockProcessor, Throttler: bicf.globalThrottler, @@ -630,6 +634,7 @@ func (bicf *baseInterceptorsContainerFactory) createOneTrieNodesInterceptor(topi interceptors.ArgMultiDataInterceptor{ Topic: topic, Marshalizer: internalMarshaller, + Hasher: bicf.argInterceptorFactory.CoreComponents.Hasher(), DataFactory: trieNodesFactory, Processor: trieNodesProcessor, Throttler: bicf.globalThrottler, @@ -696,7 +701,7 @@ func (bicf *baseInterceptorsContainerFactory) generateUnsignedTxsInterceptors() return bicf.addInterceptorsToContainers(keys, interceptorsSlice) } -//------- PeerAuthentication interceptor +// ------- PeerAuthentication interceptor func (bicf *baseInterceptorsContainerFactory) generatePeerAuthenticationInterceptor() error { identifierPeerAuthentication := common.PeerAuthenticationTopic @@ -727,6 +732,7 @@ func (bicf *baseInterceptorsContainerFactory) generatePeerAuthenticationIntercep interceptors.ArgMultiDataInterceptor{ Topic: identifierPeerAuthentication, Marshalizer: internalMarshaller, + Hasher: bicf.argInterceptorFactory.CoreComponents.Hasher(), DataFactory: peerAuthenticationFactory, Processor: peerAuthenticationProcessor, Throttler: bicf.globalThrottler, @@ -749,7 +755,7 @@ func (bicf *baseInterceptorsContainerFactory) generatePeerAuthenticationIntercep return bicf.mainContainer.Add(identifierPeerAuthentication, mdInterceptor) } -//------- Heartbeat interceptor +// ------- Heartbeat interceptor func (bicf *baseInterceptorsContainerFactory) generateHeartbeatInterceptor() error { shardC := bicf.shardCoordinator @@ -890,6 +896,7 @@ func (bicf *baseInterceptorsContainerFactory) generateValidatorInfoInterceptor() interceptors.ArgMultiDataInterceptor{ Topic: identifier, Marshalizer: internalMarshaller, + Hasher: bicf.argInterceptorFactory.CoreComponents.Hasher(), DataFactory: interceptedValidatorInfoFactory, Processor: validatorInfoProcessor, Throttler: bicf.globalThrottler, diff --git a/process/interceptors/epochStartMetaBlockInterceptor.go b/process/interceptors/epochStartMetaBlockInterceptor.go index 36bfc121988..0559c1cf7ef 100644 --- a/process/interceptors/epochStartMetaBlockInterceptor.go +++ b/process/interceptors/epochStartMetaBlockInterceptor.go @@ -9,6 +9,7 @@ import ( "github.com/multiversx/mx-chain-core-go/data/block" "github.com/multiversx/mx-chain-core-go/hashing" "github.com/multiversx/mx-chain-core-go/marshal" + "github.com/multiversx/mx-chain-go/p2p" "github.com/multiversx/mx-chain-go/process" "github.com/multiversx/mx-chain-go/process/factory" @@ -56,22 +57,22 @@ func NewEpochStartMetaBlockInterceptor(args ArgsEpochStartMetaBlockInterceptor) } // ProcessReceivedMessage will handle received messages containing epoch start meta blocks -func (e *epochStartMetaBlockInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, _ p2p.MessageHandler) error { +func (e *epochStartMetaBlockInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, _ p2p.MessageHandler) ([]byte, error) { var epochStartMb block.MetaBlock err := e.marshalizer.Unmarshal(&epochStartMb, message.Data()) if err != nil { - return err + return nil, err } mbHash, err := core.CalculateHash(e.marshalizer, e.hasher, epochStartMb) if err != nil { - return err + return nil, err } if !epochStartMb.IsStartOfEpochBlock() { log.Trace("epochStartMetaBlockInterceptor-ProcessReceivedMessage: received meta block is not of "+ "type epoch start meta block", "hash", mbHash) - return process.ErrNotEpochStartBlock + return nil, process.ErrNotEpochStartBlock } log.Trace("received epoch start meta", "epoch", epochStartMb.GetEpoch(), "from peer", fromConnectedPeer.Pretty()) @@ -82,11 +83,11 @@ func (e *epochStartMetaBlockInterceptor) ProcessReceivedMessage(message p2p.Mess metaBlock, found := e.checkMaps() if !found { - return nil + return mbHash, nil } e.handleFoundEpochStartMetaBlock(metaBlock) - return nil + return mbHash, nil } // this func should be called under mutex protection diff --git a/process/interceptors/epochStartMetaBlockInterceptor_test.go b/process/interceptors/epochStartMetaBlockInterceptor_test.go index 6958be19f8c..e4c916c8a6d 100644 --- a/process/interceptors/epochStartMetaBlockInterceptor_test.go +++ b/process/interceptors/epochStartMetaBlockInterceptor_test.go @@ -7,12 +7,13 @@ import ( "github.com/multiversx/mx-chain-core-go/core" "github.com/multiversx/mx-chain-core-go/core/check" "github.com/multiversx/mx-chain-core-go/data/block" + "github.com/stretchr/testify/require" + "github.com/multiversx/mx-chain-go/process" "github.com/multiversx/mx-chain-go/process/interceptors" "github.com/multiversx/mx-chain-go/process/mock" "github.com/multiversx/mx-chain-go/testscommon/hashingMocks" "github.com/multiversx/mx-chain-go/testscommon/p2pmocks" - "github.com/stretchr/testify/require" ) func TestNewEpochStartMetaBlockInterceptor(t *testing.T) { @@ -100,8 +101,9 @@ func TestEpochStartMetaBlockInterceptor_ProcessReceivedMessageUnmarshalError(t * require.NotNil(t, esmbi) message := &p2pmocks.P2PMessageMock{DataField: []byte("wrong meta block bytes")} - err := esmbi.ProcessReceivedMessage(message, "", &p2pmocks.MessengerStub{}) + msgID, err := esmbi.ProcessReceivedMessage(message, "", &p2pmocks.MessengerStub{}) require.Error(t, err) + require.Nil(t, msgID) } func TestEpochStartMetaBlockInterceptor_EntireFlowShouldWorkAndSetTheEpoch(t *testing.T) { @@ -144,23 +146,24 @@ func TestEpochStartMetaBlockInterceptor_EntireFlowShouldWorkAndSetTheEpoch(t *te wrongMetaBlock := &block.MetaBlock{Epoch: 0} wrongMetaBlockBytes, _ := args.Marshalizer.Marshal(wrongMetaBlock) - err := esmbi.ProcessReceivedMessage(&p2pmocks.P2PMessageMock{DataField: metaBlockBytes}, "peer0", &p2pmocks.MessengerStub{}) + msgID, err := esmbi.ProcessReceivedMessage(&p2pmocks.P2PMessageMock{DataField: metaBlockBytes}, "peer0", &p2pmocks.MessengerStub{}) require.NoError(t, err) require.False(t, wasCalled) + require.NotNil(t, msgID) - _ = esmbi.ProcessReceivedMessage(&p2pmocks.P2PMessageMock{DataField: metaBlockBytes}, "peer1", &p2pmocks.MessengerStub{}) + _, _ = esmbi.ProcessReceivedMessage(&p2pmocks.P2PMessageMock{DataField: metaBlockBytes}, "peer1", &p2pmocks.MessengerStub{}) require.False(t, wasCalled) // send again from peer1 => should not be taken into account - _ = esmbi.ProcessReceivedMessage(&p2pmocks.P2PMessageMock{DataField: metaBlockBytes}, "peer1", &p2pmocks.MessengerStub{}) + _, _ = esmbi.ProcessReceivedMessage(&p2pmocks.P2PMessageMock{DataField: metaBlockBytes}, "peer1", &p2pmocks.MessengerStub{}) require.False(t, wasCalled) // send another meta block - _ = esmbi.ProcessReceivedMessage(&p2pmocks.P2PMessageMock{DataField: wrongMetaBlockBytes}, "peer2", &p2pmocks.MessengerStub{}) + _, _ = esmbi.ProcessReceivedMessage(&p2pmocks.P2PMessageMock{DataField: wrongMetaBlockBytes}, "peer2", &p2pmocks.MessengerStub{}) require.False(t, wasCalled) // send the last needed metablock from a new peer => should fetch the epoch - _ = esmbi.ProcessReceivedMessage(&p2pmocks.P2PMessageMock{DataField: metaBlockBytes}, "peer3", &p2pmocks.MessengerStub{}) + _, _ = esmbi.ProcessReceivedMessage(&p2pmocks.P2PMessageMock{DataField: metaBlockBytes}, "peer3", &p2pmocks.MessengerStub{}) require.True(t, wasCalled) } diff --git a/process/interceptors/multiDataInterceptor.go b/process/interceptors/multiDataInterceptor.go index 923c9b360e9..fb719f24a8b 100644 --- a/process/interceptors/multiDataInterceptor.go +++ b/process/interceptors/multiDataInterceptor.go @@ -6,6 +6,7 @@ import ( "github.com/multiversx/mx-chain-core-go/core" "github.com/multiversx/mx-chain-core-go/core/check" "github.com/multiversx/mx-chain-core-go/data/batch" + "github.com/multiversx/mx-chain-core-go/hashing" "github.com/multiversx/mx-chain-core-go/marshal" logger "github.com/multiversx/mx-chain-logger-go" "github.com/pkg/errors" @@ -23,6 +24,7 @@ var log = logger.GetOrCreate("process/interceptors") type ArgMultiDataInterceptor struct { Topic string Marshalizer marshal.Marshalizer + Hasher hashing.Hasher DataFactory process.InterceptedDataFactory Processor process.InterceptorProcessor Throttler process.InterceptorThrottler @@ -37,6 +39,7 @@ type ArgMultiDataInterceptor struct { type MultiDataInterceptor struct { *baseDataInterceptor marshalizer marshal.Marshalizer + hasher hashing.Hasher factory process.InterceptedDataFactory whiteListRequest process.WhiteListHandler mutChunksProcessor sync.RWMutex @@ -51,6 +54,9 @@ func NewMultiDataInterceptor(arg ArgMultiDataInterceptor) (*MultiDataInterceptor if check.IfNil(arg.Marshalizer) { return nil, process.ErrNilMarshalizer } + if check.IfNil(arg.Hasher) { + return nil, process.ErrNilHasher + } if check.IfNil(arg.DataFactory) { return nil, process.ErrNilInterceptedDataFactory } @@ -88,6 +94,7 @@ func NewMultiDataInterceptor(arg ArgMultiDataInterceptor) (*MultiDataInterceptor interceptedDataVerifier: arg.InterceptedDataVerifier, }, marshalizer: arg.Marshalizer, + hasher: arg.Hasher, factory: arg.DataFactory, whiteListRequest: arg.WhiteListRequest, chunksProcessor: disabled.NewDisabledInterceptedChunksProcessor(), @@ -98,10 +105,10 @@ func NewMultiDataInterceptor(arg ArgMultiDataInterceptor) (*MultiDataInterceptor // ProcessReceivedMessage is the callback func from the p2p.Messenger and will be called each time a new message was received // (for the topic this validator was registered to) -func (mdi *MultiDataInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, _ p2p.MessageHandler) error { +func (mdi *MultiDataInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, _ p2p.MessageHandler) ([]byte, error) { err := mdi.preProcessMesage(message, fromConnectedPeer) if err != nil { - return err + return nil, err } b := batch.Batch{} @@ -114,13 +121,13 @@ func (mdi *MultiDataInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, mdi.antifloodHandler.BlacklistPeer(message.Peer(), reason, common.InvalidMessageBlacklistDuration) mdi.antifloodHandler.BlacklistPeer(fromConnectedPeer, reason, common.InvalidMessageBlacklistDuration) - return err + return nil, err } multiDataBuff := b.Data lenMultiData := len(multiDataBuff) if lenMultiData == 0 { mdi.throttler.EndProcessing() - return process.ErrNoDataInMessage + return nil, process.ErrNoDataInMessage } err = mdi.antifloodHandler.CanProcessMessagesOnTopic( @@ -132,7 +139,7 @@ func (mdi *MultiDataInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, ) if err != nil { mdi.throttler.EndProcessing() - return err + return nil, err } mdi.mutChunksProcessor.RLock() @@ -140,13 +147,13 @@ func (mdi *MultiDataInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, mdi.mutChunksProcessor.RUnlock() if err != nil { mdi.throttler.EndProcessing() - return err + return nil, err } isIncompleteChunk := checkChunksRes.IsChunk && !checkChunksRes.HaveAllChunks if isIncompleteChunk { mdi.throttler.EndProcessing() - return nil + return nil, nil } isCompleteChunk := checkChunksRes.IsChunk && checkChunksRes.HaveAllChunks if isCompleteChunk { @@ -163,7 +170,7 @@ func (mdi *MultiDataInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, if err != nil { mdi.throttler.EndProcessing() - return err + return nil, err } isWhiteListed := mdi.whiteListRequest.IsWhiteListed(interceptedData) @@ -173,7 +180,7 @@ func (mdi *MultiDataInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, p2p.PeerIdToShortString(message.Peer()), "topic", mdi.topic, "err", errOriginator) - return errOriginator + return nil, errOriginator } isForCurrentShard := interceptedData.IsForCurrentShard() @@ -188,7 +195,7 @@ func (mdi *MultiDataInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, "is white listed", isWhiteListed, ) mdi.throttler.EndProcessing() - return process.ErrInterceptedDataNotForCurrentShard + return nil, process.ErrInterceptedDataNotForCurrentShard } } @@ -199,7 +206,29 @@ func (mdi *MultiDataInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, mdi.throttler.EndProcessing() }() - return nil + messageID := mdi.createInterceptedMultiDataMsgID(listInterceptedData) + + return messageID, nil +} + +func (mdi *MultiDataInterceptor) createInterceptedMultiDataMsgID(interceptedMultiData []process.InterceptedData) []byte { + if len(interceptedMultiData) == 0 { + return nil + } + if len(interceptedMultiData) == 1 { + return interceptedMultiData[0].Hash() + } + + lenOneID := len(interceptedMultiData[0].Hash()) + data := make([]byte, 0, lenOneID*len(interceptedMultiData)) + for _, id := range interceptedMultiData { + data = append(data, id.Hash()...) + } + if len(data) == 0 { + return nil + } + + return mdi.hasher.Compute(string(data)) } func (mdi *MultiDataInterceptor) interceptedData(dataBuff []byte, originator core.PeerID, fromConnectedPeer core.PeerID) (process.InterceptedData, error) { diff --git a/process/interceptors/multiDataInterceptor_test.go b/process/interceptors/multiDataInterceptor_test.go index ede867dba07..1651b944f78 100644 --- a/process/interceptors/multiDataInterceptor_test.go +++ b/process/interceptors/multiDataInterceptor_test.go @@ -24,8 +24,13 @@ var fromConnectedPeerId = core.PeerID("from connected peer Id") func createMockArgMultiDataInterceptor() interceptors.ArgMultiDataInterceptor { return interceptors.ArgMultiDataInterceptor{ - Topic: "test topic", - Marshalizer: &mock.MarshalizerMock{}, + Topic: "test topic", + Marshalizer: &mock.MarshalizerMock{}, + Hasher: &mock.HasherStub{ + ComputeCalled: func(s string) []byte { + return []byte("hash") + }, + }, DataFactory: &mock.InterceptedDataFactoryStub{}, Processor: &mock.InterceptorProcessorStub{}, Throttler: createMockThrottler(), @@ -158,7 +163,7 @@ func TestNewMultiDataInterceptor(t *testing.T) { assert.Equal(t, arg.Topic, mdi.Topic()) } -//------- ProcessReceivedMessage +// ------- ProcessReceivedMessage func TestMultiDataInterceptor_ProcessReceivedMessageNilMessageShouldErr(t *testing.T) { t.Parallel() @@ -166,9 +171,10 @@ func TestMultiDataInterceptor_ProcessReceivedMessageNilMessageShouldErr(t *testi arg := createMockArgMultiDataInterceptor() mdi, _ := interceptors.NewMultiDataInterceptor(arg) - err := mdi.ProcessReceivedMessage(nil, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := mdi.ProcessReceivedMessage(nil, fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.Equal(t, process.ErrNilMessage, err) + assert.Nil(t, msgID) } func TestMultiDataInterceptor_ProcessReceivedMessageUnmarshalFailsShouldErr(t *testing.T) { @@ -201,11 +207,12 @@ func TestMultiDataInterceptor_ProcessReceivedMessageUnmarshalFailsShouldErr(t *t DataField: []byte("data to be processed"), PeerField: originatorPid, } - err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.Equal(t, errExpeced, err) assert.True(t, originatorBlackListed) assert.True(t, fromConnectedPeerBlackListed) + assert.Nil(t, msgID) } func TestMultiDataInterceptor_ProcessReceivedMessageUnmarshalReturnsEmptySliceShouldErr(t *testing.T) { @@ -222,9 +229,10 @@ func TestMultiDataInterceptor_ProcessReceivedMessageUnmarshalReturnsEmptySliceSh msg := &p2pmocks.P2PMessageMock{ DataField: []byte("data to be processed"), } - err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.Equal(t, process.ErrNoDataInMessage, err) + assert.Nil(t, msgID) } func TestMultiDataInterceptor_ProcessReceivedCreateFailsShouldErr(t *testing.T) { @@ -264,7 +272,7 @@ func TestMultiDataInterceptor_ProcessReceivedCreateFailsShouldErr(t *testing.T) DataField: dataField, PeerField: originatorPid, } - err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) @@ -275,6 +283,7 @@ func TestMultiDataInterceptor_ProcessReceivedCreateFailsShouldErr(t *testing.T) assert.Equal(t, int32(1), throttler.EndProcessingCount()) assert.True(t, originatorBlackListed) assert.True(t, fromConnectedPeerBlackListed) + assert.Nil(t, msgID) } func TestMultiDataInterceptor_ProcessReceivedPartiallyCorrectDataShouldErr(t *testing.T) { @@ -315,7 +324,7 @@ func TestMultiDataInterceptor_ProcessReceivedPartiallyCorrectDataShouldErr(t *te msg := &p2pmocks.P2PMessageMock{ DataField: dataField, } - err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) @@ -324,6 +333,7 @@ func TestMultiDataInterceptor_ProcessReceivedPartiallyCorrectDataShouldErr(t *te assert.Equal(t, int32(0), atomic.LoadInt32(&processCalledNum)) assert.Equal(t, int32(1), throttler.StartProcessingCount()) assert.Equal(t, int32(1), throttler.EndProcessingCount()) + assert.Nil(t, msgID) } func TestMultiDataInterceptor_ProcessReceivedMessageNotValidShouldErrAndNotProcess(t *testing.T) { @@ -379,7 +389,7 @@ func testProcessReceiveMessageMultiData(t *testing.T, isForCurrentShard bool, ex msg := &p2pmocks.P2PMessageMock{ DataField: dataField, } - err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) @@ -388,6 +398,7 @@ func testProcessReceiveMessageMultiData(t *testing.T, isForCurrentShard bool, ex assert.Equal(t, int32(calledNum), atomic.LoadInt32(&processCalledNum)) assert.Equal(t, int32(1), throttler.StartProcessingCount()) assert.Equal(t, int32(1), throttler.EndProcessingCount()) + assert.Nil(t, msgID) } func TestMultiDataInterceptor_ProcessReceivedMessageCheckBatchErrors(t *testing.T) { @@ -420,13 +431,14 @@ func TestMultiDataInterceptor_ProcessReceivedMessageCheckBatchErrors(t *testing. msg := &p2pmocks.P2PMessageMock{ DataField: dataField, } - err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) assert.Equal(t, expectedErr, err) assert.Equal(t, int32(1), throttler.StartProcessingCount()) assert.Equal(t, int32(1), throttler.EndProcessingCount()) + assert.Nil(t, msgID) } func TestMultiDataInterceptor_ProcessReceivedMessageCheckBatchIsIncomplete(t *testing.T) { @@ -462,13 +474,14 @@ func TestMultiDataInterceptor_ProcessReceivedMessageCheckBatchIsIncomplete(t *te msg := &p2pmocks.P2PMessageMock{ DataField: dataField, } - err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) assert.Nil(t, err) assert.Equal(t, int32(1), throttler.StartProcessingCount()) assert.Equal(t, int32(1), throttler.EndProcessingCount()) + assert.Nil(t, msgID) } func TestMultiDataInterceptor_ProcessReceivedMessageCheckBatchIsComplete(t *testing.T) { @@ -481,6 +494,7 @@ func TestMultiDataInterceptor_ProcessReceivedMessageCheckBatchIsComplete(t *test processCalledNum := int32(0) throttler := createMockThrottler() arg := createMockArgMultiDataInterceptor() + msgHash := []byte("hash") interceptedData := &testscommon.InterceptedDataStub{ CheckValidityCalled: func() error { return nil @@ -488,10 +502,11 @@ func TestMultiDataInterceptor_ProcessReceivedMessageCheckBatchIsComplete(t *test IsForCurrentShardCalled: func() bool { return true }, + HashCalled: func() []byte { return msgHash }, } arg.DataFactory = &mock.InterceptedDataFactoryStub{ CreateCalled: func(buff []byte) (data process.InterceptedData, e error) { - assert.Equal(t, newBuffData, buff) //chunk processor switched the buffer + assert.Equal(t, newBuffData, buff) // chunk processor switched the buffer createCalled = true return interceptedData, nil }, @@ -515,7 +530,7 @@ func TestMultiDataInterceptor_ProcessReceivedMessageCheckBatchIsComplete(t *test msg := &p2pmocks.P2PMessageMock{ DataField: dataField, } - err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) @@ -523,6 +538,7 @@ func TestMultiDataInterceptor_ProcessReceivedMessageCheckBatchIsComplete(t *test assert.True(t, createCalled) assert.Equal(t, int32(1), throttler.StartProcessingCount()) assert.Equal(t, int32(1), throttler.EndProcessingCount()) + assert.Equal(t, msgHash, msgID) } func TestMultiDataInterceptor_ProcessReceivedMessageWhitelistedShouldRetNil(t *testing.T) { @@ -533,6 +549,7 @@ func TestMultiDataInterceptor_ProcessReceivedMessageWhitelistedShouldRetNil(t *t checkCalledNum := int32(0) processCalledNum := int32(0) throttler := createMockThrottler() + msgHash := []byte("hash") interceptedData := &testscommon.InterceptedDataStub{ CheckValidityCalled: func() error { return nil @@ -540,6 +557,9 @@ func TestMultiDataInterceptor_ProcessReceivedMessageWhitelistedShouldRetNil(t *t IsForCurrentShardCalled: func() bool { return false }, + HashCalled: func() []byte { + return msgHash + }, } arg := createMockArgMultiDataInterceptor() arg.DataFactory = &mock.InterceptedDataFactoryStub{ @@ -560,7 +580,7 @@ func TestMultiDataInterceptor_ProcessReceivedMessageWhitelistedShouldRetNil(t *t msg := &p2pmocks.P2PMessageMock{ DataField: dataField, } - err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) @@ -569,6 +589,7 @@ func TestMultiDataInterceptor_ProcessReceivedMessageWhitelistedShouldRetNil(t *t assert.Equal(t, int32(2), atomic.LoadInt32(&processCalledNum)) assert.Equal(t, int32(1), throttler.StartProcessingCount()) assert.Equal(t, int32(1), throttler.EndProcessingCount()) + assert.Equal(t, msgHash, msgID) } func TestMultiDataInterceptor_InvalidTxVersionShouldBackList(t *testing.T) { @@ -588,9 +609,10 @@ func processReceivedMessageMultiDataInvalidVersion(t *testing.T, expectedErr err marshalizer := &mock.MarshalizerMock{} checkCalledNum := int32(0) processCalledNum := int32(0) + msgHash := []byte("hash") interceptedData := &testscommon.InterceptedDataStub{ HashCalled: func() []byte { - return []byte("hash") + return msgHash }, CheckValidityCalled: func() error { return expectedErr @@ -638,13 +660,14 @@ func processReceivedMessageMultiDataInvalidVersion(t *testing.T, expectedErr err PeerField: originator, } - err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.Equal(t, expectedErr, err) assert.True(t, isFromConnectedPeerBlackListed) assert.True(t, isOriginatorBlackListed) + assert.Nil(t, msgID) } -//------- debug +// ------- debug func TestMultiDataInterceptor_SetInterceptedDebugHandlerNilShouldErr(t *testing.T) { t.Parallel() @@ -667,7 +690,7 @@ func TestMultiDataInterceptor_SetInterceptedDebugHandlerShouldWork(t *testing.T) err := mdi.SetInterceptedDebugHandler(debugger) assert.Nil(t, err) - assert.True(t, debugger == mdi.InterceptedDebugHandler()) //pointer testing + assert.True(t, debugger == mdi.InterceptedDebugHandler()) // pointer testing } func TestMultiDataInterceptor_ProcessReceivedMessageIsOriginatorNotOkButWhiteListed(t *testing.T) { @@ -678,6 +701,7 @@ func TestMultiDataInterceptor_ProcessReceivedMessageIsOriginatorNotOkButWhiteLis checkCalledNum := int32(0) processCalledNum := int32(0) throttler := createMockThrottler() + msgHash := []byte("hash") interceptedData := &testscommon.InterceptedDataStub{ CheckValidityCalled: func() error { return nil @@ -686,7 +710,7 @@ func TestMultiDataInterceptor_ProcessReceivedMessageIsOriginatorNotOkButWhiteLis return false }, HashCalled: func() []byte { - return []byte("hash") + return msgHash }, } @@ -716,7 +740,7 @@ func TestMultiDataInterceptor_ProcessReceivedMessageIsOriginatorNotOkButWhiteLis msg := &p2pmocks.P2PMessageMock{ DataField: dataField, } - err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) @@ -725,11 +749,12 @@ func TestMultiDataInterceptor_ProcessReceivedMessageIsOriginatorNotOkButWhiteLis assert.Equal(t, int32(2), atomic.LoadInt32(&processCalledNum)) assert.Equal(t, int32(1), throttler.StartProcessingCount()) assert.Equal(t, int32(1), throttler.EndProcessingCount()) + assert.Equal(t, msgHash, msgID) whiteListHandler.IsWhiteListedCalled = func(interceptedData process.InterceptedData) bool { return false } - err = mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err = mdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) assert.Equal(t, err, errOriginator) @@ -737,6 +762,7 @@ func TestMultiDataInterceptor_ProcessReceivedMessageIsOriginatorNotOkButWhiteLis assert.Equal(t, int32(2), atomic.LoadInt32(&processCalledNum)) assert.Equal(t, int32(2), throttler.StartProcessingCount()) assert.Equal(t, int32(2), throttler.EndProcessingCount()) + assert.Nil(t, msgID) } func TestMultiDataInterceptor_RegisterHandler(t *testing.T) { diff --git a/process/interceptors/singleDataInterceptor.go b/process/interceptors/singleDataInterceptor.go index 7e5a4257fd6..2e2d804779b 100644 --- a/process/interceptors/singleDataInterceptor.go +++ b/process/interceptors/singleDataInterceptor.go @@ -82,10 +82,10 @@ func NewSingleDataInterceptor(arg ArgSingleDataInterceptor) (*SingleDataIntercep // ProcessReceivedMessage is the callback func from the p2p.Messenger and will be called each time a new message was received // (for the topic this validator was registered to) -func (sdi *SingleDataInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, _ p2p.MessageHandler) error { +func (sdi *SingleDataInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, _ p2p.MessageHandler) ([]byte, error) { err := sdi.preProcessMesage(message, fromConnectedPeer) if err != nil { - return err + return nil, err } interceptedData, err := sdi.factory.Create(message.Data()) @@ -97,7 +97,7 @@ func (sdi *SingleDataInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, sdi.antifloodHandler.BlacklistPeer(message.Peer(), reason, common.InvalidMessageBlacklistDuration) sdi.antifloodHandler.BlacklistPeer(fromConnectedPeer, reason, common.InvalidMessageBlacklistDuration) - return err + return nil, err } sdi.receivedDebugInterceptedData(interceptedData) @@ -114,7 +114,7 @@ func (sdi *SingleDataInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, sdi.antifloodHandler.BlacklistPeer(fromConnectedPeer, reason, common.InvalidMessageBlacklistDuration) } - return err + return nil, err } errOriginator := sdi.antifloodHandler.IsOriginatorEligibleForTopic(message.Peer(), sdi.topic) @@ -124,9 +124,10 @@ func (sdi *SingleDataInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, "originator", p2p.PeerIdToShortString(message.Peer()), "topic", sdi.topic, "err", errOriginator) sdi.throttler.EndProcessing() - return errOriginator + return nil, errOriginator } + messageID := interceptedData.Hash() isForCurrentShard := interceptedData.IsForCurrentShard() shouldProcess := isForCurrentShard || isWhiteListed if !shouldProcess { @@ -140,7 +141,7 @@ func (sdi *SingleDataInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, "is white listed", isWhiteListed, ) - return nil + return messageID, nil } go func() { @@ -148,7 +149,7 @@ func (sdi *SingleDataInterceptor) ProcessReceivedMessage(message p2p.MessageP2P, sdi.throttler.EndProcessing() }() - return nil + return messageID, nil } // RegisterHandler registers a callback function to be notified on received data diff --git a/process/interceptors/singleDataInterceptor_test.go b/process/interceptors/singleDataInterceptor_test.go index 9b1fad0a840..84aa285ff6c 100644 --- a/process/interceptors/singleDataInterceptor_test.go +++ b/process/interceptors/singleDataInterceptor_test.go @@ -177,7 +177,7 @@ func TestNewSingleDataInterceptor(t *testing.T) { assert.Equal(t, arg.Topic, sdi.Topic()) } -//------- ProcessReceivedMessage +// ------- ProcessReceivedMessage func TestSingleDataInterceptor_ProcessReceivedMessageNilMessageShouldErr(t *testing.T) { t.Parallel() @@ -185,9 +185,10 @@ func TestSingleDataInterceptor_ProcessReceivedMessageNilMessageShouldErr(t *test arg := createMockArgSingleDataInterceptor() sdi, _ := interceptors.NewSingleDataInterceptor(arg) - err := sdi.ProcessReceivedMessage(nil, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := sdi.ProcessReceivedMessage(nil, fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.Equal(t, process.ErrNilMessage, err) + assert.Nil(t, msgID) } func TestSingleDataInterceptor_ProcessReceivedMessageFactoryCreationErrorShouldErr(t *testing.T) { @@ -219,11 +220,12 @@ func TestSingleDataInterceptor_ProcessReceivedMessageFactoryCreationErrorShouldE DataField: []byte("data to be processed"), PeerField: originatorPid, } - err := sdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := sdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.Equal(t, errExpected, err) assert.True(t, originatorBlackListed) assert.True(t, fromConnectedPeerBlackListed) + assert.Nil(t, msgID) } func TestSingleDataInterceptor_ProcessReceivedMessageIsNotValidShouldNotCallProcess(t *testing.T) { @@ -271,7 +273,7 @@ func testProcessReceiveMessage(t *testing.T, isForCurrentShard bool, validityErr msg := &p2pmocks.P2PMessageMock{ DataField: []byte("data to be processed"), } - err := sdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := sdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) @@ -280,6 +282,7 @@ func testProcessReceiveMessage(t *testing.T, isForCurrentShard bool, validityErr assert.Equal(t, int32(calledNum), atomic.LoadInt32(&processCalledNum)) assert.Equal(t, int32(1), throttler.EndProcessingCount()) assert.Equal(t, int32(1), throttler.EndProcessingCount()) + assert.Nil(t, msgID) } func TestSingleDataInterceptor_ProcessReceivedMessageWhitelistedShouldWork(t *testing.T) { @@ -288,6 +291,7 @@ func TestSingleDataInterceptor_ProcessReceivedMessageWhitelistedShouldWork(t *te checkCalledNum := int32(0) processCalledNum := int32(0) throttler := createMockThrottler() + msgHash := []byte("hash") interceptedData := &testscommon.InterceptedDataStub{ CheckValidityCalled: func() error { return nil @@ -295,6 +299,9 @@ func TestSingleDataInterceptor_ProcessReceivedMessageWhitelistedShouldWork(t *te IsForCurrentShardCalled: func() bool { return false }, + HashCalled: func() []byte { + return msgHash + }, } arg := createMockArgSingleDataInterceptor() @@ -315,7 +322,7 @@ func TestSingleDataInterceptor_ProcessReceivedMessageWhitelistedShouldWork(t *te msg := &p2pmocks.P2PMessageMock{ DataField: []byte("data to be processed"), } - err := sdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := sdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) @@ -324,6 +331,7 @@ func TestSingleDataInterceptor_ProcessReceivedMessageWhitelistedShouldWork(t *te assert.Equal(t, int32(1), atomic.LoadInt32(&processCalledNum)) assert.Equal(t, int32(1), throttler.EndProcessingCount()) assert.Equal(t, int32(1), throttler.EndProcessingCount()) + assert.Equal(t, msgHash, msgID) } func TestSingleDataInterceptor_InvalidTxVersionShouldBlackList(t *testing.T) { @@ -383,10 +391,12 @@ func processReceivedMessageSingleDataInvalidVersion(t *testing.T, expectedErr er DataField: []byte("data to be processed"), PeerField: originator, } - err := sdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + + msgID, err := sdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) assert.Equal(t, expectedErr, err) assert.True(t, isFromConnectedPeerBlackListed) assert.True(t, isOriginatorBlackListed) + assert.Nil(t, msgID) } func TestSingleDataInterceptor_ProcessReceivedMessageWithOriginator(t *testing.T) { @@ -395,6 +405,7 @@ func TestSingleDataInterceptor_ProcessReceivedMessageWithOriginator(t *testing.T checkCalledNum := int32(0) processCalledNum := int32(0) throttler := createMockThrottler() + msgHash := []byte("hash") interceptedData := &testscommon.InterceptedDataStub{ CheckValidityCalled: func() error { return nil @@ -402,6 +413,9 @@ func TestSingleDataInterceptor_ProcessReceivedMessageWithOriginator(t *testing.T IsForCurrentShardCalled: func() bool { return false }, + HashCalled: func() []byte { + return msgHash + }, } whiteListHandler := &testscommon.WhiteListHandlerStub{ @@ -428,7 +442,7 @@ func TestSingleDataInterceptor_ProcessReceivedMessageWithOriginator(t *testing.T msg := &p2pmocks.P2PMessageMock{ DataField: []byte("data to be processed"), } - err := sdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err := sdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) @@ -437,12 +451,13 @@ func TestSingleDataInterceptor_ProcessReceivedMessageWithOriginator(t *testing.T assert.Equal(t, int32(1), atomic.LoadInt32(&processCalledNum)) assert.Equal(t, int32(1), throttler.EndProcessingCount()) assert.Equal(t, int32(1), throttler.EndProcessingCount()) + assert.Equal(t, msgHash, msgID) whiteListHandler.IsWhiteListedCalled = func(interceptedData process.InterceptedData) bool { return false } - err = sdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) + msgID, err = sdi.ProcessReceivedMessage(msg, fromConnectedPeerId, &p2pmocks.MessengerStub{}) time.Sleep(time.Second) @@ -451,9 +466,10 @@ func TestSingleDataInterceptor_ProcessReceivedMessageWithOriginator(t *testing.T assert.Equal(t, int32(1), atomic.LoadInt32(&processCalledNum)) assert.Equal(t, int32(2), throttler.EndProcessingCount()) assert.Equal(t, int32(2), throttler.EndProcessingCount()) + assert.Nil(t, msgID) } -//------- debug +// ------- debug func TestSingleDataInterceptor_SetInterceptedDebugHandlerNilShouldErr(t *testing.T) { t.Parallel() @@ -476,7 +492,7 @@ func TestSingleDataInterceptor_SetInterceptedDebugHandlerShouldWork(t *testing.T err := sdi.SetInterceptedDebugHandler(debugger) assert.Nil(t, err) - assert.True(t, debugger == sdi.InterceptedDebugHandler()) //pointer testing + assert.True(t, debugger == sdi.InterceptedDebugHandler()) // pointer testing } func TestSingleDataInterceptor_Close(t *testing.T) { @@ -489,7 +505,7 @@ func TestSingleDataInterceptor_Close(t *testing.T) { assert.Nil(t, err) } -//------- IsInterfaceNil +// ------- IsInterfaceNil func TestSingleDataInterceptor_IsInterfaceNil(t *testing.T) { t.Parallel() diff --git a/process/interface.go b/process/interface.go index c75c7d3ead2..8378f63845e 100644 --- a/process/interface.go +++ b/process/interface.go @@ -556,7 +556,7 @@ type BlockChainHookWithAccountsAdapter interface { // Interceptor defines what a data interceptor should do // It should also adhere to the p2p.MessageProcessor interface so it can wire to a p2p.Messenger type Interceptor interface { - ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) error + ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) ([]byte, error) SetInterceptedDebugHandler(handler InterceptedDebugger) error RegisterHandler(handler func(topic string, hash []byte, data interface{})) Close() error diff --git a/testscommon/consensus/sposWorkerMock.go b/testscommon/consensus/sposWorkerMock.go index 98936e8aecf..533809fda4f 100644 --- a/testscommon/consensus/sposWorkerMock.go +++ b/testscommon/consensus/sposWorkerMock.go @@ -20,7 +20,7 @@ type SposWorkerMock struct { RemoveAllReceivedHeaderHandlersCalled func() AddReceivedProofHandlerCalled func(handler func(proofHandler consensus.ProofHandler)) RemoveAllReceivedMessagesCallsCalled func() - ProcessReceivedMessageCalled func(message p2p.MessageP2P) error + ProcessReceivedMessageCalled func(message p2p.MessageP2P) ([]byte, error) SendConsensusMessageCalled func(cnsDta *consensus.Message) bool ExtendCalled func(subroundId int) GetConsensusStateChangedChannelsCalled func() chan bool @@ -79,11 +79,11 @@ func (sposWorkerMock *SposWorkerMock) RemoveAllReceivedMessagesCalls() { } // ProcessReceivedMessage - -func (sposWorkerMock *SposWorkerMock) ProcessReceivedMessage(message p2p.MessageP2P, _ core.PeerID, _ p2p.MessageHandler) error { +func (sposWorkerMock *SposWorkerMock) ProcessReceivedMessage(message p2p.MessageP2P, _ core.PeerID, _ p2p.MessageHandler) ([]byte, error) { if sposWorkerMock.ProcessReceivedMessageCalled == nil { return sposWorkerMock.ProcessReceivedMessageCalled(message) } - return nil + return nil, nil } // SendConsensusMessage - diff --git a/testscommon/interceptorContainerStub.go b/testscommon/interceptorContainerStub.go index ea07dbd8857..6b183fd6cc5 100644 --- a/testscommon/interceptorContainerStub.go +++ b/testscommon/interceptorContainerStub.go @@ -31,8 +31,8 @@ func (ics *InterceptorsContainerStub) Get(topic string) (process.Interceptor, er } return &InterceptorStub{ - ProcessReceivedMessageCalled: func(message p2p.MessageP2P) error { - return nil + ProcessReceivedMessageCalled: func(message p2p.MessageP2P) ([]byte, error) { + return nil, nil }, }, nil } diff --git a/testscommon/interceptorStub.go b/testscommon/interceptorStub.go index 54fc5be30af..095006e1f4e 100644 --- a/testscommon/interceptorStub.go +++ b/testscommon/interceptorStub.go @@ -2,25 +2,26 @@ package testscommon import ( "github.com/multiversx/mx-chain-core-go/core" + "github.com/multiversx/mx-chain-go/p2p" "github.com/multiversx/mx-chain-go/process" ) // InterceptorStub - type InterceptorStub struct { - ProcessReceivedMessageCalled func(message p2p.MessageP2P) error + ProcessReceivedMessageCalled func(message p2p.MessageP2P) ([]byte, error) SetInterceptedDebugHandlerCalled func(debugger process.InterceptedDebugger) error RegisterHandlerCalled func(handler func(topic string, hash []byte, data interface{})) CloseCalled func() error } // ProcessReceivedMessage - -func (is *InterceptorStub) ProcessReceivedMessage(message p2p.MessageP2P, _ core.PeerID, _ p2p.MessageHandler) error { +func (is *InterceptorStub) ProcessReceivedMessage(message p2p.MessageP2P, _ core.PeerID, _ p2p.MessageHandler) ([]byte, error) { if is.ProcessReceivedMessageCalled != nil { return is.ProcessReceivedMessageCalled(message) } - return nil + return nil, nil } // SetInterceptedDebugHandler - diff --git a/testscommon/p2pmocks/messageProcessorStub.go b/testscommon/p2pmocks/messageProcessorStub.go index 5802dcc6785..69b8079e4d1 100644 --- a/testscommon/p2pmocks/messageProcessorStub.go +++ b/testscommon/p2pmocks/messageProcessorStub.go @@ -7,16 +7,16 @@ import ( // MessageProcessorStub - type MessageProcessorStub struct { - ProcessReceivedMessageCalled func(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) error + ProcessReceivedMessageCalled func(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) ([]byte, error) } // ProcessReceivedMessage - -func (stub *MessageProcessorStub) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) error { +func (stub *MessageProcessorStub) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) ([]byte, error) { if stub.ProcessReceivedMessageCalled != nil { return stub.ProcessReceivedMessageCalled(message, fromConnectedPeer, source) } - return nil + return nil, nil } // IsInterfaceNil - diff --git a/testscommon/p2pmocks/messengerStub.go b/testscommon/p2pmocks/messengerStub.go index c48c95b9868..48a19977f07 100644 --- a/testscommon/p2pmocks/messengerStub.go +++ b/testscommon/p2pmocks/messengerStub.go @@ -4,6 +4,7 @@ import ( "time" "github.com/multiversx/mx-chain-core-go/core" + "github.com/multiversx/mx-chain-go/p2p" ) @@ -43,7 +44,7 @@ type MessengerStub struct { BroadcastUsingPrivateKeyCalled func(topic string, buff []byte, pid core.PeerID, skBytes []byte) BroadcastOnChannelUsingPrivateKeyCalled func(channel string, topic string, buff []byte, pid core.PeerID, skBytes []byte) SignUsingPrivateKeyCalled func(skBytes []byte, payload []byte) ([]byte, error) - ProcessReceivedMessageCalled func(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) error + ProcessReceivedMessageCalled func(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) ([]byte, error) SetDebuggerCalled func(debugger p2p.Debugger) error HasCompatibleProtocolIDCalled func(address string) bool } @@ -345,11 +346,11 @@ func (ms *MessengerStub) SignUsingPrivateKey(skBytes []byte, payload []byte) ([] } // ProcessReceivedMessage - -func (ms *MessengerStub) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) error { +func (ms *MessengerStub) ProcessReceivedMessage(message p2p.MessageP2P, fromConnectedPeer core.PeerID, source p2p.MessageHandler) ([]byte, error) { if ms.ProcessReceivedMessageCalled != nil { return ms.ProcessReceivedMessageCalled(message, fromConnectedPeer, source) } - return nil + return nil, nil } // SetDebugger - diff --git a/update/factory/fullSyncInterceptors.go b/update/factory/fullSyncInterceptors.go index ad8602e1e5b..b31f236f396 100644 --- a/update/factory/fullSyncInterceptors.go +++ b/update/factory/fullSyncInterceptors.go @@ -169,7 +169,7 @@ func NewFullSyncInterceptorsContainerFactory( whiteListHandler: args.WhiteListHandler, whiteListerVerifiedTxs: args.WhiteListerVerifiedTxs, antifloodHandler: args.AntifloodHandler, - //TODO: inject the real peers holder once we have the peers mapping before epoch bootstrap finishes + // TODO: inject the real peers holder once we have the peers mapping before epoch bootstrap finishes preferredPeersHolder: disabled.NewPreferredPeersHolder(), nodeOperationMode: args.NodeOperationMode, interceptedDataVerifierFactory: args.InterceptedDataVerifierFactory, @@ -322,7 +322,7 @@ func (ficf *fullSyncInterceptorsContainerFactory) generateShardHeaderInterceptor keys := make([]string, numShards) interceptorsSlice := make([]process.Interceptor, numShards) - //wire up to topics: shardBlocks_0_META, shardBlocks_1_META ... + // wire up to topics: shardBlocks_0_META, shardBlocks_1_META ... for idx := uint32(0); idx < numShards; idx++ { identifierHeader := factory.ShardBlocksTopic + tmpSC.CommunicationIdentifier(idx) if ficf.checkIfInterceptorExists(identifierHeader) { @@ -523,7 +523,7 @@ func (ficf *fullSyncInterceptorsContainerFactory) generateTxInterceptors() error interceptorSlice[int(idx)] = interceptor } - //tx interceptor for metachain topic + // tx interceptor for metachain topic identifierTx := factory.TransactionTopic + shardC.CommunicationIdentifier(core.MetachainShardId) if !ficf.checkIfInterceptorExists(identifierTx) { interceptor, err := ficf.createOneTxInterceptor(identifierTx) @@ -574,6 +574,7 @@ func (ficf *fullSyncInterceptorsContainerFactory) createOneTxInterceptor(topic s interceptors.ArgMultiDataInterceptor{ Topic: topic, Marshalizer: ficf.argInterceptorFactory.CoreComponents.InternalMarshalizer(), + Hasher: ficf.argInterceptorFactory.CoreComponents.Hasher(), DataFactory: txFactory, Processor: txProcessor, Throttler: ficf.globalThrottler, @@ -615,6 +616,7 @@ func (ficf *fullSyncInterceptorsContainerFactory) createOneUnsignedTxInterceptor interceptors.ArgMultiDataInterceptor{ Topic: topic, Marshalizer: ficf.argInterceptorFactory.CoreComponents.InternalMarshalizer(), + Hasher: ficf.argInterceptorFactory.CoreComponents.Hasher(), DataFactory: txFactory, Processor: txProcessor, Throttler: ficf.globalThrottler, @@ -656,6 +658,7 @@ func (ficf *fullSyncInterceptorsContainerFactory) createOneRewardTxInterceptor(t interceptors.ArgMultiDataInterceptor{ Topic: topic, Marshalizer: ficf.argInterceptorFactory.CoreComponents.InternalMarshalizer(), + Hasher: ficf.argInterceptorFactory.CoreComponents.Hasher(), DataFactory: txFactory, Processor: txProcessor, Throttler: ficf.globalThrottler, @@ -777,7 +780,7 @@ func (ficf *fullSyncInterceptorsContainerFactory) generateMetachainHeaderInterce return err } - //only one metachain header topic + // only one metachain header topic interceptor, err := interceptors.NewSingleDataInterceptor( interceptors.ArgSingleDataInterceptor{ Topic: identifierHdr, @@ -823,6 +826,7 @@ func (ficf *fullSyncInterceptorsContainerFactory) createOneTrieNodesInterceptor( interceptors.ArgMultiDataInterceptor{ Topic: topic, Marshalizer: ficf.argInterceptorFactory.CoreComponents.InternalMarshalizer(), + Hasher: ficf.argInterceptorFactory.CoreComponents.Hasher(), DataFactory: trieNodesFactory, Processor: trieNodesProcessor, Throttler: ficf.globalThrottler,