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