MCPcopy Create free account
hub / github.com/chain/txvm / TestBlockSig

Function TestBlockSig

protocol/validation/validation_test.go:73–143  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

71}
72
73func TestBlockSig(t *testing.T) {
74 // A pubkey and a sig that will fail signature validation. Can't use
75 // all-zeroes, which succeeds on about 25% of messages.
76 badPubkey := mustDecodeHex("1111111111111111111111111111111111111111111111111111111111111111")
77 badSig := mustDecodeHex("22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222")
78
79 cases := []struct {
80 pred *bc.Predicate
81 args []interface{}
82 wantErr error
83 }{{
84 pred: &bc.Predicate{Version: 2}, // bad version
85 wantErr: errBadPredicate,
86 }, {
87 pred: &bc.Predicate{Version: 1, Quorum: -1}, // bad quorum
88 wantErr: errBadPredicate,
89 }, {
90 pred: &bc.Predicate{Version: 1, Quorum: 1}, // quorum > len(pubkeys)
91 args: []interface{}{make([]byte, ed25519.SignatureSize)},
92 wantErr: errBadPredicate,
93 }, {
94 pred: &bc.Predicate{Version: 1, Quorum: 1, Pubkeys: [][]byte{make([]byte, ed25519.PublicKeySize)}},
95 wantErr: errBadArguments, // len(args) < len(pubkeys)
96 }, {
97 pred: &bc.Predicate{Version: 1, Quorum: 1, Pubkeys: [][]byte{[]byte("badkeylen")}}, // bad public key size
98 args: []interface{}{make([]byte, ed25519.SignatureSize)},
99 wantErr: errBadPredicate,
100 }, {
101 pred: &bc.Predicate{Version: 1, Quorum: 1, Pubkeys: [][]byte{make([]byte, ed25519.PublicKeySize)}},
102 args: []interface{}{int64(1)}, // bad signature type
103 wantErr: errBadArguments,
104 }, {
105 pred: &bc.Predicate{Version: 1, Quorum: 0, Pubkeys: [][]byte{make([]byte, ed25519.PublicKeySize)}},
106 args: []interface{}{[]byte{}}, // empty sig is skipped
107 wantErr: nil,
108 }, {
109 pred: &bc.Predicate{Version: 1, Quorum: 1, Pubkeys: [][]byte{make([]byte, ed25519.PublicKeySize)}},
110 args: []interface{}{[]byte("badsiglen")}, // bad signature length
111 wantErr: errBadArguments,
112 }, {
113 pred: &bc.Predicate{Version: 1, Quorum: 1, Pubkeys: [][]byte{badPubkey}},
114 args: []interface{}{badSig}, // failing ed25519 check
115 wantErr: errBadArguments,
116 }, {
117 pred: &bc.Predicate{Version: 1, Quorum: 1, Pubkeys: [][]byte{make([]byte, ed25519.PublicKeySize)}},
118 args: []interface{}{[]byte{}},
119 wantErr: errBadArguments, // insufficient signatures
120 }, {
121 pred: &bc.Predicate{Version: 1, Quorum: 1, Pubkeys: [][]byte{mustDecodeHex("af8c8a878c85b47903bd90e7cdbb239847b7712748064fb16ecbf480c89d3606")}},
122 args: []interface{}{mustDecodeHex("59317b3f59a91613d801fbfada0abaf635900af8c84d66f7ad9932baa2a14bd5cad4649b993fced3d162a66ad4c688d8d5f4c943efa3da25383d168210c8980e")},
123 wantErr: nil,
124 }}
125
126 block := &bc.Block{
127 UnsignedBlock: &bc.UnsignedBlock{
128 BlockHeader: &bc.BlockHeader{
129 NextPredicate: &bc.Predicate{
130 Version: 1,

Callers

nothing calls this directly

Calls 3

RootFunction · 0.92
BlockSigFunction · 0.85
mustDecodeHexFunction · 0.70

Tested by

no test coverage detected