github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/p2p/enode/localnode_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 //</624450104371187712> 11 12 13 package enode 14 15 import ( 16 "testing" 17 18 "github.com/ethereum/go-ethereum/crypto" 19 "github.com/ethereum/go-ethereum/p2p/enr" 20 ) 21 22 func newLocalNodeForTesting() (*LocalNode, *DB) { 23 db, _ := OpenDB("") 24 key, _ := crypto.GenerateKey() 25 return NewLocalNode(db, key), db 26 } 27 28 func TestLocalNode(t *testing.T) { 29 ln, db := newLocalNodeForTesting() 30 defer db.Close() 31 32 if ln.Node().ID() != ln.ID() { 33 t.Fatal("inconsistent ID") 34 } 35 36 ln.Set(enr.WithEntry("x", uint(3))) 37 var x uint 38 if err := ln.Node().Load(enr.WithEntry("x", &x)); err != nil { 39 t.Fatal("can't load entry 'x':", err) 40 } else if x != 3 { 41 t.Fatal("wrong value for entry 'x':", x) 42 } 43 } 44 45 func TestLocalNodeSeqPersist(t *testing.T) { 46 ln, db := newLocalNodeForTesting() 47 defer db.Close() 48 49 if s := ln.Node().Seq(); s != 1 { 50 t.Fatalf("wrong initial seq %d, want 1", s) 51 } 52 ln.Set(enr.WithEntry("x", uint(1))) 53 if s := ln.Node().Seq(); s != 2 { 54 t.Fatalf("wrong seq %d after set, want 2", s) 55 } 56 57 //创建一个新实例,它应该重新加载序列号。 58 //因为新的记录是 59 //创建时不带“X”项。 60 ln2 := NewLocalNode(db, ln.key) 61 if s := ln2.Node().Seq(); s != 3 { 62 t.Fatalf("wrong seq %d on new instance, want 3", s) 63 } 64 65 //在同一数据库上使用不同的节点键创建新实例。 66 //这将重置序列号。 67 key, _ := crypto.GenerateKey() 68 ln3 := NewLocalNode(db, key) 69 if s := ln3.Node().Seq(); s != 1 { 70 t.Fatalf("wrong seq %d on instance with changed key, want 1", s) 71 } 72 } 73