|
|
|
@ -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
|
|
|
|
|