github.com/aychain/blockbook@v0.1.1-0.20181121092459-6d1fc7e07c5b/bchain/coins/grs/grsparser_test.go (about)

     1  // +build unittest
     2  
     3  package grs
     4  
     5  import (
     6  	"blockbook/bchain"
     7  	"blockbook/bchain/coins/btc"
     8  	"bytes"
     9  	"encoding/hex"
    10  	"math/big"
    11  	"os"
    12  	"reflect"
    13  	"testing"
    14  
    15  	"github.com/jakm/btcutil/chaincfg"
    16  )
    17  
    18  var (
    19  	testTx1, testTx2 bchain.Tx
    20  
    21  	testTxPacked1 = "0a20f56521b17b828897f72b30dd21b0192fd942342e89acbb06abf1d446282c30f512bf0101000000014a9d1fdba915e0907ab02f04f88898863112a2b4fdcf872c7414588c47c874cb000000006a47304402201fb96d20d0778f54520ab59afe70d5fb20e500ecc9f02281cf57934e8029e8e10220383d5a3e80f2e1eb92765b6da0f23d454aecbd8236f083d483e9a7430236876101210331693756f749180aeed0a65a0fab0625a2250bd9abca502282a4cf0723152e67ffffffff01a0330300000000001976a914fe40329c95c5598ac60752a5310b320cb52d18e688ac0000000018ffff87da05200028a6f383013298010a001220cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a1800226a47304402201fb96d20d0778f54520ab59afe70d5fb20e500ecc9f02281cf57934e8029e8e10220383d5a3e80f2e1eb92765b6da0f23d454aecbd8236f083d483e9a7430236876101210331693756f749180aeed0a65a0fab0625a2250bd9abca502282a4cf0723152e6728ffffffff0f3a460a030333a010001a1976a914fe40329c95c5598ac60752a5310b320cb52d18e688ac222246744d347a416e39615659674867786d616d5742675750795a7362365268766b4139"
    22  	testTxPacked2 = "0a209b5c4859a8a31e69788cb4402812bb28f14ad71cbd8c60b09903478bc56f79a312e00101000000000101d1613f483f2086d076c82fe34674385a86beb08f052d5405fe1aed397f852f4f0000000000feffffff02404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987a8386f0000000000160014cc8067093f6f843d6d3e22004a4290cd0c0f336b02483045022100ea8780bc1e60e14e945a80654a41748bbf1aa7d6f2e40a88d91dfc2de1f34bd10220181a474a3420444bd188501d8d270736e1e9fe379da9970de992ff445b0972e3012103adc58245cf28406af0ef5cc24b8afba7f1be6c72f279b642d85c48798685f862d9ed090018caa384da0520d9db2728dadb27322c0a0012204f2f857f39ed1afe05542d058fb0be865a387446e32fc876d086203f483f61d1180028feffffff0f3a450a034c4b4010001a17a9147a55d61848e77ca266e79a39bfc85c580a6426c9872223324e345135466855323439374272794666556762716b414a453837614b4476335633653a4d0a036f38a810011a160014cc8067093f6f843d6d3e22004a4290cd0c0f336b222c746772733171656a7178777a666c64377a72366d663779677179357335736535787137766d74396c6b643537"
    23  )
    24  
    25  func init() {
    26  	testTx1 = bchain.Tx{
    27  		Hex:       "01000000014a9d1fdba915e0907ab02f04f88898863112a2b4fdcf872c7414588c47c874cb000000006a47304402201fb96d20d0778f54520ab59afe70d5fb20e500ecc9f02281cf57934e8029e8e10220383d5a3e80f2e1eb92765b6da0f23d454aecbd8236f083d483e9a7430236876101210331693756f749180aeed0a65a0fab0625a2250bd9abca502282a4cf0723152e67ffffffff01a0330300000000001976a914fe40329c95c5598ac60752a5310b320cb52d18e688ac00000000",
    28  		Blocktime: 1531052031,
    29  		Time:      1531052031,
    30  		Txid:      "f56521b17b828897f72b30dd21b0192fd942342e89acbb06abf1d446282c30f5",
    31  		LockTime:  0,
    32  		Vin: []bchain.Vin{
    33  			{
    34  				ScriptSig: bchain.ScriptSig{
    35  					Hex: "47304402201fb96d20d0778f54520ab59afe70d5fb20e500ecc9f02281cf57934e8029e8e10220383d5a3e80f2e1eb92765b6da0f23d454aecbd8236f083d483e9a7430236876101210331693756f749180aeed0a65a0fab0625a2250bd9abca502282a4cf0723152e67",
    36  				},
    37  				Txid:     "cb74c8478c5814742c87cffdb4a21231869888f8042fb07a90e015a9db1f9d4a",
    38  				Vout:     0,
    39  				Sequence: 4294967295,
    40  			},
    41  		},
    42  		Vout: []bchain.Vout{
    43  			{
    44  				ValueSat: *big.NewInt(209824),
    45  				N:        0,
    46  				ScriptPubKey: bchain.ScriptPubKey{
    47  					Hex: "76a914fe40329c95c5598ac60752a5310b320cb52d18e688ac",
    48  					Addresses: []string{
    49  						"FtM4zAn9aVYgHgxmamWBgWPyZsb6RhvkA9",
    50  					},
    51  				},
    52  			},
    53  		},
    54  	}
    55  
    56  	testTx2 = bchain.Tx{
    57  		Hex:       "01000000000101d1613f483f2086d076c82fe34674385a86beb08f052d5405fe1aed397f852f4f0000000000feffffff02404b4c000000000017a9147a55d61848e77ca266e79a39bfc85c580a6426c987a8386f0000000000160014cc8067093f6f843d6d3e22004a4290cd0c0f336b02483045022100ea8780bc1e60e14e945a80654a41748bbf1aa7d6f2e40a88d91dfc2de1f34bd10220181a474a3420444bd188501d8d270736e1e9fe379da9970de992ff445b0972e3012103adc58245cf28406af0ef5cc24b8afba7f1be6c72f279b642d85c48798685f862d9ed0900",
    58  		Blocktime: 1530991050,
    59  		Time:      1530991050,
    60  		Txid:      "9b5c4859a8a31e69788cb4402812bb28f14ad71cbd8c60b09903478bc56f79a3",
    61  		LockTime:  650713,
    62  		Vin: []bchain.Vin{
    63  			{
    64  				ScriptSig: bchain.ScriptSig{
    65  					Hex: "",
    66  				},
    67  				Txid:     "4f2f857f39ed1afe05542d058fb0be865a387446e32fc876d086203f483f61d1",
    68  				Vout:     0,
    69  				Sequence: 4294967294,
    70  			},
    71  		},
    72  		Vout: []bchain.Vout{
    73  			{
    74  				ValueSat: *big.NewInt(5000000),
    75  				N:        0,
    76  				ScriptPubKey: bchain.ScriptPubKey{
    77  					Hex: "a9147a55d61848e77ca266e79a39bfc85c580a6426c987",
    78  					Addresses: []string{
    79  						"2N4Q5FhU2497BryFfUgbqkAJE87aKDv3V3e",
    80  					},
    81  				},
    82  			},
    83  			{
    84  				ValueSat: *big.NewInt(7289000),
    85  				N:        1,
    86  				ScriptPubKey: bchain.ScriptPubKey{
    87  					Hex: "0014cc8067093f6f843d6d3e22004a4290cd0c0f336b",
    88  					Addresses: []string{
    89  						"tgrs1qejqxwzfld7zr6mf7ygqy5s5se5xq7vmt9lkd57",
    90  					},
    91  				},
    92  			},
    93  		},
    94  	}
    95  }
    96  
    97  func TestMain(m *testing.M) {
    98  	c := m.Run()
    99  	chaincfg.ResetParams()
   100  	os.Exit(c)
   101  }
   102  
   103  func TestGetAddrDesc(t *testing.T) {
   104  	type args struct {
   105  		tx     bchain.Tx
   106  		parser *GroestlcoinParser
   107  	}
   108  	tests := []struct {
   109  		name string
   110  		args args
   111  	}{
   112  		{
   113  			name: "grs-1",
   114  			args: args{
   115  				tx:     testTx1,
   116  				parser: NewGroestlcoinParser(GetChainParams("main"), &btc.Configuration{}),
   117  			},
   118  		},
   119  		{
   120  			name: "grs-2",
   121  			args: args{
   122  				tx:     testTx2,
   123  				parser: NewGroestlcoinParser(GetChainParams("test"), &btc.Configuration{}),
   124  			},
   125  		},
   126  	}
   127  	for _, tt := range tests {
   128  		t.Run(tt.name, func(t *testing.T) {
   129  			for n, vout := range tt.args.tx.Vout {
   130  				got1, err := tt.args.parser.GetAddrDescFromVout(&vout)
   131  				if err != nil {
   132  					t.Errorf("getAddrDescFromVout() error = %v, vout = %d", err, n)
   133  					return
   134  				}
   135  				got2, err := tt.args.parser.GetAddrDescFromAddress(vout.ScriptPubKey.Addresses[0])
   136  				if err != nil {
   137  					t.Errorf("getAddrDescFromAddress() error = %v, vout = %d", err, n)
   138  					return
   139  				}
   140  				if !bytes.Equal(got1, got2) {
   141  					t.Errorf("Address descriptors mismatch: got1 = %v, got2 = %v", got1, got2)
   142  				}
   143  			}
   144  		})
   145  	}
   146  }
   147  
   148  func TestPackTx(t *testing.T) {
   149  	type args struct {
   150  		tx        bchain.Tx
   151  		height    uint32
   152  		blockTime int64
   153  		parser    *GroestlcoinParser
   154  	}
   155  	tests := []struct {
   156  		name    string
   157  		args    args
   158  		want    string
   159  		wantErr bool
   160  	}{
   161  		{
   162  			name: "grs-1",
   163  			args: args{
   164  				tx:        testTx1,
   165  				height:    2161062,
   166  				blockTime: 1531052031,
   167  				parser:    NewGroestlcoinParser(GetChainParams("main"), &btc.Configuration{}),
   168  			},
   169  			want:    testTxPacked1,
   170  			wantErr: false,
   171  		},
   172  		{
   173  			name: "grs-2",
   174  			args: args{
   175  				tx:        testTx2,
   176  				height:    650714,
   177  				blockTime: 1530991050,
   178  				parser:    NewGroestlcoinParser(GetChainParams("test"), &btc.Configuration{}),
   179  			},
   180  			want:    testTxPacked2,
   181  			wantErr: false,
   182  		},
   183  	}
   184  	for _, tt := range tests {
   185  		t.Run(tt.name, func(t *testing.T) {
   186  			got, err := tt.args.parser.PackTx(&tt.args.tx, tt.args.height, tt.args.blockTime)
   187  			if (err != nil) != tt.wantErr {
   188  				t.Errorf("packTx() error = %v, wantErr %v", err, tt.wantErr)
   189  				return
   190  			}
   191  			h := hex.EncodeToString(got)
   192  			if !reflect.DeepEqual(h, tt.want) {
   193  				t.Errorf("packTx() = %v, want %v", h, tt.want)
   194  			}
   195  		})
   196  	}
   197  }
   198  
   199  func TestUnpackTx(t *testing.T) {
   200  	type args struct {
   201  		packedTx string
   202  		parser   *GroestlcoinParser
   203  	}
   204  	tests := []struct {
   205  		name    string
   206  		args    args
   207  		want    *bchain.Tx
   208  		want1   uint32
   209  		wantErr bool
   210  	}{
   211  		{
   212  			name: "grs-1",
   213  			args: args{
   214  				packedTx: testTxPacked1,
   215  				parser:   NewGroestlcoinParser(GetChainParams("main"), &btc.Configuration{}),
   216  			},
   217  			want:    &testTx1,
   218  			want1:   2161062,
   219  			wantErr: false,
   220  		},
   221  		{
   222  			name: "grs-2",
   223  			args: args{
   224  				packedTx: testTxPacked2,
   225  				parser:   NewGroestlcoinParser(GetChainParams("test"), &btc.Configuration{}),
   226  			},
   227  			want:    &testTx2,
   228  			want1:   650714,
   229  			wantErr: false,
   230  		},
   231  	}
   232  	for _, tt := range tests {
   233  		t.Run(tt.name, func(t *testing.T) {
   234  			b, _ := hex.DecodeString(tt.args.packedTx)
   235  			got, got1, err := tt.args.parser.UnpackTx(b)
   236  			if (err != nil) != tt.wantErr {
   237  				t.Errorf("unpackTx() error = %v, wantErr %v", err, tt.wantErr)
   238  				return
   239  			}
   240  			if !reflect.DeepEqual(got, tt.want) {
   241  				t.Errorf("unpackTx() got = %v, want %v", got, tt.want)
   242  			}
   243  			if got1 != tt.want1 {
   244  				t.Errorf("unpackTx() got1 = %v, want %v", got1, tt.want1)
   245  			}
   246  		})
   247  	}
   248  }