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