cmd/devp2p/internal/v4test: fix false-positive hive test (#23966)

This PR fixes two problems in devp2p tests (and through them, hive).

- Make the output more detailed about what is returned (always print packet kind).
- Allow Ping response to unsolicited findnode.

Without this PR, nethermind fails a hive protocol test, and I misinterpreted the result (NethermindEth/nethermind#3617). Ergo, the output was not fool-proof.
This commit is contained in:
Martin Holst Swende 2021-11-24 21:22:45 +01:00 committed by GitHub
parent 66ee9422f5
commit ad7c90c198
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -229,7 +229,7 @@ func PingPastExpiration(t *utesting.T) {
reply, _, _ := te.read(te.l1) reply, _, _ := te.read(te.l1)
if reply != nil { if reply != nil {
t.Fatal("Expected no reply, got", reply) t.Fatalf("Expected no reply, got %v %v", reply.Name(), reply)
} }
} }
@ -247,7 +247,7 @@ func WrongPacketType(t *utesting.T) {
reply, _, _ := te.read(te.l1) reply, _, _ := te.read(te.l1)
if reply != nil { if reply != nil {
t.Fatal("Expected no reply, got", reply) t.Fatalf("Expected no reply, got %v %v", reply.Name(), reply)
} }
} }
@ -282,9 +282,16 @@ func FindnodeWithoutEndpointProof(t *utesting.T) {
rand.Read(req.Target[:]) rand.Read(req.Target[:])
te.send(te.l1, &req) te.send(te.l1, &req)
reply, _, _ := te.read(te.l1) for {
if reply != nil { reply, _, _ := te.read(te.l1)
t.Fatal("Expected no response, got", reply) if reply == nil {
// No response, all good
break
}
if reply.Kind() == v4wire.PingPacket {
continue // A ping is ok, just ignore it
}
t.Fatalf("Expected no reply, got %v %v", reply.Name(), reply)
} }
} }
@ -304,7 +311,7 @@ func BasicFindnode(t *utesting.T) {
t.Fatal("read find nodes", err) t.Fatal("read find nodes", err)
} }
if reply.Kind() != v4wire.NeighborsPacket { if reply.Kind() != v4wire.NeighborsPacket {
t.Fatal("Expected neighbors, got", reply.Name()) t.Fatalf("Expected neighbors, got %v %v", reply.Name(), reply)
} }
} }
@ -341,7 +348,7 @@ func UnsolicitedNeighbors(t *utesting.T) {
t.Fatal("read find nodes", err) t.Fatal("read find nodes", err)
} }
if reply.Kind() != v4wire.NeighborsPacket { if reply.Kind() != v4wire.NeighborsPacket {
t.Fatal("Expected neighbors, got", reply.Name()) t.Fatalf("Expected neighbors, got %v %v", reply.Name(), reply)
} }
nodes := reply.(*v4wire.Neighbors).Nodes nodes := reply.(*v4wire.Neighbors).Nodes
if contains(nodes, encFakeKey) { if contains(nodes, encFakeKey) {