github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/p2p/options_test.go (about)

     1  package p2p
     2  
     3  import (
     4  	"crypto/rand"
     5  	"encoding/hex"
     6  	"io/ioutil"
     7  	"net"
     8  	"testing"
     9  
    10  	gethCrypto "github.com/ethereum/go-ethereum/crypto"
    11  	"github.com/ethereum/go-ethereum/p2p/enode"
    12  	"github.com/ethereum/go-ethereum/p2p/enr"
    13  	"github.com/libp2p/go-libp2p-core/crypto"
    14  	"github.com/prysmaticlabs/prysm/shared/params"
    15  	"github.com/prysmaticlabs/prysm/shared/testutil/assert"
    16  	"github.com/prysmaticlabs/prysm/shared/testutil/require"
    17  )
    18  
    19  func TestPrivateKeyLoading(t *testing.T) {
    20  	file, err := ioutil.TempFile(t.TempDir(), "key")
    21  	require.NoError(t, err)
    22  	key, _, err := crypto.GenerateSecp256k1Key(rand.Reader)
    23  	require.NoError(t, err, "Could not generate key")
    24  	raw, err := key.Raw()
    25  	if err != nil {
    26  		panic(err)
    27  	}
    28  	out := hex.EncodeToString(raw)
    29  
    30  	err = ioutil.WriteFile(file.Name(), []byte(out), params.BeaconIoConfig().ReadWritePermissions)
    31  	require.NoError(t, err, "Could not write key to file")
    32  	log.WithField("file", file.Name()).WithField("key", out).Info("Wrote key to file")
    33  	cfg := &Config{
    34  		PrivateKey: file.Name(),
    35  	}
    36  	pKey, err := privKey(cfg)
    37  	require.NoError(t, err, "Could not apply option")
    38  	newPkey := convertToInterfacePrivkey(pKey)
    39  	rawBytes, err := key.Raw()
    40  	require.NoError(t, err)
    41  	newRaw, err := newPkey.Raw()
    42  	require.NoError(t, err)
    43  	assert.DeepEqual(t, rawBytes, newRaw, "Private keys do not match")
    44  }
    45  
    46  func TestIPV6Support(t *testing.T) {
    47  	key, err := gethCrypto.GenerateKey()
    48  	require.NoError(t, err)
    49  	db, err := enode.OpenDB("")
    50  	if err != nil {
    51  		log.Error("could not open node's peer database")
    52  	}
    53  	lNode := enode.NewLocalNode(db, key)
    54  	mockIPV6 := net.IP{0xff, 0x02, 0xAA, 0, 0x1F, 0, 0x2E, 0, 0, 0x36, 0x45, 0, 0, 0, 0, 0x02}
    55  	lNode.Set(enr.IP(mockIPV6))
    56  	ma, err := convertToSingleMultiAddr(lNode.Node())
    57  	if err != nil {
    58  		t.Fatal(err)
    59  	}
    60  	ipv6Exists := false
    61  	for _, p := range ma.Protocols() {
    62  		if p.Name == "ip4" {
    63  			t.Error("Got ip4 address instead of ip6")
    64  		}
    65  		if p.Name == "ip6" {
    66  			ipv6Exists = true
    67  		}
    68  	}
    69  	if !ipv6Exists {
    70  		t.Error("Multiaddress did not have ipv6 protocol")
    71  	}
    72  }