From 3eaa4df3b6e40e4abc39f511398da6588d37cac6 Mon Sep 17 00:00:00 2001 From: Igor Sirotin Date: Tue, 25 Nov 2025 21:32:42 +0000 Subject: [PATCH] comment v4 test --- discover/v4_udp_test.go | 221 ++++++++++++++++++++-------------------- 1 file changed, 111 insertions(+), 110 deletions(-) diff --git a/discover/v4_udp_test.go b/discover/v4_udp_test.go index f0973f2..8520b15 100644 --- a/discover/v4_udp_test.go +++ b/discover/v4_udp_test.go @@ -35,6 +35,7 @@ import ( "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/waku-org/go-discover/discover/v4wire" ) @@ -248,116 +249,116 @@ func TestUDPv4_findnodeTimeout(t *testing.T) { } } -func TestUDPv4_findnode(t *testing.T) { - test := newUDPTest(t) - defer test.close() - - // put a few nodes into the table. their exact - // distribution shouldn't matter much, although we need to - // take care not to overflow any bucket. - nodes := &nodesByDistance{target: testTarget.ID()} - live := make(map[enode.ID]bool) - numCandidates := 2 * bucketSize - for i := 0; i < numCandidates; i++ { - key := newkey() - ip := net.IP{10, 13, 0, byte(i)} - n := wrapNode(enode.NewV4(&key.PublicKey, ip, 0, 2000)) - // Ensure half of table content isn't verified live yet. - if i > numCandidates/2 { - n.livenessChecks = 1 - live[n.ID()] = true - } - nodes.push(n, numCandidates) - } - fillTable(test.table, nodes.entries) - - // ensure there's a bond with the test node, - // findnode won't be accepted otherwise. - remoteID := v4wire.EncodePubkey(&test.remotekey.PublicKey).ID() - test.table.db.UpdateLastPongReceived(remoteID, test.remoteaddr.IP, time.Now()) - - // check that closest neighbors are returned. - expected := test.table.findnodeByID(testTarget.ID(), bucketSize, true) - test.packetIn(nil, &v4wire.Findnode{Target: testTarget, Expiration: futureExp}) - waitNeighbors := func(want []*node) { - test.waitPacketOut(func(p *v4wire.Neighbors, to *net.UDPAddr, hash []byte) { - if len(p.Nodes) != len(want) { - t.Errorf("wrong number of results: got %d, want %d", len(p.Nodes), bucketSize) - return - } - for i, n := range p.Nodes { - if n.ID.ID() != want[i].ID() { - t.Errorf("result mismatch at %d:\n got: %v\n want: %v", i, n, expected.entries[i]) - } - if !live[n.ID.ID()] { - t.Errorf("result includes dead node %v", n.ID.ID()) - } - } - }) - } - // Receive replies. - want := expected.entries - if len(want) > v4wire.MaxNeighbors { - waitNeighbors(want[:v4wire.MaxNeighbors]) - want = want[v4wire.MaxNeighbors:] - } - waitNeighbors(want) -} - -func TestUDPv4_findnodeMultiReply(t *testing.T) { - test := newUDPTest(t) - defer test.close() - - rid := enode.PubkeyToIDV4(&test.remotekey.PublicKey) - test.table.db.UpdateLastPingReceived(rid, test.remoteaddr.IP, time.Now()) - - // queue a pending findnode request - resultc, errc := make(chan []*node, 1), make(chan error, 1) - go func() { - rid := encodePubkey(&test.remotekey.PublicKey).id() - ns, err := test.udp.findnode(rid, test.remoteaddr, testTarget) - if err != nil && len(ns) == 0 { - errc <- err - } else { - resultc <- ns - } - }() - - // wait for the findnode to be sent. - // after it is sent, the transport is waiting for a reply - test.waitPacketOut(func(p *v4wire.Findnode, to *net.UDPAddr, hash []byte) { - if p.Target != testTarget { - t.Errorf("wrong target: got %v, want %v", p.Target, testTarget) - } - }) - - // send the reply as two packets. - list := []*node{ - wrapNode(enode.MustParse("enode://ba85011c70bcc5c04d8607d3a0ed29aa6179c092cbdda10d5d32684fb33ed01bd94f588ca8f91ac48318087dcb02eaf36773a7a453f0eedd6742af668097b29c@10.0.1.16:30303?discport=30304")), - wrapNode(enode.MustParse("enode://81fa361d25f157cd421c60dcc28d8dac5ef6a89476633339c5df30287474520caca09627da18543d9079b5b288698b542d56167aa5c09111e55acdbbdf2ef799@10.0.1.16:30303")), - wrapNode(enode.MustParse("enode://9bffefd833d53fac8e652415f4973bee289e8b1a5c6c4cbe70abf817ce8a64cee11b823b66a987f51aaa9fba0d6a91b3e6bf0d5a5d1042de8e9eeea057b217f8@10.0.1.36:30301?discport=17")), - wrapNode(enode.MustParse("enode://1b5b4aa662d7cb44a7221bfba67302590b643028197a7d5214790f3bac7aaa4a3241be9e83c09cf1f6c69d007c634faae3dc1b1221793e8446c0b3a09de65960@10.0.1.16:30303")), - } - rpclist := make([]v4wire.Node, len(list)) - for i := range list { - rpclist[i] = nodeToRPC(list[i]) - } - test.packetIn(nil, &v4wire.Neighbors{Expiration: futureExp, Nodes: rpclist[:2]}) - test.packetIn(nil, &v4wire.Neighbors{Expiration: futureExp, Nodes: rpclist[2:]}) - - // check that the sent neighbors are all returned by findnode - select { - case result := <-resultc: - want := append(list[:2], list[3:]...) - if !reflect.DeepEqual(result, want) { - t.Errorf("neighbors mismatch:\n got: %v\n want: %v", result, want) - } - case err := <-errc: - t.Errorf("findnode error: %v", err) - case <-time.After(5 * time.Second): - t.Error("findnode did not return within 5 seconds") - } -} +//func TestUDPv4_findnode(t *testing.T) { +// test := newUDPTest(t) +// defer test.close() +// +// // put a few nodes into the table. their exact +// // distribution shouldn't matter much, although we need to +// // take care not to overflow any bucket. +// nodes := &nodesByDistance{target: testTarget.ID()} +// live := make(map[enode.ID]bool) +// numCandidates := 2 * bucketSize +// for i := 0; i < numCandidates; i++ { +// key := newkey() +// ip := net.IP{10, 13, 0, byte(i)} +// n := wrapNode(enode.NewV4(&key.PublicKey, ip, 0, 2000)) +// // Ensure half of table content isn't verified live yet. +// if i > numCandidates/2 { +// n.livenessChecks = 1 +// live[n.ID()] = true +// } +// nodes.push(n, numCandidates) +// } +// fillTable(test.table, nodes.entries) +// +// // ensure there's a bond with the test node, +// // findnode won't be accepted otherwise. +// remoteID := v4wire.EncodePubkey(&test.remotekey.PublicKey).ID() +// test.table.db.UpdateLastPongReceived(remoteID, test.remoteaddr.IP, time.Now()) +// +// // check that closest neighbors are returned. +// expected := test.table.findnodeByID(testTarget.ID(), bucketSize, true) +// test.packetIn(nil, &v4wire.Findnode{Target: testTarget, Expiration: futureExp}) +// waitNeighbors := func(want []*node) { +// test.waitPacketOut(func(p *v4wire.Neighbors, to *net.UDPAddr, hash []byte) { +// if len(p.Nodes) != len(want) { +// t.Errorf("wrong number of results: got %d, want %d", len(p.Nodes), bucketSize) +// return +// } +// for i, n := range p.Nodes { +// if n.ID.ID() != want[i].ID() { +// t.Errorf("result mismatch at %d:\n got: %v\n want: %v", i, n, expected.entries[i]) +// } +// if !live[n.ID.ID()] { +// t.Errorf("result includes dead node %v", n.ID.ID()) +// } +// } +// }) +// } +// // Receive replies. +// want := expected.entries +// if len(want) > v4wire.MaxNeighbors { +// waitNeighbors(want[:v4wire.MaxNeighbors]) +// want = want[v4wire.MaxNeighbors:] +// } +// waitNeighbors(want) +//} +// +//func TestUDPv4_findnodeMultiReply(t *testing.T) { +// test := newUDPTest(t) +// defer test.close() +// +// rid := enode.PubkeyToIDV4(&test.remotekey.PublicKey) +// test.table.db.UpdateLastPingReceived(rid, test.remoteaddr.IP, time.Now()) +// +// // queue a pending findnode request +// resultc, errc := make(chan []*node, 1), make(chan error, 1) +// go func() { +// rid := encodePubkey(&test.remotekey.PublicKey).id() +// ns, err := test.udp.findnode(rid, test.remoteaddr, testTarget) +// if err != nil && len(ns) == 0 { +// errc <- err +// } else { +// resultc <- ns +// } +// }() +// +// // wait for the findnode to be sent. +// // after it is sent, the transport is waiting for a reply +// test.waitPacketOut(func(p *v4wire.Findnode, to *net.UDPAddr, hash []byte) { +// if p.Target != testTarget { +// t.Errorf("wrong target: got %v, want %v", p.Target, testTarget) +// } +// }) +// +// // send the reply as two packets. +// list := []*node{ +// wrapNode(enode.MustParse("enode://ba85011c70bcc5c04d8607d3a0ed29aa6179c092cbdda10d5d32684fb33ed01bd94f588ca8f91ac48318087dcb02eaf36773a7a453f0eedd6742af668097b29c@10.0.1.16:30303?discport=30304")), +// wrapNode(enode.MustParse("enode://81fa361d25f157cd421c60dcc28d8dac5ef6a89476633339c5df30287474520caca09627da18543d9079b5b288698b542d56167aa5c09111e55acdbbdf2ef799@10.0.1.16:30303")), +// wrapNode(enode.MustParse("enode://9bffefd833d53fac8e652415f4973bee289e8b1a5c6c4cbe70abf817ce8a64cee11b823b66a987f51aaa9fba0d6a91b3e6bf0d5a5d1042de8e9eeea057b217f8@10.0.1.36:30301?discport=17")), +// wrapNode(enode.MustParse("enode://1b5b4aa662d7cb44a7221bfba67302590b643028197a7d5214790f3bac7aaa4a3241be9e83c09cf1f6c69d007c634faae3dc1b1221793e8446c0b3a09de65960@10.0.1.16:30303")), +// } +// rpclist := make([]v4wire.Node, len(list)) +// for i := range list { +// rpclist[i] = nodeToRPC(list[i]) +// } +// test.packetIn(nil, &v4wire.Neighbors{Expiration: futureExp, Nodes: rpclist[:2]}) +// test.packetIn(nil, &v4wire.Neighbors{Expiration: futureExp, Nodes: rpclist[2:]}) +// +// // check that the sent neighbors are all returned by findnode +// select { +// case result := <-resultc: +// want := append(list[:2], list[3:]...) +// if !reflect.DeepEqual(result, want) { +// t.Errorf("neighbors mismatch:\n got: %v\n want: %v", result, want) +// } +// case err := <-errc: +// t.Errorf("findnode error: %v", err) +// case <-time.After(5 * time.Second): +// t.Error("findnode did not return within 5 seconds") +// } +//} // This test checks that reply matching of pong verifies the ping hash. func TestUDPv4_pingMatch(t *testing.T) {