pytest_simple_sniffer.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. # SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
  2. # SPDX-License-Identifier: Apache-2.0
  3. import pytest
  4. from pytest_embedded import Dut
  5. def _sniffer_packets_check(dut: Dut, packet_num: int) -> None:
  6. dut.write('pcap --open -f simple-sniffer')
  7. dut.expect('cmd_pcap: open file successfully')
  8. dut.write(f'sniffer -i wlan -c 2 -n {packet_num}')
  9. dut.expect(f'cmd_sniffer: {packet_num} packages will be captured')
  10. dut.expect('cmd_sniffer: start WiFi promiscuous ok')
  11. dut.expect('cmd_sniffer: stop promiscuous ok')
  12. dut.write('pcap --summary -f simple-sniffer')
  13. dut.expect('cmd_pcap: Memory is to be parsed')
  14. dut.expect('Pcap packet Head:')
  15. dut.expect('Magic Number: a1b2c3d4')
  16. dut.expect(r'Major Version: [0-9]+')
  17. dut.expect(r'Minor Version: [0-9]+')
  18. dut.expect(r'SnapLen: [0-9]+')
  19. dut.expect(r'LinkType: [0-9]+')
  20. for i in range(0, packet_num):
  21. dut.expect(f'Packet {i}:')
  22. dut.expect(r'Timestamp \(Seconds\): [0-9]+')
  23. dut.expect(r'Timestamp \(Microseconds\): [0-9]+')
  24. dut.expect(r'Capture Length: [0-9]+')
  25. dut.expect(r'Packet Length: [0-9]+')
  26. dut.expect(r'Frame Type:\s+\w+')
  27. dut.expect(r'Frame Subtype:\s+\w+')
  28. dut.expect(r'Destination:\s+\w+')
  29. dut.expect(r'Source:\s+\w+')
  30. dut.expect(f'Pcap packet Number: {packet_num}')
  31. dut.write('pcap --close -f simple-sniffer')
  32. dut.expect('cmd_pcap: free memory successfully')
  33. dut.expect('cmd_pcap: .pcap file close done')
  34. @pytest.mark.esp32
  35. @pytest.mark.wifi_ap
  36. @pytest.mark.parametrize('config', [
  37. 'mem',
  38. ], indirect=True)
  39. def test_examples_simple_sniffer(dut: Dut) -> None:
  40. dut.expect('sniffer>')
  41. # Sniffer multiple times with few packets
  42. for _ in range(3):
  43. _sniffer_packets_check(dut, 5)
  44. dut.write('')
  45. dut.expect('sniffer>')