tests: adjust snap timeout, add v5 negative cases

This commit is contained in:
vipocenka 2025-08-20 20:03:33 +03:00
parent bf8f63dcd2
commit fc979d9a51
2 changed files with 61 additions and 3 deletions

View file

@ -948,7 +948,7 @@ func checkStall(t *testing.T, term func()) chan struct{} {
testDone := make(chan struct{})
go func() {
select {
case <-time.After(time.Minute): // TODO(karalabe): Make tests smaller, this is too much
case <-time.After(10 * time.Second): // shortened to reduce test runtime
t.Log("Sync stalled")
term()
case <-testDone:

View file

@ -379,8 +379,66 @@ func TestUDPv5_findnodeCall(t *testing.T) {
t.Fatalf("wrong nodes in response")
}
// TODO: check invalid IPs
// TODO: check invalid/unsigned record
// Negative cases for invalid responses:
// 1) Invalid IP: deliver a Nodes packet where one record has an unspecified IP, expect it to be ignored.
{
var (
distances = []uint{230}
remote = test.getNode(test.remotekey, test.remoteaddr).Node()
nodes = nodesAtDistance(remote.ID(), int(distances[0]), 1)
done = make(chan error, 1)
respNodes []*enode.Node
)
go func() {
var err error
respNodes, err = test.udp.Findnode(remote, distances)
done <- err
}()
test.waitPacketOut(func(p *v5wire.Findnode, addr netip.AddrPort, _ v5wire.Nonce) {
// Craft a record with unspecified IP (invalid according to netutil.CheckRelayAddr).
r := new(enr.Record)
r.Set(enr.IP(net.IPv4zero))
r.Set(enr.UDP(30303))
bad := enode.SignNull(r, nodes[0].ID())
test.packetIn(&v5wire.Nodes{ReqID: p.ReqID, RespCount: 1, Nodes: []*enr.Record{bad.Record()}})
})
if err := <-done; err != nil {
t.Fatalf("unexpected error: %v", err)
}
if len(respNodes) != 0 {
t.Fatalf("expected 0 nodes for invalid IP, got %d", len(respNodes))
}
}
// 2) Invalid UDP port (<=1024): deliver a record with low port, expect it to be ignored.
{
var (
distances = []uint{230}
remote = test.getNode(test.remotekey, test.remoteaddr).Node()
nodes = nodesAtDistance(remote.ID(), int(distances[0]), 1)
done = make(chan error, 1)
respNodes []*enode.Node
)
go func() {
var err error
respNodes, err = test.udp.Findnode(remote, distances)
done <- err
}()
test.waitPacketOut(func(p *v5wire.Findnode, addr netip.AddrPort, _ v5wire.Nonce) {
r := new(enr.Record)
r.Set(enr.IP(nodes[0].IP()))
r.Set(enr.UDP(1024)) // invalid low port
bad := enode.SignNull(r, nodes[0].ID())
test.packetIn(&v5wire.Nodes{ReqID: p.ReqID, RespCount: 1, Nodes: []*enr.Record{bad.Record()}})
})
if err := <-done; err != nil {
t.Fatalf("unexpected error: %v", err)
}
if len(respNodes) != 0 {
t.Fatalf("expected 0 nodes for low UDP port, got %d", len(respNodes))
}
}
}
// This test checks that pending calls are re-sent when a handshake happens.