1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package sources
import (
"embed"
"encoding/json"
"strings"
"testing"
"github.com/stretchr/testify/require"
)
//go:embed testdata
var blocksTestdata embed.FS
type testMetadata struct {
Name string `json:"name"`
Fail bool `json:"fail,omitempty"`
}
func readJsonTestdata(t *testing.T, name string, dest any) {
f, err := blocksTestdata.Open(name)
require.NoError(t, err, "must open %q", name)
require.NoError(t, json.NewDecoder(f).Decode(dest), "must json-decode %q", name)
require.NoError(t, f.Close(), "must close %q", name)
}
func TestBlockHeaderJSON(t *testing.T) {
headersDir, err := blocksTestdata.ReadDir("testdata/data/headers")
require.NoError(t, err)
for _, entry := range headersDir {
if !strings.HasSuffix(entry.Name(), "_metadata.json") {
continue
}
var metadata testMetadata
readJsonTestdata(t, "testdata/data/headers/"+entry.Name(), &metadata)
t.Run(metadata.Name, func(t *testing.T) {
var header rpcHeader
readJsonTestdata(t, "testdata/data/headers/"+strings.Replace(entry.Name(), "_metadata.json", "_data.json", 1), &header)
h := header.computeBlockHash()
if metadata.Fail {
require.NotEqual(t, h, header.Hash, "expecting verification error")
} else {
require.Equal(t, h, header.Hash, "blockhash should verify ok")
}
})
}
}
func TestBlockJSON(t *testing.T) {
blocksDir, err := blocksTestdata.ReadDir("testdata/data/blocks")
require.NoError(t, err)
for _, entry := range blocksDir {
if !strings.HasSuffix(entry.Name(), "_metadata.json") {
continue
}
var metadata testMetadata
readJsonTestdata(t, "testdata/data/blocks/"+entry.Name(), &metadata)
t.Run(metadata.Name, func(t *testing.T) {
var block rpcBlock
readJsonTestdata(t, "testdata/data/blocks/"+strings.Replace(entry.Name(), "_metadata.json", "_data.json", 1), &block)
err := block.verify()
if metadata.Fail {
require.NotNil(t, err, "expecting verification error")
} else {
require.NoError(t, err, "verification should pass")
}
})
}
}