Browse Source

tests: Make ap_max_num_sta_no_probe_resp more robust

It was possible for the AP's Beacon frame to be seen by dev[0] when
running a scan. This is not an error case. Make this test case more
robust by verifying with a sniffer whether a Probe Response frame was
sent to unexpected STA.

Signed-off-by: Jouni Malinen <j@w1.fi>
Jouni Malinen 9 years ago
parent
commit
bc321e1597
1 changed files with 17 additions and 3 deletions
  1. 17 3
      tests/hwsim/test_ap_params.py

+ 17 - 3
tests/hwsim/test_ap_params.py

@@ -6,10 +6,12 @@
 
 
 import logging
 import logging
 logger = logging.getLogger()
 logger = logging.getLogger()
+import os
 import subprocess
 import subprocess
 
 
 import hwsim_utils
 import hwsim_utils
 import hostapd
 import hostapd
+from tshark import run_tshark
 
 
 def test_ap_fragmentation_rts_set_high(dev, apdev):
 def test_ap_fragmentation_rts_set_high(dev, apdev):
     """WPA2-PSK AP with fragmentation and RTS thresholds larger than frame length"""
     """WPA2-PSK AP with fragmentation and RTS thresholds larger than frame length"""
@@ -249,8 +251,9 @@ def test_ap_max_num_sta(dev, apdev):
     if ev is not None:
     if ev is not None:
         raise Exception("Unexpected association")
         raise Exception("Unexpected association")
 
 
-def test_ap_max_num_sta_no_probe_resp(dev, apdev):
+def test_ap_max_num_sta_no_probe_resp(dev, apdev, params):
     """Maximum STA count and limit on Probe Response frames"""
     """Maximum STA count and limit on Probe Response frames"""
+    logdir = params['logdir']
     dev[0].flush_scan_cache()
     dev[0].flush_scan_cache()
     ssid = "max"
     ssid = "max"
     params = {}
     params = {}
@@ -262,9 +265,20 @@ def test_ap_max_num_sta_no_probe_resp(dev, apdev):
     dev[1].connect(ssid, key_mgmt="NONE", scan_freq="2412")
     dev[1].connect(ssid, key_mgmt="NONE", scan_freq="2412")
     dev[0].scan(freq=2412, type="ONLY")
     dev[0].scan(freq=2412, type="ONLY")
     dev[0].scan(freq=2412, type="ONLY")
     dev[0].scan(freq=2412, type="ONLY")
-    if dev[0].get_bss(apdev[0]['bssid']) != None:
-        raise Exception("AP found unexpectedly")
+    seen = dev[0].get_bss(apdev[0]['bssid']) != None
     dev[1].scan(freq=2412, type="ONLY")
     dev[1].scan(freq=2412, type="ONLY")
+    if seen:
+        out = run_tshark(os.path.join(logdir, "hwsim0.pcapng"),
+                         "wlan.fc.type_subtype == 5", ["wlan.da" ])
+        if out:
+            if dev[0].own_addr() not in out:
+                # Discovery happened through Beacon frame reception. That's not
+                # an error case.
+                seen = False
+            if dev[1].own_addr() not in out:
+                raise Exception("No Probe Response frames to dev[1] seen")
+        if seen:
+            raise Exception("AP found unexpectedly")
 
 
 def test_ap_tx_queue_params(dev, apdev):
 def test_ap_tx_queue_params(dev, apdev):
     """Open AP with TX queue params set"""
     """Open AP with TX queue params set"""