MCPcopy
hub / github.com/cloudflare/cloudflared / TestDecodeBadPackets

Function TestDecodeBadPackets

packet/decoder_test.go:166–216  ·  view source on GitHub ↗

TestDecodeBadPackets makes sure decoders don't decode invalid packets

(t *testing.T)

Source from the content-addressed store, hash-verified

164
165// TestDecodeBadPackets makes sure decoders don't decode invalid packets
166func TestDecodeBadPackets(t *testing.T) {
167 var (
168 srcIPv4 = net.ParseIP("172.16.0.1")
169 dstIPv4 = net.ParseIP("10.0.0.1")
170 )
171
172 ipLayer := layers.IPv4{
173 Version: 10,
174 SrcIP: srcIPv4,
175 DstIP: dstIPv4,
176 Protocol: layers.IPProtocolICMPv4,
177 TTL: DefaultTTL,
178 }
179 icmpLayer := layers.ICMPv4{
180 TypeCode: layers.CreateICMPv4TypeCode(uint8(ipv4.ICMPTypeEcho), 0),
181 Id: 100,
182 Seq: 52819,
183 }
184 wrongIPVersion, err := createPacket(&ipLayer, &icmpLayer, nil, nil)
185 require.NoError(t, err)
186
187 tests := []struct {
188 testCase string
189 packet []byte
190 }{
191 {
192 testCase: "unknown IP version",
193 packet: wrongIPVersion,
194 },
195 {
196 testCase: "invalid packet",
197 packet: []byte("not a packet"),
198 },
199 {
200 testCase: "zero length packet",
201 packet: []byte{},
202 },
203 }
204
205 ipDecoder := NewIPDecoder()
206 icmpDecoder := NewICMPDecoder()
207 for _, test := range tests {
208 ipPacket, err := ipDecoder.Decode(RawPacket{Data: test.packet})
209 require.Error(t, err)
210 require.Nil(t, ipPacket)
211
212 icmpPacket, err := icmpDecoder.Decode(RawPacket{Data: test.packet})
213 require.Error(t, err)
214 require.Nil(t, icmpPacket)
215 }
216}
217
218func createPacket(ipLayer, secondLayer, thirdLayer gopacket.SerializableLayer, body []byte) ([]byte, error) {
219 payload := gopacket.Payload(body)

Callers

nothing calls this directly

Calls 6

DecodeMethod · 0.95
DecodeMethod · 0.95
createPacketFunction · 0.85
NewIPDecoderFunction · 0.85
NewICMPDecoderFunction · 0.85
ErrorMethod · 0.45

Tested by

no test coverage detected