OSDN Git Service

init for remove issue (#63)
[bytom/vapor.git] / protocol / bc / types / txinput_test.go
1 package types
2
3 import (
4         "bytes"
5         "encoding/hex"
6         "strings"
7         "testing"
8
9         "github.com/davecgh/go-spew/spew"
10
11         "github.com/vapor/encoding/blockchain"
12         "github.com/vapor/testutil"
13 )
14
15 func TestSerializationSpend(t *testing.T) {
16         arguments := [][]byte{
17                 []byte("arguments1"),
18                 []byte("arguments2"),
19         }
20         spend := NewSpendInput(arguments, testutil.MustDecodeHash("fad5195a0c8e3b590b86a3c0a95e7529565888508aecca96e9aeda633002f409"), testutil.MustDecodeAsset("fe9791d71b67ee62515e08723c061b5ccb952a80d804417c8aeedf7f633c524a"), 254354, 3, []byte("spendProgram"))
21
22         wantHex := strings.Join([]string{
23                 "01", // asset version
24                 "54", // input commitment length
25                 "01", // spend type flag
26                 "52", // spend commitment length
27                 "fad5195a0c8e3b590b86a3c0a95e7529565888508aecca96e9aeda633002f409", // source id
28                 "fe9791d71b67ee62515e08723c061b5ccb952a80d804417c8aeedf7f633c524a", // assetID
29                 "92c30f",                   // amount
30                 "03",                       // source position
31                 "01",                       // vm version
32                 "0c",                       // spend program length
33                 "7370656e6450726f6772616d", // spend program
34                 "17",                       // witness length
35                 "02",                       // argument array length
36                 "0a",                       // first argument length
37                 "617267756d656e747331",     // first argument data
38                 "0a",                       // second argument length
39                 "617267756d656e747332",     // second argument data
40         }, "")
41
42         // Test convert struct to hex
43         var buffer bytes.Buffer
44         if err := spend.writeTo(&buffer); err != nil {
45                 t.Fatal(err)
46         }
47
48         gotHex := hex.EncodeToString(buffer.Bytes())
49         if gotHex != wantHex {
50                 t.Errorf("serialization bytes = %s want %s", gotHex, wantHex)
51         }
52
53         // Test convert hex to struct
54         var gotSpend TxInput
55         decodeHex, err := hex.DecodeString(wantHex)
56         if err != nil {
57                 t.Fatal(err)
58         }
59
60         if err := gotSpend.readFrom(blockchain.NewReader(decodeHex)); err != nil {
61                 t.Fatal(err)
62         }
63
64         if !testutil.DeepEqual(*spend, gotSpend) {
65                 t.Errorf("expected marshaled/unmarshaled txinput to be:\n%sgot:\n%s", spew.Sdump(*spend), spew.Sdump(gotSpend))
66         }
67 }
68
69 func TestSerializationCoinbase(t *testing.T) {
70         coinbase := NewCoinbaseInput([]byte("arbitrary"))
71         wantHex := strings.Join([]string{
72                 "01",                 // asset version
73                 "0b",                 // input commitment length
74                 "02",                 // coinbase type flag
75                 "09",                 // arbitrary length
76                 "617262697472617279", // arbitrary data
77                 "00",                 // witness length
78         }, "")
79
80         // Test convert struct to hex
81         var buffer bytes.Buffer
82         if err := coinbase.writeTo(&buffer); err != nil {
83                 t.Fatal(err)
84         }
85
86         gotHex := hex.EncodeToString(buffer.Bytes())
87         if gotHex != wantHex {
88                 t.Errorf("serialization bytes = %s want %s", gotHex, wantHex)
89         }
90
91         // Test convert hex to struct
92         var gotCoinbase TxInput
93         decodeHex, err := hex.DecodeString(wantHex)
94         if err != nil {
95                 t.Fatal(err)
96         }
97
98         if err := gotCoinbase.readFrom(blockchain.NewReader(decodeHex)); err != nil {
99                 t.Fatal(err)
100         }
101
102         if !testutil.DeepEqual(*coinbase, gotCoinbase) {
103                 t.Errorf("expected marshaled/unmarshaled txinput to be:\n%sgot:\n%s", spew.Sdump(*coinbase), spew.Sdump(gotCoinbase))
104         }
105 }