From 9e56ade56139b5c416e753856ceba6a8b43ed97b Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Wed, 25 Sep 2024 13:33:27 +0200 Subject: [PATCH] p2p/discover: fix flaky test which wrote to test.log after completion --- p2p/discover/v4_lookup_test.go | 20 ++++++++++++++++++-- p2p/enode/nodedb.go | 6 +++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/p2p/discover/v4_lookup_test.go b/p2p/discover/v4_lookup_test.go index 70bd7056fb..7c26f1ea69 100644 --- a/p2p/discover/v4_lookup_test.go +++ b/p2p/discover/v4_lookup_test.go @@ -21,6 +21,7 @@ import ( "fmt" "net/netip" "slices" + "sync" "testing" "github.com/ethereum/go-ethereum/crypto" @@ -75,7 +76,12 @@ func TestUDPv4_LookupIterator(t *testing.T) { bootnodes[i] = lookupTestnet.node(256, i) } fillTable(test.table, bootnodes, true) - go serveTestnet(test, lookupTestnet) + var wg sync.WaitGroup + wg.Add(1) + go func() { + serveTestnet(test, lookupTestnet) + wg.Done() + }() // Create the iterator and collect the nodes it yields. iter := test.udp.RandomNodes() @@ -95,6 +101,8 @@ func TestUDPv4_LookupIterator(t *testing.T) { if err := checkNodesEqual(results, want); err != nil { t.Fatal(err) } + test.close() + wg.Wait() } // TestUDPv4_LookupIteratorClose checks that lookupIterator ends when its Close @@ -110,7 +118,13 @@ func TestUDPv4_LookupIteratorClose(t *testing.T) { bootnodes[i] = lookupTestnet.node(256, i) } fillTable(test.table, bootnodes, true) - go serveTestnet(test, lookupTestnet) + + var wg sync.WaitGroup + wg.Add(1) + go func() { + serveTestnet(test, lookupTestnet) + wg.Done() + }() it := test.udp.RandomNodes() if ok := it.Next(); !ok || it.Node() == nil { @@ -132,6 +146,8 @@ func TestUDPv4_LookupIteratorClose(t *testing.T) { if n := it.Node(); n != nil { t.Errorf("iterator returned non-nil node after close and %d more calls", ncalls) } + test.close() + wg.Wait() } func serveTestnet(test *udpTest, testnet *preminedTestnet) { diff --git a/p2p/enode/nodedb.go b/p2p/enode/nodedb.go index 1f31c98d22..51e554e68a 100644 --- a/p2p/enode/nodedb.go +++ b/p2p/enode/nodedb.go @@ -496,6 +496,10 @@ func nextNode(it iterator.Iterator) *Node { // Close flushes and closes the database files. func (db *DB) Close() { - close(db.quit) + select { + case <-db.quit: // already closed + default: + close(db.quit) + } db.lvl.Close() }