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  }