github.com/badrootd/nibiru-cometbft@v0.37.5-0.20240307173500-2a75559eee9b/test/fuzz/p2p/pex/reactor_receive.go (about)

     1  package pex
     2  
     3  import (
     4  	"net"
     5  
     6  	"github.com/badrootd/nibiru-cometbft/config"
     7  	"github.com/badrootd/nibiru-cometbft/crypto/ed25519"
     8  	"github.com/badrootd/nibiru-cometbft/libs/log"
     9  	"github.com/badrootd/nibiru-cometbft/libs/service"
    10  	"github.com/badrootd/nibiru-cometbft/p2p"
    11  	"github.com/badrootd/nibiru-cometbft/p2p/pex"
    12  	"github.com/badrootd/nibiru-cometbft/version"
    13  	"github.com/cosmos/gogoproto/proto"
    14  )
    15  
    16  var (
    17  	pexR *pex.Reactor
    18  	peer p2p.Peer
    19  )
    20  
    21  func init() {
    22  	addrB := pex.NewAddrBook("./testdata/addrbook1", false)
    23  	pexR := pex.NewReactor(addrB, &pex.ReactorConfig{SeedMode: false})
    24  	if pexR == nil {
    25  		panic("NewReactor returned nil")
    26  	}
    27  	pexR.SetLogger(log.NewNopLogger())
    28  	peer := newFuzzPeer()
    29  	pexR.AddPeer(peer)
    30  
    31  }
    32  
    33  func Fuzz(data []byte) int {
    34  	// MakeSwitch uses log.TestingLogger which can't be executed in init()
    35  	cfg := config.DefaultP2PConfig()
    36  	cfg.PexReactor = true
    37  	sw := p2p.MakeSwitch(cfg, 0, "127.0.0.1", "123.123.123", func(i int, sw *p2p.Switch) *p2p.Switch {
    38  		return sw
    39  	})
    40  	pexR.SetSwitch(sw)
    41  
    42  	var msg proto.Message
    43  	err := proto.Unmarshal(data, msg)
    44  	if err != nil {
    45  		return 0
    46  	}
    47  	pexR.ReceiveEnvelope(p2p.Envelope{
    48  		ChannelID: pex.PexChannel,
    49  		Src:       peer,
    50  		Message:   msg,
    51  	})
    52  
    53  	return 1
    54  }
    55  
    56  type fuzzPeer struct {
    57  	*service.BaseService
    58  	m map[string]interface{}
    59  }
    60  
    61  var _ p2p.Peer = (*fuzzPeer)(nil)
    62  
    63  func newFuzzPeer() *fuzzPeer {
    64  	fp := &fuzzPeer{m: make(map[string]interface{})}
    65  	fp.BaseService = service.NewBaseService(nil, "fuzzPeer", fp)
    66  	return fp
    67  }
    68  
    69  var privKey = ed25519.GenPrivKey()
    70  var nodeID = p2p.PubKeyToID(privKey.PubKey())
    71  var defaultNodeInfo = p2p.DefaultNodeInfo{
    72  	ProtocolVersion: p2p.NewProtocolVersion(
    73  		version.P2PProtocol,
    74  		version.BlockProtocol,
    75  		0,
    76  	),
    77  	DefaultNodeID: nodeID,
    78  	ListenAddr:    "0.0.0.0:98992",
    79  	Moniker:       "foo1",
    80  }
    81  
    82  func (fp *fuzzPeer) FlushStop()       {}
    83  func (fp *fuzzPeer) ID() p2p.ID       { return nodeID }
    84  func (fp *fuzzPeer) RemoteIP() net.IP { return net.IPv4(0, 0, 0, 0) }
    85  func (fp *fuzzPeer) RemoteAddr() net.Addr {
    86  	return &net.TCPAddr{IP: fp.RemoteIP(), Port: 98991, Zone: ""}
    87  }
    88  func (fp *fuzzPeer) IsOutbound() bool                    { return false }
    89  func (fp *fuzzPeer) IsPersistent() bool                  { return false }
    90  func (fp *fuzzPeer) CloseConn() error                    { return nil }
    91  func (fp *fuzzPeer) NodeInfo() p2p.NodeInfo              { return defaultNodeInfo }
    92  func (fp *fuzzPeer) Status() p2p.ConnectionStatus        { var cs p2p.ConnectionStatus; return cs }
    93  func (fp *fuzzPeer) SocketAddr() *p2p.NetAddress         { return p2p.NewNetAddress(fp.ID(), fp.RemoteAddr()) }
    94  func (fp *fuzzPeer) SendEnvelope(e p2p.Envelope) bool    { return true }
    95  func (fp *fuzzPeer) TrySendEnvelope(e p2p.Envelope) bool { return true }
    96  func (fp *fuzzPeer) Send(_ byte, _ []byte) bool          { return true }
    97  func (fp *fuzzPeer) TrySend(_ byte, _ []byte) bool       { return true }
    98  func (fp *fuzzPeer) Set(key string, value interface{})   { fp.m[key] = value }
    99  func (fp *fuzzPeer) Get(key string) interface{}          { return fp.m[key] }
   100  func (fp *fuzzPeer) GetRemovalFailed() bool              { return false }
   101  func (fp *fuzzPeer) SetRemovalFailed()                   {}