1 // Copyright (c) 2014-2016 The btcsuite developers
2 // Use of this source code is governed by an ISC
3 // license that can be found in the LICENSE file.
12 "github.com/davecgh/go-spew/spew"
15 // TestFilterCLearLatest tests the MsgFilterClear API against the latest
17 func TestFilterClearLatest(t *testing.T) {
18 pver := ProtocolVersion
20 msg := NewMsgFilterClear()
22 // Ensure the command is expected value.
23 wantCmd := "filterclear"
24 if cmd := msg.Command(); cmd != wantCmd {
25 t.Errorf("NewMsgFilterClear: wrong command - got %v want %v",
29 // Ensure max payload is expected value for latest protocol version.
30 wantPayload := uint32(0)
31 maxPayload := msg.MaxPayloadLength(pver)
32 if maxPayload != wantPayload {
33 t.Errorf("MaxPayloadLength: wrong max payload length for "+
34 "protocol version %d - got %v, want %v", pver,
35 maxPayload, wantPayload)
39 // TestFilterClearCrossProtocol tests the MsgFilterClear API when encoding with
40 // the latest protocol version and decoding with BIP0031Version.
41 func TestFilterClearCrossProtocol(t *testing.T) {
42 msg := NewMsgFilterClear()
44 // Encode with latest protocol version.
46 err := msg.BtcEncode(&buf, ProtocolVersion, LatestEncoding)
48 t.Errorf("encode of MsgFilterClear failed %v err <%v>", msg, err)
51 // Decode with old protocol version.
52 var readmsg MsgFilterClear
53 err = readmsg.BtcDecode(&buf, BIP0031Version, LatestEncoding)
55 t.Errorf("decode of MsgFilterClear succeeded when it "+
56 "shouldn't have %v", msg)
60 // TestFilterClearWire tests the MsgFilterClear wire encode and decode for
61 // various protocol versions.
62 func TestFilterClearWire(t *testing.T) {
63 msgFilterClear := NewMsgFilterClear()
64 msgFilterClearEncoded := []byte{}
67 in *MsgFilterClear // Message to encode
68 out *MsgFilterClear // Expected decoded message
69 buf []byte // Wire encoding
70 pver uint32 // Protocol version for wire encoding
71 enc MessageEncoding // Message encoding format
73 // Latest protocol version.
77 msgFilterClearEncoded,
82 // Protocol version BIP0037Version + 1.
86 msgFilterClearEncoded,
91 // Protocol version BIP0037Version.
95 msgFilterClearEncoded,
101 t.Logf("Running %d tests", len(tests))
102 for i, test := range tests {
103 // Encode the message to wire format.
105 err := test.in.BtcEncode(&buf, test.pver, test.enc)
107 t.Errorf("BtcEncode #%d error %v", i, err)
110 if !bytes.Equal(buf.Bytes(), test.buf) {
111 t.Errorf("BtcEncode #%d\n got: %s want: %s", i,
112 spew.Sdump(buf.Bytes()), spew.Sdump(test.buf))
116 // Decode the message from wire format.
117 var msg MsgFilterClear
118 rbuf := bytes.NewReader(test.buf)
119 err = msg.BtcDecode(rbuf, test.pver, test.enc)
121 t.Errorf("BtcDecode #%d error %v", i, err)
124 if !reflect.DeepEqual(&msg, test.out) {
125 t.Errorf("BtcDecode #%d\n got: %s want: %s", i,
126 spew.Sdump(msg), spew.Sdump(test.out))
132 // TestFilterClearWireErrors performs negative tests against wire encode and
133 // decode of MsgFilterClear to confirm error paths work correctly.
134 func TestFilterClearWireErrors(t *testing.T) {
135 pverNoFilterClear := BIP0037Version - 1
136 wireErr := &MessageError{}
138 baseFilterClear := NewMsgFilterClear()
139 baseFilterClearEncoded := []byte{}
142 in *MsgFilterClear // Value to encode
143 buf []byte // Wire encoding
144 pver uint32 // Protocol version for wire encoding
145 enc MessageEncoding // Message encoding format
146 max int // Max size of fixed buffer to induce errors
147 writeErr error // Expected write error
148 readErr error // Expected read error
150 // Force error due to unsupported protocol version.
152 baseFilterClear, baseFilterClearEncoded,
153 pverNoFilterClear, BaseEncoding, 4, wireErr, wireErr,
157 t.Logf("Running %d tests", len(tests))
158 for i, test := range tests {
159 // Encode to wire format.
160 w := newFixedWriter(test.max)
161 err := test.in.BtcEncode(w, test.pver, test.enc)
162 if reflect.TypeOf(err) != reflect.TypeOf(test.writeErr) {
163 t.Errorf("BtcEncode #%d wrong error got: %v, want: %v",
164 i, err, test.writeErr)
168 // For errors which are not of type MessageError, check them for
170 if _, ok := err.(*MessageError); !ok {
171 if err != test.writeErr {
172 t.Errorf("BtcEncode #%d wrong error got: %v, "+
173 "want: %v", i, err, test.writeErr)
178 // Decode from wire format.
179 var msg MsgFilterClear
180 r := newFixedReader(test.max, test.buf)
181 err = msg.BtcDecode(r, test.pver, test.enc)
182 if reflect.TypeOf(err) != reflect.TypeOf(test.readErr) {
183 t.Errorf("BtcDecode #%d wrong error got: %v, want: %v",
184 i, err, test.readErr)
188 // For errors which are not of type MessageError, check them for
190 if _, ok := err.(*MessageError); !ok {
191 if err != test.readErr {
192 t.Errorf("BtcDecode #%d wrong error got: %v, "+
193 "want: %v", i, err, test.readErr)