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  }