@@ -281,19 +281,31 @@ func TestUDPv4_findnode(t *testing.T) {
281281 // check that closest neighbors are returned.
282282 expected := test .table .findnodeByID (testTarget .ID (), bucketSize , true )
283283 test .packetIn (nil , & v4wire.Findnode {Target : testTarget , Expiration : futureExp })
284- waitNeighbors := func (want []* enode.Node ) {
285- test .waitPacketOut (func (p * v4wire.Neighbors , to netip.AddrPort , hash []byte ) {
286- if len (p .Nodes ) != len (want ) {
287- t .Errorf ("wrong number of results: got %d, want %d" , len (p .Nodes ), len (want ))
288- return
289- }
290- for i , n := range p .Nodes {
291- if n .ID .ID () != want [i ].ID () {
292- t .Errorf ("result mismatch at %d:\n got: %v\n want: %v" , i , n , expected .entries [i ])
284+ deadline := time .Now ().Add (1 * time .Minute )
285+ var waitNeighbors func ([]* enode.Node )
286+ waitNeighbors = func (want []* enode.Node ) {
287+ if time .Now ().After (deadline ) {
288+ t .Fatal ("timeout waiting for neighbors response" )
289+ }
290+ test .waitPacketOut (func (p v4wire.Packet , to netip.AddrPort , hash []byte ) {
291+ switch p := p .(type ) {
292+ case * v4wire.Ping :
293+ waitNeighbors (want )
294+ case * v4wire.Neighbors :
295+ if len (p .Nodes ) != len (want ) {
296+ t .Errorf ("wrong number of results: got %d, want %d" , len (p .Nodes ), len (want ))
297+ return
293298 }
294- if ! live [n .ID .ID ()] {
295- t .Errorf ("result includes dead node %v" , n .ID .ID ())
299+ for i , n := range p .Nodes {
300+ if n .ID .ID () != want [i ].ID () {
301+ t .Errorf ("result mismatch at %d:\n got: %v\n want: %v" , i , n , expected .entries [i ])
302+ }
303+ if ! live [n .ID .ID ()] {
304+ t .Errorf ("result includes dead node %v" , n .ID .ID ())
305+ }
296306 }
307+ default :
308+ t .Fatalf ("unexpected packet type: %T" , p )
297309 }
298310 })
299311 }
0 commit comments