|
|
@@ -554,12 +554,12 @@ func TestBroadcastBlock(t *testing.T) {
|
|
|
broadcastExpected int
|
|
|
}{
|
|
|
{1, 1},
|
|
|
- {2, 2},
|
|
|
- {3, 3},
|
|
|
- {4, 4},
|
|
|
- {5, 4},
|
|
|
- {9, 4},
|
|
|
- {12, 4},
|
|
|
+ {2, 1},
|
|
|
+ {3, 1},
|
|
|
+ {4, 2},
|
|
|
+ {5, 2},
|
|
|
+ {9, 3},
|
|
|
+ {12, 3},
|
|
|
{16, 4},
|
|
|
{26, 5},
|
|
|
{100, 10},
|
|
|
@@ -592,6 +592,7 @@ func testBroadcastBlock(t *testing.T, totalPeers, broadcastExpected int) {
|
|
|
for i := 0; i < totalPeers; i++ {
|
|
|
peer, _ := newTestPeer(fmt.Sprintf("peer %d", i), eth63, pm, true)
|
|
|
defer peer.close()
|
|
|
+
|
|
|
peers = append(peers, peer)
|
|
|
}
|
|
|
chain, _ := core.GenerateChain(gspec.Config, genesis, ethash.NewFaker(), db, 1, func(i int, gen *core.BlockGen) {})
|
|
|
@@ -608,31 +609,23 @@ func testBroadcastBlock(t *testing.T, totalPeers, broadcastExpected int) {
|
|
|
}
|
|
|
}(peer)
|
|
|
}
|
|
|
- timeout := time.After(2 * time.Second)
|
|
|
- var receivedCount int
|
|
|
-outer:
|
|
|
+ var received int
|
|
|
for {
|
|
|
select {
|
|
|
- case err = <-errCh:
|
|
|
- break outer
|
|
|
case <-doneCh:
|
|
|
- receivedCount++
|
|
|
- if receivedCount == totalPeers {
|
|
|
- break outer
|
|
|
+ received++
|
|
|
+
|
|
|
+ case <-time.After(100 * time.Millisecond):
|
|
|
+ if received != broadcastExpected {
|
|
|
+ t.Errorf("broadcast count mismatch: have %d, want %d", received, broadcastExpected)
|
|
|
}
|
|
|
- case <-timeout:
|
|
|
- break outer
|
|
|
+ return
|
|
|
+
|
|
|
+ case err = <-errCh:
|
|
|
+ t.Fatalf("broadcast failed: %v", err)
|
|
|
}
|
|
|
}
|
|
|
- for _, peer := range peers {
|
|
|
- peer.app.Close()
|
|
|
- }
|
|
|
- if err != nil {
|
|
|
- t.Errorf("error matching block by peer: %v", err)
|
|
|
- }
|
|
|
- if receivedCount != broadcastExpected {
|
|
|
- t.Errorf("block broadcast to %d peers, expected %d", receivedCount, broadcastExpected)
|
|
|
- }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
// Tests that a propagated malformed block (uncles or transactions don't match
|