mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-05-24 08:49:29 +00:00
cmd/devp2p/v5test: test unsolicited NODES hygiene
This commit is contained in:
parent
ba64f9eb88
commit
f8155b9d2a
1 changed files with 34 additions and 0 deletions
|
|
@ -26,6 +26,7 @@ import (
|
|||
"github.com/ethereum/go-ethereum/internal/utesting"
|
||||
"github.com/ethereum/go-ethereum/p2p/discover/v5wire"
|
||||
"github.com/ethereum/go-ethereum/p2p/enode"
|
||||
"github.com/ethereum/go-ethereum/p2p/enr"
|
||||
"github.com/ethereum/go-ethereum/p2p/netutil"
|
||||
)
|
||||
|
||||
|
|
@ -58,6 +59,7 @@ func (s *Suite) AllTests() []utesting.Test {
|
|||
{Name: "FindnodeHandshake", Fn: s.TestFindnodeHandshake},
|
||||
{Name: "FindnodeZeroDistance", Fn: s.TestFindnodeZeroDistance},
|
||||
{Name: "FindnodeResults", Fn: s.TestFindnodeResults},
|
||||
{Name: "UnsolicitedNodes", Fn: s.TestUnsolicitedNodes},
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -318,6 +320,38 @@ func (s *Suite) TestFindnodeZeroDistance(t *utesting.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func (s *Suite) TestUnsolicitedNodes(t *utesting.T) {
|
||||
conn, l1 := s.listen1(t)
|
||||
defer conn.close()
|
||||
|
||||
// Establish session so the unsolicited packet is well-formed and authenticated.
|
||||
ping := &v5wire.Ping{ReqID: conn.nextReqID()}
|
||||
if resp := conn.reqresp(l1, ping); resp.Kind() != v5wire.PongMsg {
|
||||
t.Fatal("expected PONG, got", resp)
|
||||
}
|
||||
|
||||
fakeConn, fakeL := s.listen1(t)
|
||||
defer fakeConn.close()
|
||||
fakeConn.setEndpoint(fakeL)
|
||||
|
||||
unsolicited := &v5wire.Nodes{
|
||||
ReqID: conn.nextReqID(),
|
||||
RespCount: 1,
|
||||
Nodes: []*enr.Record{fakeConn.localNode.Node().Record()},
|
||||
}
|
||||
conn.write(l1, unsolicited, nil)
|
||||
|
||||
results, err := conn.findnode(l1, []uint{uint(enode.LogDist(fakeConn.localNode.ID(), s.Dest.ID()))})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for _, n := range results {
|
||||
if n.ID() == fakeConn.localNode.ID() {
|
||||
t.Fatal("FINDNODE result contains node from unsolicited NODES response")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Suite) TestFindnodeResults(t *utesting.T) {
|
||||
t.Log(`This test pings the node under test from multiple other endpoints and node identities
|
||||
(the 'bystanders'). After waiting for them to be accepted into the remote table, the test checks
|
||||
|
|
|
|||
Loading…
Reference in a new issue