From b23b4dbd79b4699abde4b3954c7480e137ffc3be Mon Sep 17 00:00:00 2001
From: Felix Lange <fjl@twurst.com>
Date: Thu, 6 Aug 2015 12:27:59 +0200
Subject: p2p/discover: close Table during testing

Not closing the table used to be fine, but now the table has a database.
---
 p2p/discover/table.go      | 4 +++-
 p2p/discover/table_test.go | 8 +++++---
 2 files changed, 8 insertions(+), 4 deletions(-)

(limited to 'p2p')

diff --git a/p2p/discover/table.go b/p2p/discover/table.go
index 48c473475..67f7ec46f 100644
--- a/p2p/discover/table.go
+++ b/p2p/discover/table.go
@@ -164,7 +164,9 @@ func randUint(max uint32) uint32 {
 
 // Close terminates the network listener and flushes the node database.
 func (tab *Table) Close() {
-	tab.net.close()
+	if tab.net != nil {
+		tab.net.close()
+	}
 	tab.db.close()
 }
 
diff --git a/p2p/discover/table_test.go b/p2p/discover/table_test.go
index 310fe2b7b..d259177bf 100644
--- a/p2p/discover/table_test.go
+++ b/p2p/discover/table_test.go
@@ -35,6 +35,7 @@ func TestTable_pingReplace(t *testing.T) {
 	doit := func(newNodeIsResponding, lastInBucketIsResponding bool) {
 		transport := newPingRecorder()
 		tab := newTable(transport, NodeID{}, &net.UDPAddr{}, "")
+		defer tab.Close()
 		pingSender := newNode(MustHexID("a502af0f59b2aab7746995408c79e9ca312d2793cc997e44fc55eda62f0150bbb8c59a6f9269ba3a081518b62699ee807c7c19c20125ddfccca872608af9e370"), net.IP{}, 99, 99)
 
 		// fill up the sender's bucket.
@@ -158,9 +159,7 @@ func newPingRecorder() *pingRecorder {
 func (t *pingRecorder) findnode(toid NodeID, toaddr *net.UDPAddr, target NodeID) ([]*Node, error) {
 	panic("findnode called on pingRecorder")
 }
-func (t *pingRecorder) close() {
-	panic("close called on pingRecorder")
-}
+func (t *pingRecorder) close() {}
 func (t *pingRecorder) waitping(from NodeID) error {
 	return nil // remote always pings
 }
@@ -180,6 +179,7 @@ func TestTable_closest(t *testing.T) {
 		// for any node table, Target and N
 		tab := newTable(nil, test.Self, &net.UDPAddr{}, "")
 		tab.add(test.All)
+		defer tab.Close()
 
 		// check that doClosest(Target, N) returns nodes
 		result := tab.closest(test.Target, test.N).entries
@@ -237,6 +237,7 @@ func TestTable_ReadRandomNodesGetAll(t *testing.T) {
 	}
 	test := func(buf []*Node) bool {
 		tab := newTable(nil, NodeID{}, &net.UDPAddr{}, "")
+		defer tab.Close()
 		for i := 0; i < len(buf); i++ {
 			ld := cfg.Rand.Intn(len(tab.buckets))
 			tab.add([]*Node{nodeAtDistance(tab.self.sha, ld)})
@@ -279,6 +280,7 @@ func (*closeTest) Generate(rand *rand.Rand, size int) reflect.Value {
 func TestTable_Lookup(t *testing.T) {
 	self := nodeAtDistance(common.Hash{}, 0)
 	tab := newTable(lookupTestnet, self.ID, &net.UDPAddr{}, "")
+	defer tab.Close()
 
 	// lookup on empty table returns no nodes
 	if results := tab.Lookup(lookupTestnet.target); len(results) > 0 {
-- 
cgit v1.2.3