prysm-pulse/tools/bootnode/bootnode_test.go
Nishant Das 171e5007c5
Update Discv5 to the Latest Version (#3392)
* update workspace

* change to new version

* gaz

* set keys

* try more things

* finally fixed all tests

* fix bootnode

* Update beacon-chain/p2p/discovery.go

Co-Authored-By: Preston Van Loon <preston@prysmaticlabs.com>

* preston's and raul's review

* add http server

* add tool

* add image

* change comment

* add multiaddr comment

* lint

* cosmetic changes

* fix docker

* remove dep

* preston's requested changes
2019-09-07 00:50:20 +05:30

89 lines
2.4 KiB
Go

package main
import (
"crypto/ecdsa"
"crypto/rand"
"testing"
"time"
"github.com/btcsuite/btcd/btcec"
"github.com/ethereum/go-ethereum/p2p/discover"
"github.com/ethereum/go-ethereum/p2p/enode"
"github.com/libp2p/go-libp2p-core/crypto"
"github.com/prysmaticlabs/prysm/shared/iputils"
_ "go.uber.org/automaxprocs"
)
func TestBootnode_OK(t *testing.T) {
ipAddr, err := iputils.ExternalIPv4()
if err != nil {
t.Fatal(err)
}
cfg := discover.Config{
PrivateKey: extractPrivateKey(),
}
listener := createListener(ipAddr, 4000, cfg)
defer listener.Close()
cfg.PrivateKey = extractPrivateKey()
bootNode, err := enode.Parse(enode.ValidSchemes, listener.Self().String())
if err != nil {
t.Fatal(err)
}
cfg.Bootnodes = []*enode.Node{bootNode}
listener2 := createListener(ipAddr, 4001, cfg)
defer listener2.Close()
// test that both the nodes have the other peer stored in their local table.
listenerNode := listener.Self()
listenerNode2 := listener2.Self()
time.Sleep(1 * time.Second)
nodes := listener.Lookup(listenerNode2.ID())
if len(nodes) == 0 {
t.Fatalf("Length of nodes stored in table is not expected. Wanted to be more than %d but got %d", 0, len(nodes))
}
if nodes[0].ID() != listenerNode2.ID() {
t.Errorf("Wanted node ID of %s but got %s", listenerNode2.ID(), nodes[1].ID())
}
nodes = listener2.Lookup(listenerNode.ID())
if len(nodes) == 0 {
t.Errorf("Length of nodes stored in table is not expected. Wanted to be more than %d but got %d", 0, len(nodes))
}
if nodes[0].ID() != listenerNode.ID() {
t.Errorf("Wanted node ID of %s but got %s", listenerNode.ID(), nodes[1].ID())
}
}
func TestPrivateKey_ParsesCorrectly(t *testing.T) {
privKey, _, err := crypto.GenerateSecp256k1Key(rand.Reader)
if err != nil {
t.Fatal(err)
}
marshalledKey, err := crypto.MarshalPrivateKey(privKey)
if err != nil {
t.Fatal(err)
}
encodedKey := crypto.ConfigEncodeKey(marshalledKey)
*privateKey = encodedKey
extractedKey := extractPrivateKey()
rawKey := (*ecdsa.PrivateKey)((*btcec.PrivateKey)(privKey.(*crypto.Secp256k1PrivateKey)))
r, s, err := ecdsa.Sign(rand.Reader, extractedKey, []byte{'t', 'e', 's', 't'})
if err != nil {
t.Fatal(err)
}
isVerified := ecdsa.Verify(&rawKey.PublicKey, []byte{'t', 'e', 's', 't'}, r, s)
if !isVerified {
t.Error("Unmarshalled key is not the same as the key that was given to the function")
}
*privateKey = ""
}