diff options
author | Daniel A. Nagy <nagy.da@gmail.com> | 2015-05-08 23:55:53 +0800 |
---|---|---|
committer | Daniel A. Nagy <nagy.da@gmail.com> | 2015-05-08 23:55:53 +0800 |
commit | 62dd9833ec768e2026bccb1cf7a8ef4263b9286d (patch) | |
tree | 0a091d99afd7f8cf5e3a6d4522c30ceef8559a55 /eth/downloader/downloader_test.go | |
parent | 3a01e3e39b9ce83ecb7444319407ee8bb00e3bf6 (diff) | |
parent | c8fc4cebe63073fd77d5f553a4f0cec36a4ccb4b (diff) | |
download | dexon-62dd9833ec768e2026bccb1cf7a8ef4263b9286d.tar dexon-62dd9833ec768e2026bccb1cf7a8ef4263b9286d.tar.gz dexon-62dd9833ec768e2026bccb1cf7a8ef4263b9286d.tar.bz2 dexon-62dd9833ec768e2026bccb1cf7a8ef4263b9286d.tar.lz dexon-62dd9833ec768e2026bccb1cf7a8ef4263b9286d.tar.xz dexon-62dd9833ec768e2026bccb1cf7a8ef4263b9286d.tar.zst dexon-62dd9833ec768e2026bccb1cf7a8ef4263b9286d.zip |
Merge branch 'develop' of github.com:ethereum/go-ethereum into develop
Diffstat (limited to 'eth/downloader/downloader_test.go')
-rw-r--r-- | eth/downloader/downloader_test.go | 52 |
1 files changed, 50 insertions, 2 deletions
diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go index 872ea02eb..8ccc4d1a5 100644 --- a/eth/downloader/downloader_test.go +++ b/eth/downloader/downloader_test.go @@ -128,7 +128,7 @@ func TestDownload(t *testing.T) { t.Error("download error", err) } - inqueue := len(tester.downloader.queue.blocks) + inqueue := len(tester.downloader.queue.blockCache) if inqueue != targetBlocks { t.Error("expected", targetBlocks, "have", inqueue) } @@ -151,7 +151,7 @@ func TestMissing(t *testing.T) { t.Error("download error", err) } - inqueue := len(tester.downloader.queue.blocks) + inqueue := len(tester.downloader.queue.blockCache) if inqueue != targetBlocks { t.Error("expected", targetBlocks, "have", inqueue) } @@ -181,3 +181,51 @@ func TestTaking(t *testing.T) { t.Error("expected to take 1000, got", len(bs1)) } } + +func TestThrottling(t *testing.T) { + minDesiredPeerCount = 4 + blockTtl = 1 * time.Second + + targetBlocks := 4 * blockCacheLimit + hashes := createHashes(0, targetBlocks) + blocks := createBlocksFromHashes(hashes) + tester := newTester(t, hashes, blocks) + + tester.newPeer("peer1", big.NewInt(10000), hashes[0]) + tester.newPeer("peer2", big.NewInt(0), common.Hash{}) + tester.badBlocksPeer("peer3", big.NewInt(0), common.Hash{}) + tester.badBlocksPeer("peer4", big.NewInt(0), common.Hash{}) + + // Concurrently download and take the blocks + errc := make(chan error, 1) + go func() { + errc <- tester.sync("peer1", hashes[0]) + }() + + done := make(chan struct{}) + took := []*types.Block{} + go func() { + for { + select { + case <-done: + took = append(took, tester.downloader.TakeBlocks()...) + done <- struct{}{} + return + default: + took = append(took, tester.downloader.TakeBlocks()...) + } + } + }() + + // Synchronise the two threads and verify + err := <-errc + done <- struct{}{} + <-done + + if err != nil { + t.Fatalf("failed to synchronise blocks: %v", err) + } + if len(took) != targetBlocks { + t.Fatalf("downloaded block mismatch: have %v, want %v", len(took), targetBlocks) + } +} |