From 2e1ecc02bdf28a27e475386bc9f51452096bef4b Mon Sep 17 00:00:00 2001
From: gary rong <garyrong0905@gmail.com>
Date: Thu, 20 Feb 2020 20:05:54 +0800
Subject: [PATCH] les, miner, accounts/abi/bind: fix load-sensitive unit tests
 (#20698)

---
 accounts/abi/bind/bind_test.go |  4 ++--
 les/clientpool_test.go         |  4 ++--
 miner/worker_test.go           | 12 +++++++++---
 3 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/accounts/abi/bind/bind_test.go b/accounts/abi/bind/bind_test.go
index fa1a7b1ca..bbc6d8a45 100644
--- a/accounts/abi/bind/bind_test.go
+++ b/accounts/abi/bind/bind_test.go
@@ -1384,7 +1384,7 @@ var bindTests = []struct {
 			if n != 3 {
 				t.Fatalf("Invalid bar0 event")
 			}
-		case <-time.NewTimer(100 * time.Millisecond).C:
+		case <-time.NewTimer(3 * time.Second).C:
 			t.Fatalf("Wait bar0 event timeout")
 		}
 
@@ -1395,7 +1395,7 @@ var bindTests = []struct {
 			if n != 1 {
 				t.Fatalf("Invalid bar event")
 			}
-		case <-time.NewTimer(100 * time.Millisecond).C:
+		case <-time.NewTimer(3 * time.Second).C:
 			t.Fatalf("Wait bar event timeout")
 		}
 		close(stopCh)
diff --git a/les/clientpool_test.go b/les/clientpool_test.go
index 06f782ac9..6308113fe 100644
--- a/les/clientpool_test.go
+++ b/les/clientpool_test.go
@@ -517,7 +517,7 @@ func TestNodeDBExpiration(t *testing.T) {
 	for _, c := range cases {
 		ndb.setNB(c.ip, c.balance)
 	}
-	time.Sleep(100 * time.Millisecond) // Ensure the db expirer is registered.
+	clock.WaitForTimers(1)
 	clock.Run(time.Hour + time.Minute)
 	select {
 	case <-done:
@@ -527,7 +527,7 @@ func TestNodeDBExpiration(t *testing.T) {
 	if iterated != 4 {
 		t.Fatalf("Failed to evict useless negative balances, want %v, got %d", 4, iterated)
 	}
-
+	clock.WaitForTimers(1)
 	for _, c := range cases {
 		ndb.setNB(c.ip, c.balance)
 	}
diff --git a/miner/worker_test.go b/miner/worker_test.go
index 81fb8f1b9..78e09a176 100644
--- a/miner/worker_test.go
+++ b/miner/worker_test.go
@@ -215,12 +215,16 @@ func testGenerateBlockAndImport(t *testing.T, isClique bool) {
 	chain, _ := core.NewBlockChain(db2, nil, b.chain.Config(), engine, vm.Config{}, nil)
 	defer chain.Stop()
 
-	loopErr := make(chan error)
-	newBlock := make(chan struct{})
+	var (
+		loopErr   = make(chan error)
+		newBlock  = make(chan struct{})
+		subscribe = make(chan struct{})
+	)
 	listenNewBlock := func() {
 		sub := w.mux.Subscribe(core.NewMinedBlockEvent{})
 		defer sub.Unsubscribe()
 
+		subscribe <- struct{}{}
 		for item := range sub.Chan() {
 			block := item.Data.(core.NewMinedBlockEvent).Block
 			_, err := chain.InsertChain([]*types.Block{block})
@@ -234,9 +238,11 @@ func testGenerateBlockAndImport(t *testing.T, isClique bool) {
 	w.skipSealHook = func(task *task) bool {
 		return len(task.receipts) == 0
 	}
-	w.start() // Start mining!
 	go listenNewBlock()
 
+	<-subscribe // Ensure the subscription is created
+	w.start()   // Start mining!
+
 	for i := 0; i < 5; i++ {
 		b.txPool.AddLocal(b.newRandomTx(true))
 		b.txPool.AddLocal(b.newRandomTx(false))
-- 
GitLab