github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/p2p/enode/idscheme_test.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:41</date> 10 //</624450104270524416> 11 12 13 package enode 14 15 import ( 16 "bytes" 17 "crypto/ecdsa" 18 "encoding/hex" 19 "math/big" 20 "testing" 21 22 "github.com/ethereum/go-ethereum/crypto" 23 "github.com/ethereum/go-ethereum/p2p/enr" 24 "github.com/ethereum/go-ethereum/rlp" 25 "github.com/stretchr/testify/assert" 26 "github.com/stretchr/testify/require" 27 ) 28 29 var ( 30 privkey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") 31 pubkey = &privkey.PublicKey 32 ) 33 34 func TestEmptyNodeID(t *testing.T) { 35 var r enr.Record 36 if addr := ValidSchemes.NodeAddr(&r); addr != nil { 37 t.Errorf("wrong address on empty record: got %v, want %v", addr, nil) 38 } 39 40 require.NoError(t, SignV4(&r, privkey)) 41 expected := "a448f24c6d18e575453db13171562b71999873db5b286df957af199ec94617f7" 42 assert.Equal(t, expected, hex.EncodeToString(ValidSchemes.NodeAddr(&r))) 43 } 44 45 //检查签名失败是否使记录保持不变。 46 func TestSignError(t *testing.T) { 47 invalidKey := &ecdsa.PrivateKey{D: new(big.Int), PublicKey: *pubkey} 48 49 var r enr.Record 50 emptyEnc, _ := rlp.EncodeToBytes(&r) 51 if err := SignV4(&r, invalidKey); err == nil { 52 t.Fatal("expected error from SignV4") 53 } 54 newEnc, _ := rlp.EncodeToBytes(&r) 55 if !bytes.Equal(newEnc, emptyEnc) { 56 t.Fatal("record modified even though signing failed") 57 } 58 } 59 60 //testgetsetsecp256k1测试secp256k1密钥的编码/解码和设置/获取。 61 func TestGetSetSecp256k1(t *testing.T) { 62 var r enr.Record 63 if err := SignV4(&r, privkey); err != nil { 64 t.Fatal(err) 65 } 66 67 var pk Secp256k1 68 require.NoError(t, r.Load(&pk)) 69 assert.EqualValues(t, pubkey, &pk) 70 } 71