github.com/status-im/status-go@v1.1.0/services/ext/mailservers/peerstore_test.go (about) 1 package mailservers 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 8 "github.com/ethereum/go-ethereum/crypto" 9 "github.com/ethereum/go-ethereum/p2p" 10 "github.com/ethereum/go-ethereum/p2p/enode" 11 12 "github.com/status-im/status-go/eth-node/types" 13 ) 14 15 func RandomNode() (*enode.Node, error) { 16 pkey, err := crypto.GenerateKey() 17 if err != nil { 18 return nil, err 19 } 20 return enode.NewV4(&pkey.PublicKey, nil, 0, 0), nil 21 } 22 23 func TestUpdateResetsInternalStorage(t *testing.T) { 24 store := NewPeerStore(newInMemCache(t)) 25 r1, err := RandomNode() 26 require.NoError(t, err) 27 r2, err := RandomNode() 28 require.NoError(t, err) 29 require.NoError(t, store.Update([]*enode.Node{r1, r2})) 30 require.True(t, store.Exist(types.EnodeID(r1.ID()))) 31 require.True(t, store.Exist(types.EnodeID(r2.ID()))) 32 require.NoError(t, store.Update([]*enode.Node{r2})) 33 require.False(t, store.Exist(types.EnodeID(r1.ID()))) 34 require.True(t, store.Exist(types.EnodeID(r2.ID()))) 35 } 36 37 func TestGetNodeByID(t *testing.T) { 38 store := NewPeerStore(newInMemCache(t)) 39 r1, err := RandomNode() 40 require.NoError(t, err) 41 require.NoError(t, store.Update([]*enode.Node{r1})) 42 require.Equal(t, r1, store.Get(types.EnodeID(r1.ID()))) 43 require.Nil(t, store.Get(types.EnodeID{1})) 44 } 45 46 type fakePeerProvider struct { 47 peers []*p2p.Peer 48 } 49 50 func (f fakePeerProvider) Peers() []*p2p.Peer { 51 return f.peers 52 } 53 54 func TestNoConnected(t *testing.T) { 55 provider := fakePeerProvider{} 56 store := NewPeerStore(newInMemCache(t)) 57 _, err := GetFirstConnected(provider, store) 58 require.EqualError(t, ErrNoConnected, err.Error()) 59 }