github.com/number571/tendermint@v0.34.11-gost/test/fuzz/p2p/pex/reactor_receive.go (about) 1 package pex 2 3 import ( 4 "net" 5 6 "github.com/number571/tendermint/config" 7 "github.com/number571/tendermint/crypto/gost512" 8 "github.com/number571/tendermint/internal/p2p" 9 "github.com/number571/tendermint/internal/p2p/pex" 10 "github.com/number571/tendermint/libs/log" 11 "github.com/number571/tendermint/libs/service" 12 "github.com/number571/tendermint/types" 13 "github.com/number571/tendermint/version" 14 ) 15 16 var ( 17 pexR *pex.Reactor 18 peer p2p.Peer 19 logger = log.MustNewDefaultLogger(log.LogFormatPlain, log.LogLevelInfo, false) 20 ) 21 22 func init() { 23 addrB := pex.NewAddrBook("./testdata/addrbook1", false) 24 pexR = pex.NewReactor(addrB, &pex.ReactorConfig{SeedMode: false}) 25 pexR.SetLogger(logger) 26 peer = newFuzzPeer() 27 pexR.AddPeer(peer) 28 29 cfg := config.DefaultP2PConfig() 30 cfg.PexReactor = true 31 sw := p2p.MakeSwitch(cfg, 0, "127.0.0.1", "123.123.123", func(i int, sw *p2p.Switch) *p2p.Switch { 32 return sw 33 }, logger) 34 pexR.SetSwitch(sw) 35 } 36 37 func Fuzz(data []byte) int { 38 if len(data) == 0 { 39 return -1 40 } 41 42 pexR.Receive(pex.PexChannel, peer, data) 43 44 if !peer.IsRunning() { 45 // do not increase priority for msgs which lead to peer being stopped 46 return 0 47 } 48 49 return 1 50 } 51 52 type fuzzPeer struct { 53 *service.BaseService 54 m map[string]interface{} 55 } 56 57 var _ p2p.Peer = (*fuzzPeer)(nil) 58 59 func newFuzzPeer() *fuzzPeer { 60 fp := &fuzzPeer{m: make(map[string]interface{})} 61 fp.BaseService = service.NewBaseService(nil, "fuzzPeer", fp) 62 return fp 63 } 64 65 var privKey = gost512.GenPrivKey() 66 var nodeID = types.NodeIDFromPubKey(privKey.PubKey()) 67 var defaultNodeInfo = types.NodeInfo{ 68 ProtocolVersion: types.ProtocolVersion{ 69 P2P: version.P2PProtocol, 70 Block: version.BlockProtocol, 71 App: 0, 72 }, 73 NodeID: nodeID, 74 ListenAddr: "127.0.0.1:0", 75 Moniker: "foo1", 76 } 77 78 func (fp *fuzzPeer) FlushStop() {} 79 func (fp *fuzzPeer) ID() types.NodeID { return nodeID } 80 func (fp *fuzzPeer) RemoteIP() net.IP { return net.IPv4(198, 163, 190, 214) } 81 func (fp *fuzzPeer) RemoteAddr() net.Addr { 82 return &net.TCPAddr{IP: fp.RemoteIP(), Port: 26656, Zone: ""} 83 } 84 func (fp *fuzzPeer) IsOutbound() bool { return false } 85 func (fp *fuzzPeer) IsPersistent() bool { return false } 86 func (fp *fuzzPeer) CloseConn() error { return nil } 87 func (fp *fuzzPeer) NodeInfo() types.NodeInfo { return defaultNodeInfo } 88 func (fp *fuzzPeer) Status() p2p.ConnectionStatus { var cs p2p.ConnectionStatus; return cs } 89 func (fp *fuzzPeer) SocketAddr() *p2p.NetAddress { 90 return types.NewNetAddress(fp.ID(), fp.RemoteAddr()) 91 } 92 func (fp *fuzzPeer) Send(byte, []byte) bool { return true } 93 func (fp *fuzzPeer) TrySend(byte, []byte) bool { return true } 94 func (fp *fuzzPeer) Set(key string, value interface{}) { fp.m[key] = value } 95 func (fp *fuzzPeer) Get(key string) interface{} { return fp.m[key] }