OSDN Git Service

fix(bc): fix TxInput.SpentOutputID() (#242)
[bytom/vapor.git] / consensus / segwit / segwit_test.go
1 package segwit
2
3 import (
4         "encoding/hex"
5         "testing"
6 )
7
8 func TestConvertProgram(t *testing.T) {
9         cases := []struct {
10                 desc    string
11                 program string
12                 script  string
13                 fun     func(prog []byte) ([]byte, error)
14         }{
15                 {
16                         desc:    "multi sign 2-1",
17                         program: "0020e402787b2bf9749f8fcdcc132a44e86bacf36780ec5df2189a11020d590533ee",
18                         script:  "76aa20e402787b2bf9749f8fcdcc132a44e86bacf36780ec5df2189a11020d590533ee8808ffffffffffffffff7c00c0",
19                         fun:     ConvertP2SHProgram,
20                 },
21                 {
22                         desc:    "multi sign 5-3",
23                         program: "00200824e931fb806bd77fdcd291aad3bd0a4493443a4120062bd659e64a3e0bac66",
24                         script:  "76aa200824e931fb806bd77fdcd291aad3bd0a4493443a4120062bd659e64a3e0bac668808ffffffffffffffff7c00c0",
25                         fun:     ConvertP2SHProgram,
26                 },
27                 {
28                         desc:    "single sign",
29                         program: "001437e1aec83a4e6587ca9609e4e5aa728db7007449",
30                         script:  "76ab1437e1aec83a4e6587ca9609e4e5aa728db700744988ae7cac",
31                         fun:     ConvertP2PKHSigProgram,
32                 },
33         }
34
35         for i, c := range cases {
36                 progBytes, err := hex.DecodeString(c.program)
37                 if err != nil {
38                         t.Fatal(err)
39                 }
40
41                 gotScript, err := c.fun(progBytes)
42                 if c.script != hex.EncodeToString(gotScript) {
43                         t.Errorf("case #%d (%s) got script:%s, expect script:%s", i, c.desc, hex.EncodeToString(gotScript), c.script)
44                 }
45         }
46 }
47
48 func TestProgramType(t *testing.T) {
49         cases := []struct {
50                 desc    string
51                 program string
52                 fun     func(prog []byte) bool
53                 yes     bool
54         }{
55                 {
56                         desc:    "normal P2WPKHScript",
57                         program: "001437e1aec83a4e6587ca9609e4e5aa728db7007449",
58                         fun:     IsP2WPKHScript,
59                         yes:     true,
60                 },
61                 {
62                         desc:    "ugly P2WPKHScript",
63                         program: "00200824e931fb806bd77fdcd291aad3bd0a4493443a4120062bd659e64a3e0bac66",
64                         fun:     IsP2WPKHScript,
65                         yes:     false,
66                 },
67                 {
68                         desc:    "ugly P2WPKHScript",
69                         program: "51",
70                         fun:     IsP2WPKHScript,
71                         yes:     false,
72                 },
73                 {
74                         desc:    "normal P2WSHScript",
75                         program: "00200824e931fb806bd77fdcd291aad3bd0a4493443a4120062bd659e64a3e0bac66",
76                         fun:     IsP2WSHScript,
77                         yes:     true,
78                 },
79                 {
80                         desc:    "ugly P2WSHScript",
81                         program: "001437e1aec83a4e6587ca9609e4e5aa728db7007449",
82                         fun:     IsP2WSHScript,
83                         yes:     false,
84                 },
85                 {
86                         desc:    "ugly P2WSHScript",
87                         program: "51",
88                         fun:     IsP2WSHScript,
89                         yes:     false,
90                 },
91                 {
92                         desc:    "normal IsStraightforward",
93                         program: "51",
94                         fun:     IsStraightforward,
95                         yes:     true,
96                 },
97                 {
98                         desc:    "ugly IsStraightforward",
99                         program: "001437e1aec83a4e6587ca9609e4e5aa728db7007449",
100                         fun:     IsStraightforward,
101                         yes:     false,
102                 },
103                 {
104                         desc:    "ugly IsStraightforward",
105                         program: "00200824e931fb806bd77fdcd291aad3bd0a4493443a4120062bd659e64a3e0bac66",
106                         fun:     IsStraightforward,
107                         yes:     false,
108                 },
109         }
110
111         for i, c := range cases {
112                 progBytes, err := hex.DecodeString(c.program)
113                 if err != nil {
114                         t.Fatal(err)
115                 }
116
117                 if c.fun(progBytes) != c.yes {
118                         t.Errorf("case #%d (%s) got %t, expect %t", i, c.desc, c.fun(progBytes), c.yes)
119                 }
120         }
121 }