blockbook/bchain/coins/vertcoin/vertcoinparser_test.go

209 lines
5.7 KiB
Go

// +build unittest
package vertcoin
import (
"blockbook/bchain"
"blockbook/bchain/coins/btc"
"encoding/hex"
"math/big"
"os"
"reflect"
"testing"
"github.com/martinboehm/btcutil/chaincfg"
)
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: "pubkeyhash1",
args: args{address: "Ve7SkjuVgVm1z3X8aqqxnzGV6GraUcde6K"},
want: "76a9142d20ebccc60a8b7dcba607701c6e5bda05eb6d9a88ac",
wantErr: false,
},
{
name: "pubkeyhash2",
args: args{address: "Vavx3LENdGctDMsaVm426McFE5iDDrSuk5"},
want: "76a9140a3c6a3970a5b6b94ee0c1da82d6a87899d169da88ac",
wantErr: false,
},
{
name: "scripthash1",
args: args{address: "36c8VAv74dPZZa4cFayb92hzozkPL4fBPe"},
want: "a91435ec06fa05f2d3b16e88cd7eda7651a10ca2e01987",
wantErr: false,
},
{
name: "scripthash2",
args: args{address: "38A1RNvbA5c9wNRfyLVn1FCH5TPKJVG8YR"},
want: "a91446eb90e002f137f05385896c882fe000cc2e967f87",
wantErr: false,
},
{
name: "witness_v0_keyhash",
args: args{address: "vtc1qd80qaputavyhtvszlz9zprueqch0qd003g520j"},
want: "001469de0e878beb0975b202f88a208f99062ef035ef",
wantErr: false,
},
}
parser := NewVertcoinParser(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)
}
})
}
}
var (
testTx1 bchain.Tx
testTxPacked1 = "000e87768bb386b878010000000146fd781834a34e0399ccda1edf9ec47d715e17d904ad0958d533a240b3605ad6000000006a473044022026b352a0c35c232342339e2b50ec9f04587b990d5213174e368cc76dc82686f002207d0787461ad846825872a50d3d6fc748d5a836575c1daf6ad0ca602f9c4a8826012103d36b6b829c571ed7caa565eca9bdc2aa36519b7ab8551ace5edb0356d477ad3cfdffffff020882a400000000001976a91499b16da88a7e29b913b6131df2644d6d06cb331b88ac80f0fa020000000017a91446eb90e002f137f05385896c882fe000cc2e967f8774870e00"
)
func init() {
testTx1 = bchain.Tx{
Hex: "010000000146fd781834a34e0399ccda1edf9ec47d715e17d904ad0958d533a240b3605ad6000000006a473044022026b352a0c35c232342339e2b50ec9f04587b990d5213174e368cc76dc82686f002207d0787461ad846825872a50d3d6fc748d5a836575c1daf6ad0ca602f9c4a8826012103d36b6b829c571ed7caa565eca9bdc2aa36519b7ab8551ace5edb0356d477ad3cfdffffff020882a400000000001976a91499b16da88a7e29b913b6131df2644d6d06cb331b88ac80f0fa020000000017a91446eb90e002f137f05385896c882fe000cc2e967f8774870e00",
Blocktime: 1529925180,
Txid: "d58c11aa970449c3e0ee5e0cdf78532435a9d2b28a2da284a8dd4dd6bdd0331c",
LockTime: 952180,
Version: 1,
Vin: []bchain.Vin{
{
ScriptSig: bchain.ScriptSig{
Hex: "473044022026b352a0c35c232342339e2b50ec9f04587b990d5213174e368cc76dc82686f002207d0787461ad846825872a50d3d6fc748d5a836575c1daf6ad0ca602f9c4a8826012103d36b6b829c571ed7caa565eca9bdc2aa36519b7ab8551ace5edb0356d477ad3c",
},
Txid: "d65a60b340a233d55809ad04d9175e717dc49edf1edacc99034ea3341878fd46",
Vout: 0,
Sequence: 4294967293,
},
},
Vout: []bchain.Vout{
{
ValueSat: *big.NewInt(10781192),
N: 0,
ScriptPubKey: bchain.ScriptPubKey{
Hex: "76a91499b16da88a7e29b913b6131df2644d6d06cb331b88ac",
Addresses: []string{
"Vp1UqzsmVecaexfbWFGSFFL5x1g2XQnrGR",
},
},
},
{
ValueSat: *big.NewInt(50000000),
N: 1,
ScriptPubKey: bchain.ScriptPubKey{
Hex: "a91446eb90e002f137f05385896c882fe000cc2e967f87",
Addresses: []string{
"38A1RNvbA5c9wNRfyLVn1FCH5TPKJVG8YR",
},
},
},
},
}
}
func Test_PackTx(t *testing.T) {
type args struct {
tx bchain.Tx
height uint32
blockTime int64
parser *VertcoinParser
}
tests := []struct {
name string
args args
want string
wantErr bool
}{
{
name: "vertcoin-1",
args: args{
tx: testTx1,
height: 952182,
blockTime: 1529925180,
parser: NewVertcoinParser(GetChainParams("main"), &btc.Configuration{}),
},
want: testTxPacked1,
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := tt.args.parser.PackTx(&tt.args.tx, tt.args.height, tt.args.blockTime)
if (err != nil) != tt.wantErr {
t.Errorf("packTx() error = %v, wantErr %v", err, tt.wantErr)
return
}
h := hex.EncodeToString(got)
if !reflect.DeepEqual(h, tt.want) {
t.Errorf("packTx() = %v, want %v", h, tt.want)
}
})
}
}
func Test_UnpackTx(t *testing.T) {
type args struct {
packedTx string
parser *VertcoinParser
}
tests := []struct {
name string
args args
want *bchain.Tx
want1 uint32
wantErr bool
}{
{
name: "vertcoin-1",
args: args{
packedTx: testTxPacked1,
parser: NewVertcoinParser(GetChainParams("main"), &btc.Configuration{}),
},
want: &testTx1,
want1: 952182,
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
b, _ := hex.DecodeString(tt.args.packedTx)
got, got1, err := tt.args.parser.UnpackTx(b)
if (err != nil) != tt.wantErr {
t.Errorf("unpackTx() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("unpackTx() got = %v, want %v", got, tt.want)
}
if got1 != tt.want1 {
t.Errorf("unpackTx() got1 = %v, want %v", got1, tt.want1)
}
})
}
}