@@ -20,12 +20,12 @@ import (
2020 "context"
2121 "crypto/ecdsa"
2222 "errors"
23- "math/rand"
2423 "reflect"
2524 "testing"
2625 "time"
2726
2827 "github.com/davecgh/go-spew/spew"
28+ "github.com/ethereum/go-ethereum/common/hexutil"
2929 "github.com/ethereum/go-ethereum/common/mclock"
3030 "github.com/ethereum/go-ethereum/crypto"
3131 "github.com/ethereum/go-ethereum/internal/testlog"
@@ -34,23 +34,25 @@ import (
3434 "github.com/ethereum/go-ethereum/p2p/enr"
3535)
3636
37- const (
38- signingKeySeed = 0x111111
39- nodesSeed1 = 0x2945237
40- nodesSeed2 = 0x4567299
41- )
37+ var signingKeyForTesting , _ = crypto .ToECDSA (hexutil .MustDecode ("0xdc599867fc513f8f5e2c2c9c489cde5e71362d1d9ec6e693e0de063236ed1240" ))
4238
4339func TestClientSyncTree (t * testing.T ) {
40+ nodes := []string {
41+ "enr:-HW4QOFzoVLaFJnNhbgMoDXPnOvcdVuj7pDpqRvh6BRDO68aVi5ZcjB3vzQRZH2IcLBGHzo8uUN3snqmgTiE56CH3AMBgmlkgnY0iXNlY3AyNTZrMaECC2_24YYkYHEgdzxlSNKQEnHhuNAbNlMlWJxrJxbAFvA" ,
42+ "enr:-HW4QAggRauloj2SDLtIHN1XBkvhFZ1vtf1raYQp9TBW2RD5EEawDzbtSmlXUfnaHcvwOizhVYLtr7e6vw7NAf6mTuoCgmlkgnY0iXNlY3AyNTZrMaECjrXI8TLNXU0f8cthpAMxEshUyQlK-AM0PW2wfrnacNI" ,
43+ "enr:-HW4QLAYqmrwllBEnzWWs7I5Ev2IAs7x_dZlbYdRdMUx5EyKHDXp7AV5CkuPGUPdvbv1_Ms1CPfhcGCvSElSosZmyoqAgmlkgnY0iXNlY3AyNTZrMaECriawHKWdDRk2xeZkrOXBQ0dfMFLHY4eENZwdufn1S1o" ,
44+ }
45+
4446 r := mapResolver {
4547 "n" : "enrtree-root:v1 e=JWXYDBPXYWG6FX3GMDIBFA6CJ4 l=C7HRFPF3BLGF3YR4DY5KX3SMBE seq=1 sig=o908WmNp7LibOfPsr4btQwatZJ5URBr2ZAuxvK4UWHlsB9sUOTJQaGAlLPVAhM__XJesCHxLISo94z5Z2a463gA" ,
4648 "C7HRFPF3BLGF3YR4DY5KX3SMBE.n" : "enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@morenodes.example.org" ,
4749 "JWXYDBPXYWG6FX3GMDIBFA6CJ4.n" : "enrtree-branch:2XS2367YHAXJFGLZHVAWLQD4ZY,H4FHT4B454P6UXFD7JCYQ5PWDY,MHTDO6TMUBRIA2XWG5LUDACK24" ,
48- "2XS2367YHAXJFGLZHVAWLQD4ZY.n" : "enr:-HW4QOFzoVLaFJnNhbgMoDXPnOvcdVuj7pDpqRvh6BRDO68aVi5ZcjB3vzQRZH2IcLBGHzo8uUN3snqmgTiE56CH3AMBgmlkgnY0iXNlY3AyNTZrMaECC2_24YYkYHEgdzxlSNKQEnHhuNAbNlMlWJxrJxbAFvA" ,
49- "H4FHT4B454P6UXFD7JCYQ5PWDY.n" : "enr:-HW4QAggRauloj2SDLtIHN1XBkvhFZ1vtf1raYQp9TBW2RD5EEawDzbtSmlXUfnaHcvwOizhVYLtr7e6vw7NAf6mTuoCgmlkgnY0iXNlY3AyNTZrMaECjrXI8TLNXU0f8cthpAMxEshUyQlK-AM0PW2wfrnacNI" ,
50- "MHTDO6TMUBRIA2XWG5LUDACK24.n" : "enr:-HW4QLAYqmrwllBEnzWWs7I5Ev2IAs7x_dZlbYdRdMUx5EyKHDXp7AV5CkuPGUPdvbv1_Ms1CPfhcGCvSElSosZmyoqAgmlkgnY0iXNlY3AyNTZrMaECriawHKWdDRk2xeZkrOXBQ0dfMFLHY4eENZwdufn1S1o" ,
50+ "2XS2367YHAXJFGLZHVAWLQD4ZY.n" : nodes [ 0 ] ,
51+ "H4FHT4B454P6UXFD7JCYQ5PWDY.n" : nodes [ 1 ] ,
52+ "MHTDO6TMUBRIA2XWG5LUDACK24.n" : nodes [ 2 ] ,
5153 }
5254 var (
53- wantNodes = testNodes ( 0x29452 , 3 )
55+ wantNodes = sortByID ( parseNodes ( nodes ) )
5456 wantLinks = []string {"enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@morenodes.example.org" }
5557 wantSeq = uint (1 )
5658 )
@@ -60,7 +62,7 @@ func TestClientSyncTree(t *testing.T) {
6062 if err != nil {
6163 t .Fatal ("sync error:" , err )
6264 }
63- if ! reflect .DeepEqual (sortByID (stree .Nodes ()), sortByID ( wantNodes ) ) {
65+ if ! reflect .DeepEqual (sortByID (stree .Nodes ()), wantNodes ) {
6466 t .Errorf ("wrong nodes in synced tree:\n have %v\n want %v" , spew .Sdump (stree .Nodes ()), spew .Sdump (wantNodes ))
6567 }
6668 if ! reflect .DeepEqual (stree .Links (), wantLinks ) {
@@ -80,7 +82,7 @@ func TestClientSyncTreeBadNode(t *testing.T) {
8082 // tree, _ := MakeTree(3, nil, []string{"enrtree://AM5FCQLWIZX2QFPNJAP7VUERCCRNGRHWZG3YYHIUV7BVDQ5FDPRT2@morenodes.example.org"})
8183 // tree.entries[badHash] = &b
8284 // tree.root.eroot = badHash
83- // url, _ := tree.Sign(testKey(signingKeySeed) , "n")
85+ // url, _ := tree.Sign(signingKeyForTesting , "n")
8486 // fmt.Println(url)
8587 // fmt.Printf("%#v\n", tree.ToTXT("n"))
8688
@@ -99,9 +101,13 @@ func TestClientSyncTreeBadNode(t *testing.T) {
99101
100102// This test checks that randomIterator finds all entries.
101103func TestIterator (t * testing.T ) {
102- nodes := testNodes (nodesSeed1 , 30 )
103- tree , url := makeTestTree ("n" , nodes , nil )
104- r := mapResolver (tree .ToTXT ("n" ))
104+ var (
105+ keys = testKeys (30 )
106+ nodes = testNodes (keys )
107+ tree , url = makeTestTree ("n" , nodes , nil )
108+ r = mapResolver (tree .ToTXT ("n" ))
109+ )
110+
105111 c := NewClient (Config {
106112 Resolver : r ,
107113 Logger : testlog .Logger (t , log .LvlTrace ),
@@ -132,8 +138,12 @@ func TestIteratorCloseWithoutNext(t *testing.T) {
132138
133139// This test checks if closing randomIterator races.
134140func TestIteratorClose (t * testing.T ) {
135- nodes := testNodes (nodesSeed1 , 500 )
136- tree1 , url1 := makeTestTree ("t1" , nodes , nil )
141+ var (
142+ keys = testKeys (500 )
143+ nodes = testNodes (keys )
144+ tree1 , url1 = makeTestTree ("t1" , nodes , nil )
145+ )
146+
137147 c := NewClient (Config {Resolver : newMapResolver (tree1 .ToTXT ("t1" ))})
138148 it , err := c .NewIterator (url1 )
139149 if err != nil {
@@ -155,9 +165,13 @@ func TestIteratorClose(t *testing.T) {
155165
156166// This test checks that randomIterator traverses linked trees as well as explicitly added trees.
157167func TestIteratorLinks (t * testing.T ) {
158- nodes := testNodes (nodesSeed1 , 40 )
159- tree1 , url1 := makeTestTree ("t1" , nodes [:10 ], nil )
160- tree2 , url2 := makeTestTree ("t2" , nodes [10 :], []string {url1 })
168+ var (
169+ keys = testKeys (40 )
170+ nodes = testNodes (keys )
171+ tree1 , url1 = makeTestTree ("t1" , nodes [:10 ], nil )
172+ tree2 , url2 = makeTestTree ("t2" , nodes [10 :], []string {url1 })
173+ )
174+
161175 c := NewClient (Config {
162176 Resolver : newMapResolver (tree1 .ToTXT ("t1" ), tree2 .ToTXT ("t2" )),
163177 Logger : testlog .Logger (t , log .LvlTrace ),
@@ -176,7 +190,8 @@ func TestIteratorLinks(t *testing.T) {
176190func TestIteratorNodeUpdates (t * testing.T ) {
177191 var (
178192 clock = new (mclock.Simulated )
179- nodes = testNodes (nodesSeed1 , 30 )
193+ keys = testKeys (30 )
194+ nodes = testNodes (keys )
180195 resolver = newMapResolver ()
181196 c = NewClient (Config {
182197 Resolver : resolver ,
@@ -197,7 +212,7 @@ func TestIteratorNodeUpdates(t *testing.T) {
197212 checkIterator (t , it , nodes [:25 ])
198213
199214 // Ensure RandomNode returns the new nodes after the tree is updated.
200- updateSomeNodes (nodesSeed1 , nodes )
215+ updateSomeNodes (keys , nodes )
201216 tree2 , _ := makeTestTree ("n" , nodes , nil )
202217 resolver .clear ()
203218 resolver .add (tree2 .ToTXT ("n" ))
@@ -213,7 +228,8 @@ func TestIteratorNodeUpdates(t *testing.T) {
213228func TestIteratorRootRecheckOnFail (t * testing.T ) {
214229 var (
215230 clock = new (mclock.Simulated )
216- nodes = testNodes (nodesSeed1 , 30 )
231+ keys = testKeys (30 )
232+ nodes = testNodes (keys )
217233 resolver = newMapResolver ()
218234 c = NewClient (Config {
219235 Resolver : resolver ,
@@ -237,7 +253,7 @@ func TestIteratorRootRecheckOnFail(t *testing.T) {
237253 checkIterator (t , it , nodes [:25 ])
238254
239255 // Ensure RandomNode returns the new nodes after the tree is updated.
240- updateSomeNodes (nodesSeed1 , nodes )
256+ updateSomeNodes (keys , nodes )
241257 tree2 , _ := makeTestTree ("n" , nodes , nil )
242258 resolver .clear ()
243259 resolver .add (tree2 .ToTXT ("n" ))
@@ -250,7 +266,8 @@ func TestIteratorRootRecheckOnFail(t *testing.T) {
250266func TestIteratorEmptyTree (t * testing.T ) {
251267 var (
252268 clock = new (mclock.Simulated )
253- nodes = testNodes (nodesSeed1 , 1 )
269+ keys = testKeys (1 )
270+ nodes = testNodes (keys )
254271 resolver = newMapResolver ()
255272 c = NewClient (Config {
256273 Resolver : resolver ,
@@ -265,7 +282,7 @@ func TestIteratorEmptyTree(t *testing.T) {
265282 resolver .add (tree1 .ToTXT ("n" ))
266283
267284 // Start the iterator.
268- node := make (chan * enode.Node )
285+ node := make (chan * enode.Node , 1 )
269286 it , err := c .NewIterator (url )
270287 if err != nil {
271288 t .Fatal (err )
@@ -294,8 +311,7 @@ func TestIteratorEmptyTree(t *testing.T) {
294311}
295312
296313// updateSomeNodes applies ENR updates to some of the given nodes.
297- func updateSomeNodes (keySeed int64 , nodes []* enode.Node ) {
298- keys := testKeys (nodesSeed1 , len (nodes ))
314+ func updateSomeNodes (keys []* ecdsa.PrivateKey , nodes []* enode.Node ) {
299315 for i , n := range nodes [:len (nodes )/ 2 ] {
300316 r := n .Record ()
301317 r .Set (enr.IP {127 , 0 , 0 , 1 })
@@ -311,7 +327,8 @@ func updateSomeNodes(keySeed int64, nodes []*enode.Node) {
311327func TestIteratorLinkUpdates (t * testing.T ) {
312328 var (
313329 clock = new (mclock.Simulated )
314- nodes = testNodes (nodesSeed1 , 30 )
330+ keys = testKeys (30 )
331+ nodes = testNodes (keys )
315332 resolver = newMapResolver ()
316333 c = NewClient (Config {
317334 Resolver : resolver ,
@@ -384,19 +401,18 @@ func makeTestTree(domain string, nodes []*enode.Node, links []string) (*Tree, st
384401 if err != nil {
385402 panic (err )
386403 }
387- url , err := tree .Sign (testKey ( signingKeySeed ) , domain )
404+ url , err := tree .Sign (signingKeyForTesting , domain )
388405 if err != nil {
389406 panic (err )
390407 }
391408 return tree , url
392409}
393410
394411// testKeys creates deterministic private keys for testing.
395- func testKeys (seed int64 , n int ) []* ecdsa.PrivateKey {
396- rand := rand .New (rand .NewSource (seed ))
412+ func testKeys (n int ) []* ecdsa.PrivateKey {
397413 keys := make ([]* ecdsa.PrivateKey , n )
398414 for i := 0 ; i < n ; i ++ {
399- key , err := ecdsa .GenerateKey (crypto . S256 (), rand )
415+ key , err := crypto .GenerateKey ()
400416 if err != nil {
401417 panic ("can't generate key: " + err .Error ())
402418 }
@@ -405,13 +421,8 @@ func testKeys(seed int64, n int) []*ecdsa.PrivateKey {
405421 return keys
406422}
407423
408- func testKey (seed int64 ) * ecdsa.PrivateKey {
409- return testKeys (seed , 1 )[0 ]
410- }
411-
412- func testNodes (seed int64 , n int ) []* enode.Node {
413- keys := testKeys (seed , n )
414- nodes := make ([]* enode.Node , n )
424+ func testNodes (keys []* ecdsa.PrivateKey ) []* enode.Node {
425+ nodes := make ([]* enode.Node , len (keys ))
415426 for i , key := range keys {
416427 record := new (enr.Record )
417428 record .SetSeq (uint64 (i ))
@@ -425,10 +436,6 @@ func testNodes(seed int64, n int) []*enode.Node {
425436 return nodes
426437}
427438
428- func testNode (seed int64 ) * enode.Node {
429- return testNodes (seed , 1 )[0 ]
430- }
431-
432439type mapResolver map [string ]string
433440
434441func newMapResolver (maps ... map [string ]string ) mapResolver {
@@ -457,3 +464,15 @@ func (mr mapResolver) LookupTXT(ctx context.Context, name string) ([]string, err
457464 }
458465 return nil , errors .New ("not found" )
459466}
467+
468+ func parseNodes (rec []string ) []* enode.Node {
469+ var ns []* enode.Node
470+ for _ , r := range rec {
471+ var n enode.Node
472+ if err := n .UnmarshalText ([]byte (r )); err != nil {
473+ panic (err )
474+ }
475+ ns = append (ns , & n )
476+ }
477+ return ns
478+ }
0 commit comments