Skip to content

Commit fc3916e

Browse files
fjlchris-j-h
authored andcommitted
p2p/dnsdisc: fix tests with Go 1.20 (#26690)
(cherry picked from commit 101587b)
1 parent e093d4c commit fc3916e

File tree

2 files changed

+74
-48
lines changed

2 files changed

+74
-48
lines changed

p2p/dnsdisc/client_test.go

Lines changed: 62 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -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

4339
func 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:\nhave %v\nwant %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.
101103
func 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),
@@ -117,8 +123,12 @@ func TestIterator(t *testing.T) {
117123

118124
// This test checks if closing randomIterator races.
119125
func TestIteratorClose(t *testing.T) {
120-
nodes := testNodes(nodesSeed1, 500)
121-
tree1, url1 := makeTestTree("t1", nodes, nil)
126+
var (
127+
keys = testKeys(500)
128+
nodes = testNodes(keys)
129+
tree1, url1 = makeTestTree("t1", nodes, nil)
130+
)
131+
122132
c := NewClient(Config{Resolver: newMapResolver(tree1.ToTXT("t1"))})
123133
it, err := c.NewIterator(url1)
124134
if err != nil {
@@ -140,9 +150,13 @@ func TestIteratorClose(t *testing.T) {
140150

141151
// This test checks that randomIterator traverses linked trees as well as explicitly added trees.
142152
func TestIteratorLinks(t *testing.T) {
143-
nodes := testNodes(nodesSeed1, 40)
144-
tree1, url1 := makeTestTree("t1", nodes[:10], nil)
145-
tree2, url2 := makeTestTree("t2", nodes[10:], []string{url1})
153+
var (
154+
keys = testKeys(40)
155+
nodes = testNodes(keys)
156+
tree1, url1 = makeTestTree("t1", nodes[:10], nil)
157+
tree2, url2 = makeTestTree("t2", nodes[10:], []string{url1})
158+
)
159+
146160
c := NewClient(Config{
147161
Resolver: newMapResolver(tree1.ToTXT("t1"), tree2.ToTXT("t2")),
148162
Logger: testlog.Logger(t, log.LvlTrace),
@@ -161,7 +175,8 @@ func TestIteratorLinks(t *testing.T) {
161175
func TestIteratorNodeUpdates(t *testing.T) {
162176
var (
163177
clock = new(mclock.Simulated)
164-
nodes = testNodes(nodesSeed1, 30)
178+
keys = testKeys(30)
179+
nodes = testNodes(keys)
165180
resolver = newMapResolver()
166181
c = NewClient(Config{
167182
Resolver: resolver,
@@ -182,7 +197,7 @@ func TestIteratorNodeUpdates(t *testing.T) {
182197
checkIterator(t, it, nodes[:25])
183198

184199
// Ensure RandomNode returns the new nodes after the tree is updated.
185-
updateSomeNodes(nodesSeed1, nodes)
200+
updateSomeNodes(keys, nodes)
186201
tree2, _ := makeTestTree("n", nodes, nil)
187202
resolver.clear()
188203
resolver.add(tree2.ToTXT("n"))
@@ -198,7 +213,8 @@ func TestIteratorNodeUpdates(t *testing.T) {
198213
func TestIteratorRootRecheckOnFail(t *testing.T) {
199214
var (
200215
clock = new(mclock.Simulated)
201-
nodes = testNodes(nodesSeed1, 30)
216+
keys = testKeys(30)
217+
nodes = testNodes(keys)
202218
resolver = newMapResolver()
203219
c = NewClient(Config{
204220
Resolver: resolver,
@@ -222,7 +238,7 @@ func TestIteratorRootRecheckOnFail(t *testing.T) {
222238
checkIterator(t, it, nodes[:25])
223239

224240
// Ensure RandomNode returns the new nodes after the tree is updated.
225-
updateSomeNodes(nodesSeed1, nodes)
241+
updateSomeNodes(keys, nodes)
226242
tree2, _ := makeTestTree("n", nodes, nil)
227243
resolver.clear()
228244
resolver.add(tree2.ToTXT("n"))
@@ -235,7 +251,8 @@ func TestIteratorRootRecheckOnFail(t *testing.T) {
235251
func TestIteratorEmptyTree(t *testing.T) {
236252
var (
237253
clock = new(mclock.Simulated)
238-
nodes = testNodes(nodesSeed1, 1)
254+
keys = testKeys(1)
255+
nodes = testNodes(keys)
239256
resolver = newMapResolver()
240257
c = NewClient(Config{
241258
Resolver: resolver,
@@ -279,8 +296,7 @@ func TestIteratorEmptyTree(t *testing.T) {
279296
}
280297

281298
// updateSomeNodes applies ENR updates to some of the given nodes.
282-
func updateSomeNodes(keySeed int64, nodes []*enode.Node) {
283-
keys := testKeys(nodesSeed1, len(nodes))
299+
func updateSomeNodes(keys []*ecdsa.PrivateKey, nodes []*enode.Node) {
284300
for i, n := range nodes[:len(nodes)/2] {
285301
r := n.Record()
286302
r.Set(enr.IP{127, 0, 0, 1})
@@ -296,7 +312,8 @@ func updateSomeNodes(keySeed int64, nodes []*enode.Node) {
296312
func TestIteratorLinkUpdates(t *testing.T) {
297313
var (
298314
clock = new(mclock.Simulated)
299-
nodes = testNodes(nodesSeed1, 30)
315+
keys = testKeys(30)
316+
nodes = testNodes(keys)
300317
resolver = newMapResolver()
301318
c = NewClient(Config{
302319
Resolver: resolver,
@@ -369,19 +386,18 @@ func makeTestTree(domain string, nodes []*enode.Node, links []string) (*Tree, st
369386
if err != nil {
370387
panic(err)
371388
}
372-
url, err := tree.Sign(testKey(signingKeySeed), domain)
389+
url, err := tree.Sign(signingKeyForTesting, domain)
373390
if err != nil {
374391
panic(err)
375392
}
376393
return tree, url
377394
}
378395

379396
// testKeys creates deterministic private keys for testing.
380-
func testKeys(seed int64, n int) []*ecdsa.PrivateKey {
381-
rand := rand.New(rand.NewSource(seed))
397+
func testKeys(n int) []*ecdsa.PrivateKey {
382398
keys := make([]*ecdsa.PrivateKey, n)
383399
for i := 0; i < n; i++ {
384-
key, err := ecdsa.GenerateKey(crypto.S256(), rand)
400+
key, err := crypto.GenerateKey()
385401
if err != nil {
386402
panic("can't generate key: " + err.Error())
387403
}
@@ -390,13 +406,8 @@ func testKeys(seed int64, n int) []*ecdsa.PrivateKey {
390406
return keys
391407
}
392408

393-
func testKey(seed int64) *ecdsa.PrivateKey {
394-
return testKeys(seed, 1)[0]
395-
}
396-
397-
func testNodes(seed int64, n int) []*enode.Node {
398-
keys := testKeys(seed, n)
399-
nodes := make([]*enode.Node, n)
409+
func testNodes(keys []*ecdsa.PrivateKey) []*enode.Node {
410+
nodes := make([]*enode.Node, len(keys))
400411
for i, key := range keys {
401412
record := new(enr.Record)
402413
record.SetSeq(uint64(i))
@@ -410,10 +421,6 @@ func testNodes(seed int64, n int) []*enode.Node {
410421
return nodes
411422
}
412423

413-
func testNode(seed int64) *enode.Node {
414-
return testNodes(seed, 1)[0]
415-
}
416-
417424
type mapResolver map[string]string
418425

419426
func newMapResolver(maps ...map[string]string) mapResolver {
@@ -442,3 +449,15 @@ func (mr mapResolver) LookupTXT(ctx context.Context, name string) ([]string, err
442449
}
443450
return nil, errors.New("not found")
444451
}
452+
453+
func parseNodes(rec []string) []*enode.Node {
454+
var ns []*enode.Node
455+
for _, r := range rec {
456+
var n enode.Node
457+
if err := n.UnmarshalText([]byte(r)); err != nil {
458+
panic(err)
459+
}
460+
ns = append(ns, &n)
461+
}
462+
return ns
463+
}

p2p/dnsdisc/tree_test.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@ func TestParseRoot(t *testing.T) {
6161
}
6262

6363
func TestParseEntry(t *testing.T) {
64-
testkey := testKey(signingKeySeed)
64+
testENRs := []string{"enr:-HW4QES8QIeXTYlDzbfr1WEzE-XKY4f8gJFJzjJL-9D7TC9lJb4Z3JPRRz1lP4pL_N_QpT6rGQjAU9Apnc-C1iMP36OAgmlkgnY0iXNlY3AyNTZrMaED5IdwfMxdmR8W37HqSFdQLjDkIwBd4Q_MjxgZifgKSdM"}
65+
testNodes := parseNodes(testENRs)
66+
6567
tests := []struct {
6668
input string
6769
e entry
@@ -91,7 +93,11 @@ func TestParseEntry(t *testing.T) {
9193
// Links
9294
{
9395
input: "enrtree://AKPYQIUQIL7PSIACI32J7FGZW56E5FKHEFCCOFHILBIMW3M6LWXS2@nodes.example.org",
94-
e: &linkEntry{"AKPYQIUQIL7PSIACI32J7FGZW56E5FKHEFCCOFHILBIMW3M6LWXS2@nodes.example.org", "nodes.example.org", &testkey.PublicKey},
96+
e: &linkEntry{
97+
str: "AKPYQIUQIL7PSIACI32J7FGZW56E5FKHEFCCOFHILBIMW3M6LWXS2@nodes.example.org",
98+
domain: "nodes.example.org",
99+
pubkey: &signingKeyForTesting.PublicKey,
100+
},
95101
},
96102
{
97103
input: "enrtree://nodes.example.org",
@@ -107,8 +113,8 @@ func TestParseEntry(t *testing.T) {
107113
},
108114
// ENRs
109115
{
110-
input: "enr:-HW4QES8QIeXTYlDzbfr1WEzE-XKY4f8gJFJzjJL-9D7TC9lJb4Z3JPRRz1lP4pL_N_QpT6rGQjAU9Apnc-C1iMP36OAgmlkgnY0iXNlY3AyNTZrMaED5IdwfMxdmR8W37HqSFdQLjDkIwBd4Q_MjxgZifgKSdM",
111-
e: &enrEntry{node: testNode(nodesSeed1)},
116+
input: testENRs[0],
117+
e: &enrEntry{node: testNodes[0]},
112118
},
113119
{
114120
input: "enr:-HW4QLZHjM4vZXkbp-5xJoHsKSbE7W39FPC8283X-y8oHcHPTnDDlIlzL5ArvDUlHZVDPgmFASrh7cWgLOLxj4wprRkHgmlkgnY0iXNlY3AyNTZrMaEC3t2jLMhDpCDX5mbSEwDn4L3iUfyXzoO8G28XvjGRkrAg=",
@@ -132,7 +138,8 @@ func TestParseEntry(t *testing.T) {
132138
}
133139

134140
func TestMakeTree(t *testing.T) {
135-
nodes := testNodes(nodesSeed2, 50)
141+
keys := testKeys(50)
142+
nodes := testNodes(keys)
136143
tree, err := MakeTree(2, nodes, nil)
137144
if err != nil {
138145
t.Fatal(err)

0 commit comments

Comments
 (0)