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] }