github.com/Bytom/bytom@v1.1.2-0.20210127130405-ae40204c0b09/consensus/segwit/segwit_test.go (about)

     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  }