(self, expected_packet: Packet, received_packet: Packet)
| 218 | self._fail_test_case_verify("An expected packet not found among received packets.") |
| 219 | |
| 220 | def _compare_packets(self, expected_packet: Packet, received_packet: Packet) -> bool: |
| 221 | self._logger.debug( |
| 222 | f"Comparing packets: \n{expected_packet.summary()}\n{received_packet.summary()}" |
| 223 | ) |
| 224 | |
| 225 | l3 = IP in expected_packet.layers() |
| 226 | self._logger.debug("Found l3 layer") |
| 227 | |
| 228 | received_payload = received_packet |
| 229 | expected_payload = expected_packet |
| 230 | while received_payload and expected_payload: |
| 231 | self._logger.debug("Comparing payloads:") |
| 232 | self._logger.debug(f"Received: {received_payload}") |
| 233 | self._logger.debug(f"Expected: {expected_payload}") |
| 234 | if received_payload.__class__ == expected_payload.__class__: |
| 235 | self._logger.debug("The layers are the same.") |
| 236 | if received_payload.__class__ == Ether: |
| 237 | if not self._verify_l2_frame(received_payload, l3): |
| 238 | return False |
| 239 | elif received_payload.__class__ == IP: |
| 240 | if not self._verify_l3_packet(received_payload, expected_payload): |
| 241 | return False |
| 242 | else: |
| 243 | # Different layers => different packets |
| 244 | return False |
| 245 | received_payload = received_payload.payload |
| 246 | expected_payload = expected_payload.payload |
| 247 | |
| 248 | if expected_payload: |
| 249 | self._logger.debug(f"The expected packet did not contain {expected_payload}.") |
| 250 | return False |
| 251 | if received_payload and received_payload.__class__ != Padding: |
| 252 | self._logger.debug("The received payload had extra layers which were not padding.") |
| 253 | return False |
| 254 | return True |
| 255 | |
| 256 | def _verify_l2_frame(self, received_packet: Ether, l3: bool) -> bool: |
| 257 | self._logger.debug("Looking at the Ether layer.") |
no test coverage detected