mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 15:16:43 +00:00
core/rawdb: add test
This commit is contained in:
parent
c4313bcfc8
commit
e447da2305
3 changed files with 46 additions and 2 deletions
|
|
@ -737,6 +737,9 @@ func writeAncientBlock(op ethdb.AncientWriteOp, block *types.Block, header *type
|
|||
return nil
|
||||
}
|
||||
|
||||
// WriteAncientHeaderChain writes the supplied headers along with nil block
|
||||
// bodies and receipts into the ancient store. It's supposed to be used for
|
||||
// storing chain segment before the chain cutoff.
|
||||
func WriteAncientHeaderChain(db ethdb.AncientWriter, headers []*types.Header) (int64, error) {
|
||||
return db.ModifyAncients(func(op ethdb.AncientWriteOp) error {
|
||||
for _, header := range headers {
|
||||
|
|
|
|||
|
|
@ -464,6 +464,48 @@ func TestAncientStorage(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestWriteAncientHeaderChain(t *testing.T) {
|
||||
db, err := NewDatabaseWithFreezer(NewMemoryDatabase(), t.TempDir(), "", false)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create database with ancient backend")
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
// Create a test block
|
||||
var headers []*types.Header
|
||||
headers = append(headers, &types.Header{
|
||||
Number: big.NewInt(0),
|
||||
Extra: []byte("test block"),
|
||||
UncleHash: types.EmptyUncleHash,
|
||||
TxHash: types.EmptyTxsHash,
|
||||
ReceiptHash: types.EmptyReceiptsHash,
|
||||
})
|
||||
headers = append(headers, &types.Header{
|
||||
Number: big.NewInt(1),
|
||||
Extra: []byte("test block"),
|
||||
UncleHash: types.EmptyUncleHash,
|
||||
TxHash: types.EmptyTxsHash,
|
||||
ReceiptHash: types.EmptyReceiptsHash,
|
||||
})
|
||||
// Write and verify the header in the database
|
||||
WriteAncientHeaderChain(db, headers)
|
||||
|
||||
for _, header := range headers {
|
||||
if blob := ReadHeaderRLP(db, header.Hash(), header.Number.Uint64()); len(blob) == 0 {
|
||||
t.Fatalf("no header returned")
|
||||
}
|
||||
if h := ReadCanonicalHash(db, header.Number.Uint64()); h != header.Hash() {
|
||||
t.Fatalf("no canonical hash returned")
|
||||
}
|
||||
if blob := ReadBodyRLP(db, header.Hash(), header.Number.Uint64()); len(blob) != 0 {
|
||||
t.Fatalf("unexpected body returned")
|
||||
}
|
||||
if blob := ReadReceiptsRLP(db, header.Hash(), header.Number.Uint64()); len(blob) != 0 {
|
||||
t.Fatalf("unexpected body returned")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCanonicalHashIteration(t *testing.T) {
|
||||
var cases = []struct {
|
||||
from, to uint64
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@
|
|||
package downloader
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"sync"
|
||||
"time"
|
||||
|
|
@ -308,7 +307,7 @@ func (d *Downloader) fetchHeaders(from uint64) error {
|
|||
}
|
||||
}
|
||||
if h == nil {
|
||||
return errors.New("header at chain cutoff is not available")
|
||||
return fmt.Errorf("header at chain cutoff is not available, cutoff: %d", d.chainCutoffNumber)
|
||||
}
|
||||
if h.Hash() != d.chainCutoffHash {
|
||||
return fmt.Errorf("header at chain cutoff mismatched, want: %v, got: %v", d.chainCutoffHash, h.Hash())
|
||||
|
|
|
|||
Loading…
Reference in a new issue