TestDecodeBadPackets makes sure decoders don't decode invalid packets
(t *testing.T)
| 164 | |
| 165 | // TestDecodeBadPackets makes sure decoders don't decode invalid packets |
| 166 | func 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 | |
| 218 | func createPacket(ipLayer, secondLayer, thirdLayer gopacket.SerializableLayer, body []byte) ([]byte, error) { |
| 219 | payload := gopacket.Payload(body) |
nothing calls this directly
no test coverage detected