cmd/utils: better defer handling in history test

This commit is contained in:
lightclient@protonmail.com 2023-06-02 17:08:07 +02:00 committed by lightclient
parent 3fa17e775f
commit 02b3f1983e
No known key found for this signature in database
GPG key ID: 75C916AFEE20183E

View file

@ -107,56 +107,58 @@ func TestHistoryImportAndExport(t *testing.T) {
// Verify each Era. // Verify each Era.
entries, _ := era.ReadDir(dir, "mainnet") entries, _ := era.ReadDir(dir, "mainnet")
for i, filename := range entries { for i, filename := range entries {
f, err := os.Open(path.Join(dir, filename)) func() {
if err != nil { f, err := os.Open(path.Join(dir, filename))
t.Fatalf("error opening era file: %v", err)
}
var (
h = sha256.New()
buf = bytes.NewBuffer(nil)
)
if _, err := io.Copy(h, f); err != nil {
t.Fatalf("unable to recalculate checksum: %v", err)
}
if got, want := common.BytesToHash(h.Sum(buf.Bytes()[:])).Hex(), checksums[i]; got != want {
t.Fatalf("checksum %d does not match: got %s, want %s", i, got, want)
}
e, err := era.From(f)
if err != nil {
t.Fatalf("error opening era: %v", err)
}
it, err := era.NewIterator(e)
if err != nil {
t.Fatalf("error making era reader: %v", err)
}
for j := 0; it.Next(); j++ {
n := i*int(step) + j
if it.Error() != nil {
t.Fatalf("error reading block entry %d: %v", n, err)
}
block, receipts, err := it.BlockAndReceipts()
if err != nil { if err != nil {
t.Fatalf("error reading block entry %d: %v", n, err) t.Fatalf("error opening era file: %v", err)
} }
want := chain.GetBlockByNumber(uint64(n)) var (
if want, got := uint64(n), block.NumberU64(); want != got { h = sha256.New()
t.Fatalf("blocks out of order: want %d, got %d", want, got) buf = bytes.NewBuffer(nil)
)
if _, err := io.Copy(h, f); err != nil {
t.Fatalf("unable to recalculate checksum: %v", err)
} }
if want.Hash() != block.Hash() { if got, want := common.BytesToHash(h.Sum(buf.Bytes()[:])).Hex(), checksums[i]; got != want {
t.Fatalf("block hash mismatch %d: want %s, got %s", n, want.Hash().Hex(), block.Hash().Hex()) t.Fatalf("checksum %d does not match: got %s, want %s", i, got, want)
} }
if got := types.DeriveSha(block.Transactions(), trie.NewStackTrie(nil)); got != want.TxHash() { e, err := era.From(f)
t.Fatalf("tx hash %d mismatch: want %s, got %s", n, want.TxHash(), got) if err != nil {
t.Fatalf("error opening era: %v", err)
} }
if got := types.CalcUncleHash(block.Uncles()); got != want.UncleHash() { defer e.Close()
t.Fatalf("uncle hash %d mismatch: want %s, got %s", n, want.UncleHash(), got) it, err := era.NewIterator(e)
if err != nil {
t.Fatalf("error making era reader: %v", err)
} }
if got := types.DeriveSha(receipts, trie.NewStackTrie(nil)); got != want.ReceiptHash() { for j := 0; it.Next(); j++ {
t.Fatalf("receipt root %d mismatch: want %s, got %s", n, want.ReceiptHash(), got) n := i*int(step) + j
if it.Error() != nil {
t.Fatalf("error reading block entry %d: %v", n, err)
}
block, receipts, err := it.BlockAndReceipts()
if err != nil {
t.Fatalf("error reading block entry %d: %v", n, err)
}
want := chain.GetBlockByNumber(uint64(n))
if want, got := uint64(n), block.NumberU64(); want != got {
t.Fatalf("blocks out of order: want %d, got %d", want, got)
}
if want.Hash() != block.Hash() {
t.Fatalf("block hash mismatch %d: want %s, got %s", n, want.Hash().Hex(), block.Hash().Hex())
}
if got := types.DeriveSha(block.Transactions(), trie.NewStackTrie(nil)); got != want.TxHash() {
t.Fatalf("tx hash %d mismatch: want %s, got %s", n, want.TxHash(), got)
}
if got := types.CalcUncleHash(block.Uncles()); got != want.UncleHash() {
t.Fatalf("uncle hash %d mismatch: want %s, got %s", n, want.UncleHash(), got)
}
if got := types.DeriveSha(receipts, trie.NewStackTrie(nil)); got != want.ReceiptHash() {
t.Fatalf("receipt root %d mismatch: want %s, got %s", n, want.ReceiptHash(), got)
}
} }
} return
}()
} }
// Now import Era. // Now import Era.