profile_test.go raw
1 package chain
2
3 import (
4 "encoding/hex"
5 "testing"
6
7 "git.smesh.lol/nostrino/pkg/crypto/chainhash"
8 )
9
10 func TestParseProfile(t *testing.T) {
11 rawHeader := Regtest.GenesisHeader.Serialize()
12 header := hex.EncodeToString(rawHeader[:])
13 raw := `{
14 "name": "xbt",
15 "magic": "fabfb5da",
16 "genesis_header": "` + header + `",
17 "genesis_hash": "` + Regtest.GenesisHash.String() + `",
18 "p2p_port": "19444",
19 "bech32_hrp": "xbt",
20 "coin_type": 7332,
21 "checkpoint": {
22 "height": 100,
23 "block_hash": "` + chainhash.DoubleHashH([]byte("b")).String() + `",
24 "filter_header": "` + chainhash.DoubleHashH([]byte("f")).String() + `"
25 }
26 }`
27 p, err := ParseProfile([]byte(raw))
28 if err != nil {
29 t.Fatalf("parse: %v", err)
30 }
31 if p.Name != "xbt" || p.Magic != 0xfabfb5da || p.Bech32HRP != "xbt" || p.CoinType != 7332 {
32 t.Fatalf("profile %#v", p)
33 }
34 if p.Checkpoint == nil || p.Checkpoint.Height != 100 {
35 t.Fatalf("checkpoint %#v", p.Checkpoint)
36 }
37 if p.GenesisHash != Regtest.GenesisHash {
38 t.Fatal("genesis hash mismatch")
39 }
40 }
41
42 func TestParseProfileRejectsMismatch(t *testing.T) {
43 rawHeader := Regtest.GenesisHeader.Serialize()
44 header := hex.EncodeToString(rawHeader[:])
45 bad := `{
46 "name": "bad",
47 "magic": "fabfb5da",
48 "genesis_header": "` + header + `",
49 "genesis_hash": "` + chainhash.DoubleHashH([]byte("other")).String() + `"
50 }`
51 if _, err := ParseProfile([]byte(bad)); err == nil {
52 t.Fatal("accepted a genesis header that does not match its hash")
53 }
54 if _, err := ParseProfile([]byte(`{"name":"x","magic":"zz","genesis_header":"00","genesis_hash":"00"}`)); err == nil {
55 t.Fatal("accepted malformed hex")
56 }
57 }
58