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  }