github.com/prysmaticlabs/prysm@v1.4.4/tools/bootnode/bootnode_test.go (about)

     1  package main
     2  
     3  import (
     4  	"crypto/ecdsa"
     5  	"crypto/rand"
     6  	"fmt"
     7  	"io/ioutil"
     8  	"testing"
     9  	"time"
    10  
    11  	"github.com/ethereum/go-ethereum/p2p/discover"
    12  	"github.com/ethereum/go-ethereum/p2p/enode"
    13  	"github.com/libp2p/go-libp2p-core/crypto"
    14  	"github.com/prysmaticlabs/prysm/shared/iputils"
    15  	_ "github.com/prysmaticlabs/prysm/shared/maxprocs"
    16  	"github.com/prysmaticlabs/prysm/shared/testutil/assert"
    17  	"github.com/prysmaticlabs/prysm/shared/testutil/require"
    18  	"github.com/sirupsen/logrus"
    19  )
    20  
    21  func TestMain(m *testing.M) {
    22  	logrus.SetLevel(logrus.DebugLevel)
    23  	logrus.SetOutput(ioutil.Discard)
    24  
    25  	m.Run()
    26  }
    27  
    28  func TestBootnode_OK(t *testing.T) {
    29  	ipAddr, err := iputils.ExternalIPv4()
    30  	require.NoError(t, err)
    31  	privKey := extractPrivateKey()
    32  	cfg := discover.Config{
    33  		PrivateKey: privKey,
    34  	}
    35  	listener := createListener(ipAddr, 4000, cfg)
    36  	defer listener.Close()
    37  
    38  	cfg.PrivateKey = extractPrivateKey()
    39  	bootNode, err := enode.Parse(enode.ValidSchemes, listener.Self().String())
    40  	require.NoError(t, err)
    41  	cfg.Bootnodes = []*enode.Node{bootNode}
    42  	listener2 := createListener(ipAddr, 4001, cfg)
    43  	defer listener2.Close()
    44  
    45  	// test that both the nodes have the other peer stored in their local table.
    46  	listenerNode := listener.Self()
    47  	listenerNode2 := listener2.Self()
    48  
    49  	time.Sleep(1 * time.Second)
    50  
    51  	nodes := listener.Lookup(listenerNode2.ID())
    52  	assert.NotEqual(t, 0, len(nodes), "Length of nodes stored in table is not expected")
    53  	assert.Equal(t, listenerNode2.ID(), nodes[0].ID())
    54  
    55  	nodes = listener2.Lookup(listenerNode.ID())
    56  	assert.NotEqual(t, 0, len(nodes), "Length of nodes stored in table is not expected")
    57  	assert.Equal(t, listenerNode.ID(), nodes[0].ID())
    58  }
    59  
    60  func TestPrivateKey_ParsesCorrectly(t *testing.T) {
    61  	privKey, _, err := crypto.GenerateSecp256k1Key(rand.Reader)
    62  	require.NoError(t, err)
    63  
    64  	pk, err := privKey.Raw()
    65  	require.NoError(t, err)
    66  	*privateKey = fmt.Sprintf("%x", pk)
    67  
    68  	extractedKey := extractPrivateKey()
    69  
    70  	rawKey := (*ecdsa.PrivateKey)(privKey.(*crypto.Secp256k1PrivateKey))
    71  
    72  	r, s, err := ecdsa.Sign(rand.Reader, extractedKey, []byte{'t', 'e', 's', 't'})
    73  	require.NoError(t, err)
    74  
    75  	isVerified := ecdsa.Verify(&rawKey.PublicKey, []byte{'t', 'e', 's', 't'}, r, s)
    76  	assert.Equal(t, true, isVerified, "Unmarshalled key is not the same as the key that was given to the function")
    77  	*privateKey = ""
    78  }