aboutsummaryrefslogtreecommitdiffstats
path: root/eth/downloader/downloader_test.go
diff options
context:
space:
mode:
authorDaniel A. Nagy <nagy.da@gmail.com>2015-05-08 23:55:53 +0800
committerDaniel A. Nagy <nagy.da@gmail.com>2015-05-08 23:55:53 +0800
commit62dd9833ec768e2026bccb1cf7a8ef4263b9286d (patch)
tree0a091d99afd7f8cf5e3a6d4522c30ceef8559a55 /eth/downloader/downloader_test.go
parent3a01e3e39b9ce83ecb7444319407ee8bb00e3bf6 (diff)
parentc8fc4cebe63073fd77d5f553a4f0cec36a4ccb4b (diff)
downloaddexon-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.go52
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)
+ }
+}