OSDN Git Service

add_signature_for_block_header (#1914)
[bytom/bytom.git] / protocol / bc / types / sup_link_test.go
1 package types
2
3 import (
4         "bytes"
5         "encoding/hex"
6         "strings"
7         "testing"
8
9         "github.com/bytom/bytom/consensus"
10         "github.com/bytom/bytom/encoding/blockchain"
11         "github.com/bytom/bytom/testutil"
12 )
13
14 func TestReadWriteSupLink(t *testing.T) {
15         cases := []struct {
16                 desc      string
17                 supLinks  SupLinks
18                 hexString string
19         }{
20                 {
21                         desc: "normal sup links",
22                         supLinks: []*SupLink{
23                                 {
24                                         SourceHash: testutil.MustDecodeHash("0a3cd1175e295a35c2b63054969c3fe54eeaa3eb68258227b28d8daa6cf4c50c"),
25                                         Signatures: [consensus.NumOfValidators][]byte{
26                                                 testutil.MustDecodeHexString("750318156e8c913c378a8d31294fca1084df3be3967035425f470f81e00cd824d1f12bf8e1c3b308f4b1a916438b9ce630722bc8d92ef0feebbbaf987dd7a60e"),
27                                                 testutil.MustDecodeHexString("be7c7e0ba54109c8c457cdbba4691d7aaae32eb4b8ac63755f2494be406027ce66c7b4730bfd2506fa2caaba12a7bbbea2faca5f07bb64fe06a568b6415e7506"),
28                                         },
29                                 },
30                                 {
31                                         SourceHash: testutil.MustDecodeHash("546c91cefc6a06f9b7a0aaa4d69db9a7f229af27928304a44ecd48e33ba2ba91"),
32                                         Signatures: [consensus.NumOfValidators][]byte{
33                                                 testutil.MustDecodeHexString("38c9a6a48eeea993b2d4137e73b17e4743ce3935636fcce957ae2291c691491525f39509a1c21fec3c7f78403ae88e375b796fa9dcc4cac0af8a987994f62c07"),
34                                                 testutil.MustDecodeHexString("4fe5646b2b669aaef0dd74a090e150de676218d0a6e693bb2d1cc791282517669d7903c60a909a5d9c5a996e5797ea9dded20b52dc4b8ec272e86e5fc4e8a008"),
35                                                 nil,
36                                                 nil,
37                                                 testutil.MustDecodeHexString("4dd9508652a686b37247d2fa969ca92997095cec44aa2ceb223daf29c1c426f5e06d3e522e85161386ad70af2c04e703179e749870f6e669b0038067338fe709"),
38                                                 testutil.MustDecodeHexString("3ab09481823ee2caff6939ea0e70693d63173c4295975be6bbf030554941de2babfb66fc3c795f026785fdf2f5090617f05292816d0ccb83f8d2dc487e3ad404"),
39                                                 nil,
40                                                 testutil.MustDecodeHexString("9e48c3852c16189dd82b48c43de6460771802caab373dc8e572c0e510edcc6341e7b070dec6a2068d2519e044eaadc609ae6c3233cdcbb713ef0546edfa2f803"),
41                                                 testutil.MustDecodeHexString("b26b8f5fb33b800b8d06768304864138b0ece5ce7e57fcc339f714911d279d103b08a5f8a85c1723dfe0299690ad776fb8b11e003ddfc33749b5000d0a78350f"),
42                                         },
43                                 },
44                         },
45                         hexString: strings.Join([]string{
46                                 "02", // len of sup links,
47                                 "0a3cd1175e295a35c2b63054969c3fe54eeaa3eb68258227b28d8daa6cf4c50c", // source hash 1
48                                 "40", // len of signature 1
49                                 "750318156e8c913c378a8d31294fca1084df3be3967035425f470f81e00cd824d1f12bf8e1c3b308f4b1a916438b9ce630722bc8d92ef0feebbbaf987dd7a60e", // signature 1
50                                 "40", // len of signature 2
51                                 "be7c7e0ba54109c8c457cdbba4691d7aaae32eb4b8ac63755f2494be406027ce66c7b4730bfd2506fa2caaba12a7bbbea2faca5f07bb64fe06a568b6415e7506", // signature 2
52                                 "00", // len of signature 3
53                                 "00", // len of signature 4
54                                 "00", // len of signature 5
55                                 "00", // len of signature 6
56                                 "00", // len of signature 7
57                                 "00", // len of signature 8
58                                 "00", // len of signature 9
59                                 "00", // len of signature 10
60                                 "546c91cefc6a06f9b7a0aaa4d69db9a7f229af27928304a44ecd48e33ba2ba91", // source hash 2
61                                 "40", // len of signature 1
62                                 "38c9a6a48eeea993b2d4137e73b17e4743ce3935636fcce957ae2291c691491525f39509a1c21fec3c7f78403ae88e375b796fa9dcc4cac0af8a987994f62c07", // signature 1
63                                 "40",  // len of signature 2
64                                 "4fe5646b2b669aaef0dd74a090e150de676218d0a6e693bb2d1cc791282517669d7903c60a909a5d9c5a996e5797ea9dded20b52dc4b8ec272e86e5fc4e8a008", // signature 2
65                                 "00", // len of signature 3
66                                 "00", // len of signature 4
67                                 "40", // len of signature 5
68                                 "4dd9508652a686b37247d2fa969ca92997095cec44aa2ceb223daf29c1c426f5e06d3e522e85161386ad70af2c04e703179e749870f6e669b0038067338fe709", // signature 1
69                                 "40",  // len of signature 6
70                                 "3ab09481823ee2caff6939ea0e70693d63173c4295975be6bbf030554941de2babfb66fc3c795f026785fdf2f5090617f05292816d0ccb83f8d2dc487e3ad404", // signature 2
71                                 "00", // len of signature 7
72                                 "40", // len of signature 8
73                                 "9e48c3852c16189dd82b48c43de6460771802caab373dc8e572c0e510edcc6341e7b070dec6a2068d2519e044eaadc609ae6c3233cdcbb713ef0546edfa2f803", // signature 1
74                                 "40",  // len of signature 9
75                                 "b26b8f5fb33b800b8d06768304864138b0ece5ce7e57fcc339f714911d279d103b08a5f8a85c1723dfe0299690ad776fb8b11e003ddfc33749b5000d0a78350f", // signature 2
76                                 "00", // len of signature 10
77                         }, ""),
78                 },
79                 {
80                         desc: "sup links with full signature",
81                         supLinks: []*SupLink{
82                                 {
83                                         SourceHash: testutil.MustDecodeHash("0a3cd1175e295a35c2b63054969c3fe54eeaa3eb68258227b28d8daa6cf4c50c"),
84                                         Signatures: [consensus.NumOfValidators][]byte{
85                                                 testutil.MustDecodeHexString("750318156e8c913c378a8d31294fca1084df3be3967035425f470f81e00cd824d1f12bf8e1c3b308f4b1a916438b9ce630722bc8d92ef0feebbbaf987dd7a60e"),
86                                                 testutil.MustDecodeHexString("be7c7e0ba54109c8c457cdbba4691d7aaae32eb4b8ac63755f2494be406027ce66c7b4730bfd2506fa2caaba12a7bbbea2faca5f07bb64fe06a568b6415e7506"),
87                                                 testutil.MustDecodeHexString("9938ea16d6caae68b7e9318f1aed387ef9767dc0d80db807e0d0a77065229ceffef7a8b6407882f5d6e29b2edf1c6373bb1c47188138068e2baa4851c04c6f0e"),
88                                                 testutil.MustDecodeHexString("4dd9508652a686b37247d2fa969ca92997095cec44aa2ceb223daf29c1c426f5e06d3e522e85161386ad70af2c04e703179e749870f6e669b0038067338fe709"),
89                                                 testutil.MustDecodeHexString("3ab09481823ee2caff6939ea0e70693d63173c4295975be6bbf030554941de2babfb66fc3c795f026785fdf2f5090617f05292816d0ccb83f8d2dc487e3ad404"),
90                                                 testutil.MustDecodeHexString("52a13c4502265fb456f8ecd051de7b6059b5ad59a741ed561efc06489f161b0d471d86f3bf62ef0083e603a26b98abc945018b8f94f591782d43deb5df1dec08"),
91                                                 testutil.MustDecodeHexString("9e48c3852c16189dd82b48c43de6460771802caab373dc8e572c0e510edcc6341e7b070dec6a2068d2519e044eaadc609ae6c3233cdcbb713ef0546edfa2f803"),
92                                                 testutil.MustDecodeHexString("4103f5e7939f1e83241580251a56d85f31cedbca0be7ea819e352ab61aebdb047419e2775704539af4897bdd65e0cf69dc7e82b9e338efe88b5e7eb911dd8303"),
93                                                 testutil.MustDecodeHexString("b26b8f5fb33b800b8d06768304864138b0ece5ce7e57fcc339f714911d279d103b08a5f8a85c1723dfe0299690ad776fb8b11e003ddfc33749b5000d0a78350f"),
94                                                 testutil.MustDecodeHexString("30a9b6922a04ad7e72310842d589da14edfc3a81d60e3d6d934bd4adff4c3bb78a8506fcbe1323a21d2058a294c4af7a5a961e4e033380e2ed150ef0dcfbcb00"),
95                                         },
96                                 },
97                         },
98                         hexString: strings.Join([]string{
99                                 "01", // len of sup links,
100                                 "0a3cd1175e295a35c2b63054969c3fe54eeaa3eb68258227b28d8daa6cf4c50c", // source hash
101                                 "40", // len of signature 1
102                                 "750318156e8c913c378a8d31294fca1084df3be3967035425f470f81e00cd824d1f12bf8e1c3b308f4b1a916438b9ce630722bc8d92ef0feebbbaf987dd7a60e", // signature 1
103                                 "40", // len of signature 2
104                                 "be7c7e0ba54109c8c457cdbba4691d7aaae32eb4b8ac63755f2494be406027ce66c7b4730bfd2506fa2caaba12a7bbbea2faca5f07bb64fe06a568b6415e7506", // signature 2
105                                 "40", // len of signature 3
106                                 "9938ea16d6caae68b7e9318f1aed387ef9767dc0d80db807e0d0a77065229ceffef7a8b6407882f5d6e29b2edf1c6373bb1c47188138068e2baa4851c04c6f0e", // signature 1
107                                 "40", // len of signature 4
108                                 "4dd9508652a686b37247d2fa969ca92997095cec44aa2ceb223daf29c1c426f5e06d3e522e85161386ad70af2c04e703179e749870f6e669b0038067338fe709", // signature 2
109                                 "40", // len of signature 5
110                                 "3ab09481823ee2caff6939ea0e70693d63173c4295975be6bbf030554941de2babfb66fc3c795f026785fdf2f5090617f05292816d0ccb83f8d2dc487e3ad404", // signature 1
111                                 "40", // len of signature 6
112                                 "52a13c4502265fb456f8ecd051de7b6059b5ad59a741ed561efc06489f161b0d471d86f3bf62ef0083e603a26b98abc945018b8f94f591782d43deb5df1dec08", // signature 2
113                                 "40", // len of signature 7
114                                 "9e48c3852c16189dd82b48c43de6460771802caab373dc8e572c0e510edcc6341e7b070dec6a2068d2519e044eaadc609ae6c3233cdcbb713ef0546edfa2f803", // signature 1
115                                 "40", // len of signature 8
116                                 "4103f5e7939f1e83241580251a56d85f31cedbca0be7ea819e352ab61aebdb047419e2775704539af4897bdd65e0cf69dc7e82b9e338efe88b5e7eb911dd8303", // signature 2
117                                 "40", // len of signature 9
118                                 "b26b8f5fb33b800b8d06768304864138b0ece5ce7e57fcc339f714911d279d103b08a5f8a85c1723dfe0299690ad776fb8b11e003ddfc33749b5000d0a78350f", // signature 1
119                                 "40", // len of signature 10
120                                 "30a9b6922a04ad7e72310842d589da14edfc3a81d60e3d6d934bd4adff4c3bb78a8506fcbe1323a21d2058a294c4af7a5a961e4e033380e2ed150ef0dcfbcb00", // signature 2
121                         }, ""),
122                 },
123                 {
124                         desc:      "empty sup links",
125                         supLinks:  []*SupLink{},
126                         hexString: "00",
127                 },
128         }
129
130         for _, c := range cases {
131                 t.Run(c.desc, func(t *testing.T) {
132                         buff := []byte{}
133                         buffer := bytes.NewBuffer(buff)
134                         if err := c.supLinks.writeTo(buffer); err != nil {
135                                 t.Fatal(err)
136                         }
137
138                         hexString := hex.EncodeToString(buffer.Bytes())
139                         if hexString != c.hexString {
140                                 t.Errorf("test write suplinks fail, got:%s, want:%s", hexString, c.hexString)
141                         }
142
143                         supLinks := SupLinks{}
144                         if err := supLinks.readFrom(blockchain.NewReader(buffer.Bytes())); err != nil {
145                                 t.Fatal(err)
146                         }
147
148                         if !testutil.DeepEqual(supLinks, c.supLinks) {
149                                 t.Errorf("test read suplinks fail, got:%v, want:%v", supLinks, c.supLinks)
150                         }
151                 })
152         }
153 }