From dff4197aef2e1c95bed84a7f39b8e29d92700ede Mon Sep 17 00:00:00 2001 From: Martin Boehm Date: Mon, 25 Jun 2018 14:15:11 +0200 Subject: [PATCH] Vertcoin parser test --- bchain/coins/vertcoin/vertcoin_test.go | 211 +++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 bchain/coins/vertcoin/vertcoin_test.go diff --git a/bchain/coins/vertcoin/vertcoin_test.go b/bchain/coins/vertcoin/vertcoin_test.go new file mode 100644 index 00000000..2331667f --- /dev/null +++ b/bchain/coins/vertcoin/vertcoin_test.go @@ -0,0 +1,211 @@ +// build unittest + +package vertcoin + +import ( + "blockbook/bchain" + "blockbook/bchain/coins/btc" + "encoding/hex" + "reflect" + "testing" +) + +func TestAddressToOutputScript_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.AddressToOutputScript(tt.args.address) + if (err != nil) != tt.wantErr { + t.Errorf("AddressToOutputScript() error = %v, wantErr %v", err, tt.wantErr) + return + } + h := hex.EncodeToString(got) + if !reflect.DeepEqual(h, tt.want) { + t.Errorf("AddressToOutputScript() = %v, want %v", h, tt.want) + } + }) + } +} + +var ( + testTx1 bchain.Tx + + testTxPacked1 = "000e87768bb386b878010000000146fd781834a34e0399ccda1edf9ec47d715e17d904ad0958d533a240b3605ad6000000006a473044022026b352a0c35c232342339e2b50ec9f04587b990d5213174e368cc76dc82686f002207d0787461ad846825872a50d3d6fc748d5a836575c1daf6ad0ca602f9c4a8826012103d36b6b829c571ed7caa565eca9bdc2aa36519b7ab8551ace5edb0356d477ad3cfdffffff020882a400000000001976a91499b16da88a7e29b913b6131df2644d6d06cb331b88ac80f0fa020000000017a91446eb90e002f137f05385896c882fe000cc2e967f8774870e00" +) + +func init() { + var ( + addr1, addr2 bchain.Address + err error + ) + addr1, err = bchain.NewBaseAddress("Vp1UqzsmVecaexfbWFGSFFL5x1g2XQnrGR") + if err == nil { + addr2, err = bchain.NewBaseAddress("38A1RNvbA5c9wNRfyLVn1FCH5TPKJVG8YR") + } + if err != nil { + panic(err) + } + + testTx1 = bchain.Tx{ + Hex: "010000000146fd781834a34e0399ccda1edf9ec47d715e17d904ad0958d533a240b3605ad6000000006a473044022026b352a0c35c232342339e2b50ec9f04587b990d5213174e368cc76dc82686f002207d0787461ad846825872a50d3d6fc748d5a836575c1daf6ad0ca602f9c4a8826012103d36b6b829c571ed7caa565eca9bdc2aa36519b7ab8551ace5edb0356d477ad3cfdffffff020882a400000000001976a91499b16da88a7e29b913b6131df2644d6d06cb331b88ac80f0fa020000000017a91446eb90e002f137f05385896c882fe000cc2e967f8774870e00", + Blocktime: 1529925180, + Txid: "d58c11aa970449c3e0ee5e0cdf78532435a9d2b28a2da284a8dd4dd6bdd0331c", + LockTime: 952180, + Vin: []bchain.Vin{ + { + ScriptSig: bchain.ScriptSig{ + Hex: "473044022026b352a0c35c232342339e2b50ec9f04587b990d5213174e368cc76dc82686f002207d0787461ad846825872a50d3d6fc748d5a836575c1daf6ad0ca602f9c4a8826012103d36b6b829c571ed7caa565eca9bdc2aa36519b7ab8551ace5edb0356d477ad3c", + }, + Txid: "d65a60b340a233d55809ad04d9175e717dc49edf1edacc99034ea3341878fd46", + Vout: 0, + Sequence: 4294967293, + }, + }, + Vout: []bchain.Vout{ + { + Value: 0.10781192, + N: 0, + ScriptPubKey: bchain.ScriptPubKey{ + Hex: "76a91499b16da88a7e29b913b6131df2644d6d06cb331b88ac", + Addresses: []string{ + "Vp1UqzsmVecaexfbWFGSFFL5x1g2XQnrGR", + }, + }, + Address: addr1, + }, + { + Value: 0.5000000, + N: 1, + ScriptPubKey: bchain.ScriptPubKey{ + Hex: "a91446eb90e002f137f05385896c882fe000cc2e967f87", + Addresses: []string{ + "38A1RNvbA5c9wNRfyLVn1FCH5TPKJVG8YR", + }, + }, + Address: addr2, + }, + }, + } +} + +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) + } + }) + } +}