|
|
|
@ -115,6 +115,15 @@ func (dl *downloadTester) HasBlock(hash common.Hash, number uint64) bool { |
|
|
|
|
return dl.GetBlockByHash(hash) != nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// HasFastBlock checks if a block is present in the testers canonical chain.
|
|
|
|
|
func (dl *downloadTester) HasFastBlock(hash common.Hash, number uint64) bool { |
|
|
|
|
dl.lock.RLock() |
|
|
|
|
defer dl.lock.RUnlock() |
|
|
|
|
|
|
|
|
|
_, ok := dl.ownReceipts[hash] |
|
|
|
|
return ok |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// GetHeader retrieves a header from the testers canonical chain.
|
|
|
|
|
func (dl *downloadTester) GetHeaderByHash(hash common.Hash) *types.Header { |
|
|
|
|
dl.lock.RLock() |
|
|
|
@ -235,6 +244,7 @@ func (dl *downloadTester) InsertChain(blocks types.Blocks) (i int, err error) { |
|
|
|
|
dl.ownHeaders[block.Hash()] = block.Header() |
|
|
|
|
} |
|
|
|
|
dl.ownBlocks[block.Hash()] = block |
|
|
|
|
dl.ownReceipts[block.Hash()] = make(types.Receipts, 0) |
|
|
|
|
dl.stateDb.Put(block.Root().Bytes(), []byte{0x00}) |
|
|
|
|
dl.ownChainTd[block.Hash()] = new(big.Int).Add(dl.ownChainTd[block.ParentHash()], block.Difficulty()) |
|
|
|
|
} |
|
|
|
@ -375,28 +385,28 @@ func (dlp *downloadTesterPeer) RequestNodeData(hashes []common.Hash) error { |
|
|
|
|
// assertOwnChain checks if the local chain contains the correct number of items
|
|
|
|
|
// of the various chain components.
|
|
|
|
|
func assertOwnChain(t *testing.T, tester *downloadTester, length int) { |
|
|
|
|
// Mark this method as a helper to report errors at callsite, not in here
|
|
|
|
|
t.Helper() |
|
|
|
|
|
|
|
|
|
assertOwnForkedChain(t, tester, 1, []int{length}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// assertOwnForkedChain checks if the local forked chain contains the correct
|
|
|
|
|
// number of items of the various chain components.
|
|
|
|
|
func assertOwnForkedChain(t *testing.T, tester *downloadTester, common int, lengths []int) { |
|
|
|
|
// Mark this method as a helper to report errors at callsite, not in here
|
|
|
|
|
t.Helper() |
|
|
|
|
|
|
|
|
|
// Initialize the counters for the first fork
|
|
|
|
|
headers, blocks, receipts := lengths[0], lengths[0], lengths[0]-fsMinFullBlocks |
|
|
|
|
headers, blocks, receipts := lengths[0], lengths[0], lengths[0] |
|
|
|
|
|
|
|
|
|
if receipts < 0 { |
|
|
|
|
receipts = 1 |
|
|
|
|
} |
|
|
|
|
// Update the counters for each subsequent fork
|
|
|
|
|
for _, length := range lengths[1:] { |
|
|
|
|
headers += length - common |
|
|
|
|
blocks += length - common |
|
|
|
|
receipts += length - common - fsMinFullBlocks |
|
|
|
|
receipts += length - common |
|
|
|
|
} |
|
|
|
|
switch tester.downloader.mode { |
|
|
|
|
case FullSync: |
|
|
|
|
receipts = 1 |
|
|
|
|
case LightSync: |
|
|
|
|
if tester.downloader.mode == LightSync { |
|
|
|
|
blocks, receipts = 1, 1 |
|
|
|
|
} |
|
|
|
|
if hs := len(tester.ownHeaders); hs != headers { |
|
|
|
@ -1150,7 +1160,9 @@ func testSyncProgress(t *testing.T, protocol int, mode SyncMode) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func checkProgress(t *testing.T, d *Downloader, stage string, want ethereum.SyncProgress) { |
|
|
|
|
// Mark this method as a helper to report errors at callsite, not in here
|
|
|
|
|
t.Helper() |
|
|
|
|
|
|
|
|
|
p := d.Progress() |
|
|
|
|
p.KnownStates, p.PulledStates = 0, 0 |
|
|
|
|
want.KnownStates, want.PulledStates = 0, 0 |
|
|
|
|