msgfilterclear_test.go raw
1 package wire
2
3 import (
4 "bytes"
5 "reflect"
6 "testing"
7
8 "github.com/davecgh/go-spew/spew"
9 )
10
11 // TestFilterCLearLatest tests the MsgFilterClear API against the latest protocol version.
12 func TestFilterClearLatest(t *testing.T) {
13 pver := ProtocolVersion
14 msg := NewMsgFilterClear()
15 // Ensure the command is expected value.
16 wantCmd := "filterclear"
17 if cmd := msg.Command(); cmd != wantCmd {
18 t.Errorf(
19 "NewMsgFilterClear: wrong command - got %v want %v",
20 cmd, wantCmd,
21 )
22 }
23 // Ensure max payload is expected value for latest protocol version.
24 wantPayload := uint32(0)
25 maxPayload := msg.MaxPayloadLength(pver)
26 if maxPayload != wantPayload {
27 t.Errorf(
28 "MaxPayloadLength: wrong max payload length for "+
29 "protocol version %d - got %v, want %v", pver,
30 maxPayload, wantPayload,
31 )
32 }
33 }
34
35 // TestFilterClearCrossProtocol tests the MsgFilterClear API when encoding with the latest protocol version and decoding
36 // with BIP0031Version.
37 func TestFilterClearCrossProtocol(t *testing.T) {
38 msg := NewMsgFilterClear()
39 // Encode with latest protocol version.
40 var buf bytes.Buffer
41 e := msg.BtcEncode(&buf, ProtocolVersion, LatestEncoding)
42 if e != nil {
43 t.Errorf("encode of MsgFilterClear failed %v e <%v>", msg, e)
44 }
45 // Decode with old protocol version.
46 var readmsg MsgFilterClear
47 e = readmsg.BtcDecode(&buf, BIP0031Version, LatestEncoding)
48 if e == nil {
49 t.Errorf(
50 "decode of MsgFilterClear succeeded when it "+
51 "shouldn't have %v", msg,
52 )
53 }
54 }
55
56 // TestFilterClearWire tests the MsgFilterClear wire encode and decode for various protocol versions.
57 func TestFilterClearWire(t *testing.T) {
58 msgFilterClear := NewMsgFilterClear()
59 msgFilterClearEncoded := []byte{}
60 tests := []struct {
61 in *MsgFilterClear // Message to encode
62 out *MsgFilterClear // Expected decoded message
63 buf []byte // Wire encoding
64 pver uint32 // Protocol version for wire encoding
65 enc MessageEncoding // Message encoding format
66 }{
67 // Latest protocol version.
68 {
69 msgFilterClear,
70 msgFilterClear,
71 msgFilterClearEncoded,
72 ProtocolVersion,
73 BaseEncoding,
74 },
75 // Protocol version BIP0037Version + 1.
76 {
77 msgFilterClear,
78 msgFilterClear,
79 msgFilterClearEncoded,
80 BIP0037Version + 1,
81 BaseEncoding,
82 },
83 // Protocol version BIP0037Version.
84 {
85 msgFilterClear,
86 msgFilterClear,
87 msgFilterClearEncoded,
88 BIP0037Version,
89 BaseEncoding,
90 },
91 }
92 t.Logf("Running %d tests", len(tests))
93 for i, test := range tests {
94 // Encode the message to wire format.
95 var buf bytes.Buffer
96 e := test.in.BtcEncode(&buf, test.pver, test.enc)
97 if e != nil {
98 t.Errorf("BtcEncode #%d error %v", i, e)
99 continue
100 }
101 if !bytes.Equal(buf.Bytes(), test.buf) {
102 t.Errorf(
103 "BtcEncode #%d\n got: %s want: %s", i,
104 spew.Sdump(buf.Bytes()), spew.Sdump(test.buf),
105 )
106 continue
107 }
108 // Decode the message from wire format.
109 var msg MsgFilterClear
110 rbuf := bytes.NewReader(test.buf)
111 e = msg.BtcDecode(rbuf, test.pver, test.enc)
112 if e != nil {
113 t.Errorf("BtcDecode #%d error %v", i, e)
114 continue
115 }
116 if !reflect.DeepEqual(&msg, test.out) {
117 t.Errorf(
118 "BtcDecode #%d\n got: %s want: %s", i,
119 spew.Sdump(msg), spew.Sdump(test.out),
120 )
121 continue
122 }
123 }
124 }
125
126 // TestFilterClearWireErrors performs negative tests against wire encode and decode of MsgFilterClear to confirm error
127 // paths work correctly.
128 func TestFilterClearWireErrors(t *testing.T) {
129 pverNoFilterClear := BIP0037Version - 1
130 wireErr := &MessageError{}
131 baseFilterClear := NewMsgFilterClear()
132 baseFilterClearEncoded := []byte{}
133 tests := []struct {
134 in *MsgFilterClear // value to encode
135 buf []byte // Wire encoding
136 pver uint32 // Protocol version for wire encoding
137 enc MessageEncoding // Message encoding format
138 max int // Max size of fixed buffer to induce errors
139 writeErr error // Expected write error
140 readErr error // Expected read error
141 }{
142 // Force error due to unsupported protocol version.
143 {
144 baseFilterClear, baseFilterClearEncoded,
145 pverNoFilterClear, BaseEncoding, 4, wireErr, wireErr,
146 },
147 }
148 t.Logf("Running %d tests", len(tests))
149 var e error
150 for i, test := range tests {
151 // Encode to wire format.
152 w := newFixedWriter(test.max)
153 if e = test.in.BtcEncode(w, test.pver, test.enc); E.Chk(e) {
154 }
155 if reflect.TypeOf(e) != reflect.TypeOf(test.writeErr) {
156 t.Errorf(
157 "BtcEncode #%d wrong error got: %v, want: %v",
158 i, e, test.writeErr,
159 )
160 continue
161 }
162 // For errors which are not of type MessageError, check them for equality.
163 if _, ok := e.(*MessageError); !ok {
164 if e != test.writeErr {
165 t.Errorf(
166 "BtcEncode #%d wrong error got: %v, want: %v", i, e, test.writeErr,
167 )
168 continue
169 }
170 }
171 // Decode from wire format.
172 var msg MsgFilterClear
173 r := newFixedReader(test.max, test.buf)
174 e = msg.BtcDecode(r, test.pver, test.enc)
175 if reflect.TypeOf(e) != reflect.TypeOf(test.readErr) {
176 t.Errorf(
177 "BtcDecode #%d wrong error got: %v, want: %v",
178 i, e, test.readErr,
179 )
180 continue
181 }
182 // For errors which are not of type MessageError, check them for equality.
183 if _, ok := e.(*MessageError); !ok {
184 if e != test.readErr {
185 t.Errorf(
186 "BtcDecode #%d wrong error got: %v, want: %v", i, e, test.readErr,
187 )
188 continue
189 }
190 }
191 }
192 }
193