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() {}