diff options
author | obscuren <geffobscura@gmail.com> | 2015-05-10 06:34:07 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2015-05-10 06:34:07 +0800 |
commit | 05715f27cfd68387f720db115bb8461f8725a341 (patch) | |
tree | 33a78a81f0caa8a5c1c30aa3286d52796b2faac8 /eth/downloader/downloader_test.go | |
parent | 45dc690947ebfe9fb3dc64ba3c74fb433b0f474d (diff) | |
download | dexon-05715f27cfd68387f720db115bb8461f8725a341.tar dexon-05715f27cfd68387f720db115bb8461f8725a341.tar.gz dexon-05715f27cfd68387f720db115bb8461f8725a341.tar.bz2 dexon-05715f27cfd68387f720db115bb8461f8725a341.tar.lz dexon-05715f27cfd68387f720db115bb8461f8725a341.tar.xz dexon-05715f27cfd68387f720db115bb8461f8725a341.tar.zst dexon-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.go | 43 |
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 |