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 }