github.com/status-im/status-go@v1.1.0/services/ext/mailservers/utils_test.go (about) 1 package mailservers 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/stretchr/testify/require" 8 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 TestGetFirstConnected(t *testing.T) { 16 numPeers := 3 17 nodes := make([]*enode.Node, numPeers) 18 peers := make([]*p2p.Peer, numPeers) 19 nodesMap := getMapWithRandomNodes(t, numPeers) 20 i := 0 21 for _, node := range nodesMap { 22 nodes[i] = node 23 peers[i] = p2p.NewPeer(node.ID(), node.ID().String(), nil) 24 i++ 25 } 26 store := NewPeerStore(newInMemCache(t)) 27 provider := fakePeerProvider{peers} 28 _, err := GetFirstConnected(provider, store) 29 require.EqualError(t, ErrNoConnected, err.Error()) 30 require.NoError(t, store.Update(nodes)) 31 node, err := GetFirstConnected(provider, store) 32 require.NoError(t, err) 33 require.Contains(t, nodesMap, types.EnodeID(node.ID())) 34 } 35 36 type trackingNodeNotifee struct { 37 calls [][]*enode.Node 38 } 39 40 func (t *trackingNodeNotifee) Notify(nodes []*enode.Node) { 41 t.calls = append(t.calls, nodes) 42 } 43 44 func TestEnsureNewRecordsAddedFirst(t *testing.T) { 45 notifee := new(trackingNodeNotifee) 46 store := NewPeerStore(newInMemCache(t)) 47 nodes := make([]*enode.Node, 3) 48 fillWithRandomNodes(t, nodes) 49 require.NoError(t, store.Update(nodes)) 50 record := NewPeerRecord(nodes[0]) 51 record.LastUsed = time.Now() 52 require.NoError(t, store.cache.UpdateRecord(record)) 53 require.NoError(t, EnsureUsedRecordsAddedFirst(store, notifee)) 54 require.Len(t, notifee.calls, 2) 55 require.Len(t, notifee.calls[0], 1) 56 require.Equal(t, nodes[0].ID(), notifee.calls[0][0].ID()) 57 require.Len(t, notifee.calls[1], 3) 58 }