aboutsummaryrefslogtreecommitdiffstats
path: root/eth/downloader/downloader_test.go
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2015-05-10 06:34:07 +0800
committerobscuren <geffobscura@gmail.com>2015-05-10 06:34:07 +0800
commit05715f27cfd68387f720db115bb8461f8725a341 (patch)
tree33a78a81f0caa8a5c1c30aa3286d52796b2faac8 /eth/downloader/downloader_test.go
parent45dc690947ebfe9fb3dc64ba3c74fb433b0f474d (diff)
downloadgo-tangerine-05715f27cfd68387f720db115bb8461f8725a341.tar
go-tangerine-05715f27cfd68387f720db115bb8461f8725a341.tar.gz
go-tangerine-05715f27cfd68387f720db115bb8461f8725a341.tar.bz2
go-tangerine-05715f27cfd68387f720db115bb8461f8725a341.tar.lz
go-tangerine-05715f27cfd68387f720db115bb8461f8725a341.tar.xz
go-tangerine-05715f27cfd68387f720db115bb8461f8725a341.tar.zst
go-tangerine-05715f27cfd68387f720db115bb8461f8725a341.zip
eth: added a cancel method for the downloader
Added a cancel method to the downloader which gracefully shuts down any active syncing process (hash fetching or block downloading) and resets the queue and remove any pending blocks. Issue with the downloader which would stall because of an active ongoing process when an invalid block was found.
Diffstat (limited to 'eth/downloader/downloader_test.go')
-rw-r--r--eth/downloader/downloader_test.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go
index 8ccc4d1a5..d0f8d4c8f 100644
--- a/eth/downloader/downloader_test.go
+++ b/eth/downloader/downloader_test.go
@@ -182,6 +182,49 @@ func TestTaking(t *testing.T) {
}
}
+func TestInactiveDownloader(t *testing.T) {
+ targetBlocks := 1000
+ hashes := createHashes(0, targetBlocks)
+ blocks := createBlocksFromHashSet(createHashSet(hashes))
+ tester := newTester(t, hashes, nil)
+
+ err := tester.downloader.AddHashes("bad peer 001", hashes)
+ if err != errNoSyncActive {
+ t.Error("expected no sync error, got", err)
+ }
+
+ err = tester.downloader.DeliverChunk("bad peer 001", blocks)
+ if err != errNoSyncActive {
+ t.Error("expected no sync error, got", err)
+ }
+}
+
+func TestCancel(t *testing.T) {
+ minDesiredPeerCount = 4
+ blockTtl = 1 * time.Second
+
+ targetBlocks := 1000
+ hashes := createHashes(0, targetBlocks)
+ blocks := createBlocksFromHashes(hashes)
+ tester := newTester(t, hashes, blocks)
+
+ tester.newPeer("peer1", big.NewInt(10000), hashes[0])
+
+ err := tester.sync("peer1", hashes[0])
+ if err != nil {
+ t.Error("download error", err)
+ }
+
+ if !tester.downloader.Cancel() {
+ t.Error("cancel operation unsuccessfull")
+ }
+
+ hashSize, blockSize := tester.downloader.queue.Size()
+ if hashSize > 0 || blockSize > 0 {
+ t.Error("block (", blockSize, ") or hash (", hashSize, ") not 0")
+ }
+}
+
func TestThrottling(t *testing.T) {
minDesiredPeerCount = 4
blockTtl = 1 * time.Second