diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go index d13818b370..fe68ea9140 100644 --- a/eth/downloader/downloader_test.go +++ b/eth/downloader/downloader_test.go @@ -23,12 +23,19 @@ func createHashes(start, amount int) (hashes []common.Hash) { return } +func createBlock(i int, prevHash, hash common.Hash) *types.Block { + header := &types.Header{Number: big.NewInt(int64(i))} + block := types.NewBlockWithHeader(header) + block.HeaderHash = hash + block.ParentHeaderHash = knownHash + return block +} + func createBlocksFromHashes(hashes []common.Hash) map[common.Hash]*types.Block { blocks := make(map[common.Hash]*types.Block) + for i, hash := range hashes { - header := &types.Header{Number: big.NewInt(int64(len(hashes) - i))} - blocks[hash] = types.NewBlockWithHeader(header) - blocks[hash].HeaderHash = hash + blocks[hash] = createBlock(len(hashes)-i, knownHash, hash) } return blocks @@ -162,7 +169,7 @@ func TestTaking(t *testing.T) { t.Error("download error", err) } - bs1 := tester.downloader.TakeBlocks(1000) + bs1 := tester.downloader.TakeBlocks() if len(bs1) != 1000 { t.Error("expected to take 1000, got", len(bs1)) } diff --git a/eth/downloader/queue_test.go b/eth/downloader/queue_test.go new file mode 100644 index 0000000000..b163bd9c77 --- /dev/null +++ b/eth/downloader/queue_test.go @@ -0,0 +1,62 @@ +package downloader + +import ( + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "gopkg.in/fatih/set.v0" +) + +func createHashSet(hashes []common.Hash) *set.Set { + hset := set.New() + + for _, hash := range hashes { + hset.Add(hash) + } + + return hset +} + +func createBlocksFromHashSet(hashes *set.Set) []*types.Block { + blocks := make([]*types.Block, hashes.Size()) + + var i int + hashes.Each(func(v interface{}) bool { + blocks[i] = createBlock(i, common.Hash{}, v.(common.Hash)) + i++ + return true + }) + + return blocks +} + +func TestChunking(t *testing.T) { + queue := newqueue() + peer1 := newPeer("peer1", common.Hash{}, nil, nil) + peer2 := newPeer("peer2", common.Hash{}, nil, nil) + + // 99 + 1 (1 == known genesis hash) + hashes := createHashes(0, 99) + hashSet := createHashSet(hashes) + queue.put(hashSet) + + chunk1 := queue.get(peer1, 99) + if chunk1 == nil { + t.Errorf("chunk1 is nil") + t.FailNow() + } + chunk2 := queue.get(peer2, 99) + if chunk2 == nil { + t.Errorf("chunk2 is nil") + t.FailNow() + } + + if chunk1.hashes.Size() != 99 { + t.Error("expected chunk1 hashes to be 99, got", chunk1.hashes.Size()) + } + + if chunk2.hashes.Size() != 1 { + t.Error("expected chunk1 hashes to be 1, got", chunk2.hashes.Size()) + } +}