package chain import ( "encoding/hex" "testing" "git.smesh.lol/nostrino/pkg/crypto/chainhash" ) func TestParseProfile(t *testing.T) { rawHeader := Regtest.GenesisHeader.Serialize() header := hex.EncodeToString(rawHeader[:]) raw := `{ "name": "xbt", "magic": "fabfb5da", "genesis_header": "` + header + `", "genesis_hash": "` + Regtest.GenesisHash.String() + `", "p2p_port": "19444", "bech32_hrp": "xbt", "coin_type": 7332, "checkpoint": { "height": 100, "block_hash": "` + chainhash.DoubleHashH([]byte("b")).String() + `", "filter_header": "` + chainhash.DoubleHashH([]byte("f")).String() + `" } }` p, err := ParseProfile([]byte(raw)) if err != nil { t.Fatalf("parse: %v", err) } if p.Name != "xbt" || p.Magic != 0xfabfb5da || p.Bech32HRP != "xbt" || p.CoinType != 7332 { t.Fatalf("profile %#v", p) } if p.Checkpoint == nil || p.Checkpoint.Height != 100 { t.Fatalf("checkpoint %#v", p.Checkpoint) } if p.GenesisHash != Regtest.GenesisHash { t.Fatal("genesis hash mismatch") } } func TestParseProfileRejectsMismatch(t *testing.T) { rawHeader := Regtest.GenesisHeader.Serialize() header := hex.EncodeToString(rawHeader[:]) bad := `{ "name": "bad", "magic": "fabfb5da", "genesis_header": "` + header + `", "genesis_hash": "` + chainhash.DoubleHashH([]byte("other")).String() + `" }` if _, err := ParseProfile([]byte(bad)); err == nil { t.Fatal("accepted a genesis header that does not match its hash") } if _, err := ParseProfile([]byte(`{"name":"x","magic":"zz","genesis_header":"00","genesis_hash":"00"}`)); err == nil { t.Fatal("accepted malformed hex") } }