diff options
author | Felix Lange <fjl@twurst.com> | 2015-06-10 19:07:30 +0800 |
---|---|---|
committer | Felix Lange <fjl@twurst.com> | 2015-06-10 19:08:21 +0800 |
commit | 261a8077c410c50999d662bd1ca871b7ef414909 (patch) | |
tree | c27680cf5190bd60b96f47732ac4bc5b9d7b0289 /p2p/discover/udp_test.go | |
parent | dffe6d32d6d80078f2ecd3330c311ee85c5e9de2 (diff) | |
download | dexon-261a8077c410c50999d662bd1ca871b7ef414909.tar dexon-261a8077c410c50999d662bd1ca871b7ef414909.tar.gz dexon-261a8077c410c50999d662bd1ca871b7ef414909.tar.bz2 dexon-261a8077c410c50999d662bd1ca871b7ef414909.tar.lz dexon-261a8077c410c50999d662bd1ca871b7ef414909.tar.xz dexon-261a8077c410c50999d662bd1ca871b7ef414909.tar.zst dexon-261a8077c410c50999d662bd1ca871b7ef414909.zip |
p2p/discover: deflake TestUDP_successfulPing
Diffstat (limited to 'p2p/discover/udp_test.go')
-rw-r--r-- | p2p/discover/udp_test.go | 55 |
1 files changed, 22 insertions, 33 deletions
diff --git a/p2p/discover/udp_test.go b/p2p/discover/udp_test.go index 11fa31d7c..b5d035a98 100644 --- a/p2p/discover/udp_test.go +++ b/p2p/discover/udp_test.go @@ -234,14 +234,12 @@ func TestUDP_findnodeMultiReply(t *testing.T) { func TestUDP_successfulPing(t *testing.T) { test := newUDPTest(t) + added := make(chan *Node, 1) + test.table.nodeAddedHook = func(n *Node) { added <- n } defer test.table.Close() - done := make(chan struct{}) - go func() { - // The remote side sends a ping packet to initiate the exchange. - test.packetIn(nil, pingPacket, &ping{From: testRemote, To: testLocalAnnounced, Version: Version, Expiration: futureExp}) - close(done) - }() + // The remote side sends a ping packet to initiate the exchange. + go test.packetIn(nil, pingPacket, &ping{From: testRemote, To: testLocalAnnounced, Version: Version, Expiration: futureExp}) // the ping is replied to. test.waitPacketOut(func(p *pong) { @@ -277,35 +275,26 @@ func TestUDP_successfulPing(t *testing.T) { }) test.packetIn(nil, pongPacket, &pong{Expiration: futureExp}) - // ping should return shortly after getting the pong packet. - <-done - - // check that the node was added. - rid := PubkeyID(&test.remotekey.PublicKey) - rnode := find(test.table, rid) - if rnode == nil { - t.Fatalf("node %v not found in table", rid) - } - if !bytes.Equal(rnode.IP, test.remoteaddr.IP) { - t.Errorf("node has wrong IP: got %v, want: %v", rnode.IP, test.remoteaddr.IP) - } - if int(rnode.UDP) != test.remoteaddr.Port { - t.Errorf("node has wrong UDP port: got %v, want: %v", rnode.UDP, test.remoteaddr.Port) - } - if rnode.TCP != testRemote.TCP { - t.Errorf("node has wrong TCP port: got %v, want: %v", rnode.TCP, testRemote.TCP) - } -} - -func find(tab *Table, id NodeID) *Node { - for _, b := range tab.buckets { - for _, e := range b.entries { - if e.ID == id { - return e - } + // the node should be added to the table shortly after getting the + // pong packet. + select { + case n := <-added: + rid := PubkeyID(&test.remotekey.PublicKey) + if n.ID != rid { + t.Errorf("node has wrong ID: got %v, want %v", n.ID, rid) } + if !bytes.Equal(n.IP, test.remoteaddr.IP) { + t.Errorf("node has wrong IP: got %v, want: %v", n.IP, test.remoteaddr.IP) + } + if int(n.UDP) != test.remoteaddr.Port { + t.Errorf("node has wrong UDP port: got %v, want: %v", n.UDP, test.remoteaddr.Port) + } + if n.TCP != testRemote.TCP { + t.Errorf("node has wrong TCP port: got %v, want: %v", n.TCP, testRemote.TCP) + } + case <-time.After(2 * time.Second): + t.Errorf("node was not added within 2 seconds") } - return nil } // dgramPipe is a fake UDP socket. It queues all sent datagrams. |