github.com/aychain/blockbook@v0.1.1-0.20181121092459-6d1fc7e07c5b/bchain/coins/litecoin/litecoinparser_test.go (about) 1 // +build unittest 2 3 package litecoin 4 5 import ( 6 "blockbook/bchain" 7 "blockbook/bchain/coins/btc" 8 "encoding/hex" 9 "math/big" 10 "os" 11 "reflect" 12 "testing" 13 14 "github.com/jakm/btcutil/chaincfg" 15 ) 16 17 func TestMain(m *testing.M) { 18 c := m.Run() 19 chaincfg.ResetParams() 20 os.Exit(c) 21 } 22 23 func Test_GetAddrDescFromAddress_Testnet(t *testing.T) { 24 type args struct { 25 address string 26 } 27 tests := []struct { 28 name string 29 args args 30 want string 31 wantErr bool 32 }{ 33 { 34 name: "P2PKH1", 35 args: args{address: "mgPdTgEq6YqUJ4yzQgR8jH5TCX5c5yRwCP"}, 36 want: "76a91409957dfdb3eb620a94b99857e13949551584c33688ac", 37 wantErr: false, 38 }, 39 { 40 name: "P2SH1-legacy", 41 args: args{address: "2MvGVySztevmycxrSmMRjJaVj2iJin7qpap"}, 42 want: "a9142126232e3f47ae0f1246ec5f05fc400d83c86a0d87", 43 wantErr: false, 44 }, 45 { 46 name: "P2SH2-legacy", 47 args: args{address: "2N9a2TNzWz1FEKGFxUdMEh62V83URdZ5QAZ"}, 48 want: "a914b31049e7ee51501fe19e3e0cdb803dc84cf99f9e87", 49 wantErr: false, 50 }, 51 { 52 name: "P2SH1", 53 args: args{address: "QPdG6Ts8g2q4m9cVPTTkPGwAB6kYgXB7Hc"}, 54 want: "a9142126232e3f47ae0f1246ec5f05fc400d83c86a0d87", 55 wantErr: false, 56 }, 57 { 58 name: "P2SH2", 59 args: args{address: "QcvnaPrm17JKTT216jPFmnTvGRvFX2fWzN"}, 60 want: "a914b31049e7ee51501fe19e3e0cdb803dc84cf99f9e87", 61 wantErr: false, 62 }, 63 } 64 parser := NewLitecoinParser(GetChainParams("test"), &btc.Configuration{}) 65 66 for _, tt := range tests { 67 t.Run(tt.name, func(t *testing.T) { 68 got, err := parser.GetAddrDescFromAddress(tt.args.address) 69 if (err != nil) != tt.wantErr { 70 t.Errorf("GetAddrDescFromAddress() error = %v, wantErr %v", err, tt.wantErr) 71 return 72 } 73 h := hex.EncodeToString(got) 74 if !reflect.DeepEqual(h, tt.want) { 75 t.Errorf("GetAddrDescFromAddress() = %v, want %v", h, tt.want) 76 } 77 }) 78 } 79 } 80 81 func Test_GetAddrDescFromAddress_Mainnet(t *testing.T) { 82 type args struct { 83 address string 84 } 85 tests := []struct { 86 name string 87 args args 88 want string 89 wantErr bool 90 }{ 91 { 92 name: "P2PKH1", 93 args: args{address: "LgJGe7aKy1wfXESKhiKeRWj6z4KjzCfXNW"}, 94 want: "76a914e72ba56ab6afccac045d696b979e3b5077e88d1988ac", 95 wantErr: false, 96 }, 97 { 98 name: "P2PKH2", 99 args: args{address: "LiTVReQ6N8rWc2pNg2XMwCWq7A9P15teWg"}, 100 want: "76a914feda50542e61108cf53b93dbffa0959f91ccb32588ac", 101 wantErr: false, 102 }, 103 { 104 name: "P2SH1", 105 args: args{address: "MLTQ8niHMnpJLNvK72zBeY91hQmUtoo8nX"}, 106 want: "a91489ba6cf45546f91f1bdf553e695d63fc6b8795bd87", 107 wantErr: false, 108 }, 109 { 110 name: "P2SH2", 111 args: args{address: "MAVWzxXm8KGkZTesqLtqywzrvbs96FEoKy"}, 112 want: "a9141c6fbaf46d64221e80cbae182c33ddf81b9294ac87", 113 wantErr: false, 114 }, 115 { 116 name: "witness_v0_keyhash", 117 args: args{address: "ltc1q5fgkuac9s2ry56jka5s6zqsyfcugcchrqgz2yl"}, 118 want: "0014a2516e770582864a6a56ed21a102044e388c62e3", 119 wantErr: false, 120 }, 121 { 122 name: "witness_v0_scripthashx", 123 args: args{address: "ltc1qu9dgdg330r6r84g5mw7wqshg04exv2uttmw2elfwx74h5tgntuzsk3x5nd"}, 124 want: "0020e15a86a23178f433d514dbbce042e87d72662b8b5edcacfd2e37ab7a2d135f05", 125 wantErr: false, 126 }, 127 } 128 parser := NewLitecoinParser(GetChainParams("main"), &btc.Configuration{}) 129 130 for _, tt := range tests { 131 t.Run(tt.name, func(t *testing.T) { 132 got, err := parser.GetAddrDescFromAddress(tt.args.address) 133 if (err != nil) != tt.wantErr { 134 t.Errorf("GetAddrDescFromAddress() error = %v, wantErr %v", err, tt.wantErr) 135 return 136 } 137 h := hex.EncodeToString(got) 138 if !reflect.DeepEqual(h, tt.want) { 139 t.Errorf("GetAddrDescFromAddress() = %v, want %v", h, tt.want) 140 } 141 }) 142 } 143 } 144 145 var ( 146 testTx1 bchain.Tx 147 148 testTxPacked1 = "0001e4538ba8d7aa2002000000031e1977dc524bec5929e95d8d0946812944b7b5bda12f5b99fdf557773f2ee65e0100000000ffffffff8a398e44546dce0245452b90130e86832b21fd68f26662bc33aeb7c6c115d23c1900000000ffffffffb807ab93a7fcdff7af6d24581a4a18aa7c1db1ebecba2617a6805b009513940f0c00000000ffffffff020001a04a000000001976a9141ae882e788091732da6910595314447c9e38bd8d88ac27440f00000000001976a9146b474cbf0f6004329b630bdd4798f2c23d1751b688ac00000000" 149 ) 150 151 func init() { 152 testTx1 = bchain.Tx{ 153 Hex: "02000000031e1977dc524bec5929e95d8d0946812944b7b5bda12f5b99fdf557773f2ee65e0100000000ffffffff8a398e44546dce0245452b90130e86832b21fd68f26662bc33aeb7c6c115d23c1900000000ffffffffb807ab93a7fcdff7af6d24581a4a18aa7c1db1ebecba2617a6805b009513940f0c00000000ffffffff020001a04a000000001976a9141ae882e788091732da6910595314447c9e38bd8d88ac27440f00000000001976a9146b474cbf0f6004329b630bdd4798f2c23d1751b688ac00000000", 154 Blocktime: 1519053456, 155 Txid: "1c50c1770374d7de2f81a87463a5225bb620d25fd467536223a5b715a47c9e32", 156 LockTime: 0, 157 Version: 2, 158 Vin: []bchain.Vin{ 159 { 160 ScriptSig: bchain.ScriptSig{ 161 Hex: "", 162 }, 163 Txid: "5ee62e3f7757f5fd995b2fa1bdb5b744298146098d5de92959ec4b52dc77191e", 164 Vout: 1, 165 Sequence: 4294967295, 166 }, 167 { 168 ScriptSig: bchain.ScriptSig{ 169 Hex: "", 170 }, 171 Txid: "3cd215c1c6b7ae33bc6266f268fd212b83860e13902b454502ce6d54448e398a", 172 Vout: 25, 173 Sequence: 4294967295, 174 }, 175 { 176 ScriptSig: bchain.ScriptSig{ 177 Hex: "", 178 }, 179 Txid: "0f941395005b80a61726baecebb11d7caa184a1a58246daff7dffca793ab07b8", 180 Vout: 12, 181 Sequence: 4294967295, 182 }, 183 }, 184 Vout: []bchain.Vout{ 185 { 186 ValueSat: *big.NewInt(1252000000), 187 N: 0, 188 ScriptPubKey: bchain.ScriptPubKey{ 189 Hex: "76a9141ae882e788091732da6910595314447c9e38bd8d88ac", 190 Addresses: []string{ 191 "LMgENNXzzuPxp7vfMjDrCU44bsmrEMgqvc", 192 }, 193 }, 194 }, 195 { 196 ValueSat: *big.NewInt(1000487), 197 N: 1, 198 ScriptPubKey: bchain.ScriptPubKey{ 199 Hex: "76a9146b474cbf0f6004329b630bdd4798f2c23d1751b688ac", 200 Addresses: []string{ 201 "LV1ByjbJNFTHyFQqwqwdJXKJznYDzXzg4B", 202 }, 203 }, 204 }, 205 }, 206 } 207 } 208 209 func Test_PackTx(t *testing.T) { 210 type args struct { 211 tx bchain.Tx 212 height uint32 213 blockTime int64 214 parser *LitecoinParser 215 } 216 tests := []struct { 217 name string 218 args args 219 want string 220 wantErr bool 221 }{ 222 { 223 name: "litecoin-1", 224 args: args{ 225 tx: testTx1, 226 height: 123987, 227 blockTime: 1519053456, 228 parser: NewLitecoinParser(GetChainParams("main"), &btc.Configuration{}), 229 }, 230 want: testTxPacked1, 231 wantErr: false, 232 }, 233 } 234 for _, tt := range tests { 235 t.Run(tt.name, func(t *testing.T) { 236 got, err := tt.args.parser.PackTx(&tt.args.tx, tt.args.height, tt.args.blockTime) 237 if (err != nil) != tt.wantErr { 238 t.Errorf("packTx() error = %v, wantErr %v", err, tt.wantErr) 239 return 240 } 241 h := hex.EncodeToString(got) 242 if !reflect.DeepEqual(h, tt.want) { 243 t.Errorf("packTx() = %v, want %v", h, tt.want) 244 } 245 }) 246 } 247 } 248 249 func Test_UnpackTx(t *testing.T) { 250 type args struct { 251 packedTx string 252 parser *LitecoinParser 253 } 254 tests := []struct { 255 name string 256 args args 257 want *bchain.Tx 258 want1 uint32 259 wantErr bool 260 }{ 261 { 262 name: "litecoin-1", 263 args: args{ 264 packedTx: testTxPacked1, 265 parser: NewLitecoinParser(GetChainParams("main"), &btc.Configuration{}), 266 }, 267 want: &testTx1, 268 want1: 123987, 269 wantErr: false, 270 }, 271 } 272 for _, tt := range tests { 273 t.Run(tt.name, func(t *testing.T) { 274 b, _ := hex.DecodeString(tt.args.packedTx) 275 got, got1, err := tt.args.parser.UnpackTx(b) 276 if (err != nil) != tt.wantErr { 277 t.Errorf("unpackTx() error = %v, wantErr %v", err, tt.wantErr) 278 return 279 } 280 if !reflect.DeepEqual(got, tt.want) { 281 t.Errorf("unpackTx() got = %v, want %v", got, tt.want) 282 } 283 if got1 != tt.want1 { 284 t.Errorf("unpackTx() got1 = %v, want %v", got1, tt.want1) 285 } 286 }) 287 } 288 }