// +build unittest package namecoin import ( "bytes" "encoding/hex" "fmt" "io/ioutil" "os" "path/filepath" "reflect" "testing" "github.com/martinboehm/btcutil/chaincfg" "spacecruft.org/spacecruft/blockbook/bchain/coins/btc" ) func TestMain(m *testing.M) { c := m.Run() chaincfg.ResetParams() os.Exit(c) } func Test_GetAddrDescFromAddress_Mainnet(t *testing.T) { type args struct { address string } tests := []struct { name string args args want string wantErr bool }{ { name: "P2PKH1", args: args{address: "MzBvZ4F759X6wHTjzwkMEbKh12am3PHT6F"}, want: "76a91427a1f12771de5cc3b73941664b2537c15316be4388ac", wantErr: false, }, { name: "P2PKH2", args: args{address: "N8Jkcm44Uq55GdmPojkpuGyoW4Cm658TwW"}, want: "76a91480ad90d403581fa3bf46086a91b2d9d4125db6c188ac", wantErr: false, }, } parser := NewNamecoinParser(GetChainParams("main"), &btc.Configuration{}) for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got, err := parser.GetAddrDescFromAddress(tt.args.address) if (err != nil) != tt.wantErr { t.Errorf("GetAddrDescFromAddress() error = %v, wantErr %v", err, tt.wantErr) return } h := hex.EncodeToString(got) if !reflect.DeepEqual(h, tt.want) { t.Errorf("GetAddrDescFromAddress() = %v, want %v", h, tt.want) } }) } } type testBlock struct { size int time int64 txs []string } var testParseBlockTxs = map[int]testBlock{ 40000: { size: 1385, time: 1327728573, txs: []string{ "e193a821393b20b99f4a4e05a481368ef8a8cfd43d0c45bdad7f53bc9535e844", "ddcbf95797e81dd04127885bd001e96695b717e11c52721f6e8ee53f6dea8a6f", "31ff728f24200f59fa4958e6c26de03d172b320e6eef2b8abecf6f94d01dd4ae", }, }, } func helperLoadBlock(t *testing.T, height int) []byte { name := fmt.Sprintf("block_dump.%d", height) path := filepath.Join("testdata", name) d, err := ioutil.ReadFile(path) if err != nil { t.Fatal(err) } d = bytes.TrimSpace(d) b := make([]byte, hex.DecodedLen(len(d))) _, err = hex.Decode(b, d) if err != nil { t.Fatal(err) } return b } func TestParseBlock(t *testing.T) { p := NewNamecoinParser(GetChainParams("main"), &btc.Configuration{}) for height, tb := range testParseBlockTxs { b := helperLoadBlock(t, height) blk, err := p.ParseBlock(b) if err != nil { t.Fatal(err) } if blk.Size != tb.size { t.Errorf("ParseBlock() block size: got %d, want %d", blk.Size, tb.size) } if blk.Time != tb.time { t.Errorf("ParseBlock() block time: got %d, want %d", blk.Time, tb.time) } if len(blk.Txs) != len(tb.txs) { t.Errorf("ParseBlock() number of transactions: got %d, want %d", len(blk.Txs), len(tb.txs)) } for ti, tx := range tb.txs { if blk.Txs[ti].Txid != tx { t.Errorf("ParseBlock() transaction %d: got %s, want %s", ti, blk.Txs[ti].Txid, tx) } } } }