github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/p2p/testing/mock_peersprovider.go (about) 1 package testing 2 3 import ( 4 "context" 5 "sync" 6 7 "github.com/ethereum/go-ethereum/crypto" 8 "github.com/ethereum/go-ethereum/p2p/enode" 9 "github.com/ethereum/go-ethereum/p2p/enr" 10 "github.com/libp2p/go-libp2p-core/network" 11 "github.com/libp2p/go-libp2p-core/peer" 12 ma "github.com/multiformats/go-multiaddr" 13 "github.com/prysmaticlabs/prysm/beacon-chain/p2p/peers" 14 "github.com/prysmaticlabs/prysm/beacon-chain/p2p/peers/scorers" 15 pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" 16 log "github.com/sirupsen/logrus" 17 ) 18 19 // MockPeersProvider implements PeersProvider for testing. 20 type MockPeersProvider struct { 21 lock sync.Mutex 22 peers *peers.Status 23 } 24 25 // ClearPeers removes all known peers. 26 func (m *MockPeersProvider) ClearPeers() { 27 m.lock.Lock() 28 defer m.lock.Unlock() 29 m.peers = peers.NewStatus(context.Background(), &peers.StatusConfig{ 30 PeerLimit: 30, 31 ScorerParams: &scorers.Config{ 32 BadResponsesScorerConfig: &scorers.BadResponsesScorerConfig{ 33 Threshold: 5, 34 }, 35 }, 36 }) 37 } 38 39 // Peers provides access the peer status. 40 func (m *MockPeersProvider) Peers() *peers.Status { 41 m.lock.Lock() 42 defer m.lock.Unlock() 43 if m.peers == nil { 44 m.peers = peers.NewStatus(context.Background(), &peers.StatusConfig{ 45 PeerLimit: 30, 46 ScorerParams: &scorers.Config{ 47 BadResponsesScorerConfig: &scorers.BadResponsesScorerConfig{ 48 Threshold: 5, 49 }, 50 }, 51 }) 52 // Pretend we are connected to two peers 53 id0, err := peer.Decode("16Uiu2HAkyWZ4Ni1TpvDS8dPxsozmHY85KaiFjodQuV6Tz5tkHVeR") 54 if err != nil { 55 log.WithError(err).Debug("Cannot decode") 56 } 57 ma0, err := ma.NewMultiaddr("/ip4/213.202.254.180/tcp/13000") 58 if err != nil { 59 log.WithError(err).Debug("Cannot decode") 60 } 61 m.peers.Add(createENR(), id0, ma0, network.DirInbound) 62 m.peers.SetConnectionState(id0, peers.PeerConnected) 63 m.peers.SetChainState(id0, &pb.Status{FinalizedEpoch: 10}) 64 id1, err := peer.Decode("16Uiu2HAm4HgJ9N1o222xK61o7LSgToYWoAy1wNTJRkh9gLZapVAy") 65 if err != nil { 66 log.WithError(err).Debug("Cannot decode") 67 } 68 ma1, err := ma.NewMultiaddr("/ip4/52.23.23.253/tcp/30000/ipfs/QmfAgkmjiZNZhr2wFN9TwaRgHouMTBT6HELyzE5A3BT2wK/p2p-circuit") 69 if err != nil { 70 log.WithError(err).Debug("Cannot decode") 71 } 72 m.peers.Add(createENR(), id1, ma1, network.DirOutbound) 73 m.peers.SetConnectionState(id1, peers.PeerConnected) 74 m.peers.SetChainState(id1, &pb.Status{FinalizedEpoch: 11}) 75 } 76 return m.peers 77 } 78 79 func createENR() *enr.Record { 80 key, err := crypto.GenerateKey() 81 if err != nil { 82 log.Error(err) 83 } 84 db, err := enode.OpenDB("") 85 if err != nil { 86 log.Error("could not open node's peer database") 87 } 88 lNode := enode.NewLocalNode(db, key) 89 return lNode.Node().Record() 90 }