aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorJouni Malinen <j@w1.fi>2017-01-08 16:30:03 (GMT)
committerJouni Malinen <j@w1.fi>2017-01-08 16:54:36 (GMT)
commite437a5aba1240545bc4da4af626a584bb82590e5 (patch)
tree4657970b4e2580db0f730d1c3385729b4063d903 /tests
parente4a3e1d0761c249ab69a75c1f78aa3c3ba2ef166 (diff)
downloadhostap-e437a5aba1240545bc4da4af626a584bb82590e5.zip
hostap-e437a5aba1240545bc4da4af626a584bb82590e5.tar.gz
hostap-e437a5aba1240545bc4da4af626a584bb82590e5.tar.bz2
tests: Scan result parsing
Signed-off-by: Jouni Malinen <j@w1.fi>
Diffstat (limited to 'tests')
-rw-r--r--tests/hwsim/test_scan.py97
1 files changed, 97 insertions, 0 deletions
diff --git a/tests/hwsim/test_scan.py b/tests/hwsim/test_scan.py
index bf43846..4893424 100644
--- a/tests/hwsim/test_scan.py
+++ b/tests/hwsim/test_scan.py
@@ -1316,3 +1316,100 @@ def test_scan_ies(dev, apdev):
logger.info("beacon_ie: " + str(ie.keys()))
if bss['ie'] == bss['beacon_ie']:
raise Exception("Both ie and beacon_ie show same data")
+
+def test_scan_parsing(dev, apdev):
+ """Scan result parsing"""
+ if "OK" not in dev[0].request("DRIVER_EVENT SCAN_RES START"):
+ raise Exception("DRIVER_EVENT SCAN_RES START failed")
+
+ if "FAIL" not in dev[0].request("DRIVER_EVENT SCAN_RES foo "):
+ raise Exception("Invalid DRIVER_EVENT SCAN_RES accepted")
+
+ tests = [ "",
+ "flags=ffffffff",
+ "bssid=02:03:04:05:06:07",
+ "freq=1234",
+ "beacon_int=102",
+ "caps=1234",
+ "qual=10",
+ "noise=10",
+ "level=10",
+ "tsf=1122334455667788",
+ "age=123",
+ "est_throughput=100",
+ "snr=10",
+ "parent_tsf=1122334455667788",
+ "tsf_bssid=02:03:04:05:06:07",
+ "ie=00",
+ "beacon_ie=00",
+ # Too long SSID
+ "bssid=02:ff:00:00:00:01 ie=0033" + 33*'FF',
+ # All parameters
+ "flags=ffffffff bssid=02:ff:00:00:00:02 freq=1234 beacon_int=102 caps=1234 qual=10 noise=10 level=10 tsf=1122334455667788 age=123456 est_throughput=100 snr=10 parent_tsf=1122334455667788 tsf_bssid=02:03:04:05:06:07 ie=000474657374 beacon_ie=000474657374",
+ # Beacon IEs truncated
+ "bssid=02:ff:00:00:00:03 ie=0000 beacon_ie=0003ffff",
+ # Probe Response IEs truncated
+ "bssid=02:ff:00:00:00:04 ie=00000101 beacon_ie=0000",
+ # DMG (invalid caps)
+ "bssid=02:ff:00:00:00:05 freq=58320 ie=0003646d67",
+ # DMG (IBSS)
+ "bssid=02:ff:00:00:00:06 freq=60480 caps=0001 ie=0003646d67",
+ # DMG (PBSS)
+ "bssid=02:ff:00:00:00:07 freq=62640 caps=0002 ie=0003646d67",
+ # DMG (AP)
+ "bssid=02:ff:00:00:00:08 freq=64800 caps=0003 ie=0003646d67",
+ # Test BSS for updates
+ "bssid=02:ff:00:00:00:09 freq=2412 caps=0011 level=1 ie=0003757064010182",
+ # Minimal BSS data
+ "bssid=02:ff:00:00:00:00 ie=0000" ]
+ for t in tests:
+ if "OK" not in dev[0].request("DRIVER_EVENT SCAN_RES BSS " + t):
+ raise Exception("DRIVER_EVENT SCAN_RES BSS failed")
+
+ if "OK" not in dev[0].request("DRIVER_EVENT SCAN_RES END"):
+ raise Exception("DRIVER_EVENT SCAN_RES END failed")
+
+ res = dev[0].request("SCAN_RESULTS")
+ logger.info("SCAN_RESULTS:\n" + res)
+
+ bss = []
+ res = dev[0].request("BSS FIRST")
+ if "FAIL" in res:
+ raise Exception("BSS FIRST failed")
+ while "\nbssid=" in res:
+ logger.info("BSS output:\n" + res)
+ bssid = None
+ id = None
+ for val in res.splitlines():
+ if val.startswith("id="):
+ id = val.split('=')[1]
+ if val.startswith("bssid="):
+ bssid = val.split('=')[1]
+ if bssid is None or id is None:
+ raise Exception("Missing id or bssid line")
+ bss.append(bssid)
+ res = dev[0].request("BSS NEXT-" + id)
+
+ logger.info("Discovered BSSs: " + str(bss))
+ invalid_bss = [ "02:03:04:05:06:07", "02:ff:00:00:00:01" ]
+ valid_bss = [ "02:ff:00:00:00:00", "02:ff:00:00:00:02",
+ "02:ff:00:00:00:03", "02:ff:00:00:00:04",
+ "02:ff:00:00:00:05", "02:ff:00:00:00:06",
+ "02:ff:00:00:00:07", "02:ff:00:00:00:08",
+ "02:ff:00:00:00:09" ]
+ for bssid in invalid_bss:
+ if bssid in bss:
+ raise Exception("Invalid BSS included: " + bssid)
+ for bssid in valid_bss:
+ if bssid not in bss:
+ raise Exception("Valid BSS missing: " + bssid)
+
+ logger.info("Update BSS parameters")
+ if "OK" not in dev[0].request("DRIVER_EVENT SCAN_RES START"):
+ raise Exception("DRIVER_EVENT SCAN_RES START failed")
+ if "OK" not in dev[0].request("DRIVER_EVENT SCAN_RES BSS bssid=02:ff:00:00:00:09 freq=2412 caps=0002 level=2 ie=000375706401028204"):
+ raise Exception("DRIVER_EVENT SCAN_RES BSS failed")
+ if "OK" not in dev[0].request("DRIVER_EVENT SCAN_RES END"):
+ raise Exception("DRIVER_EVENT SCAN_RES END failed")
+ res = dev[0].request("BSS 02:ff:00:00:00:09")
+ logger.info("Updated BSS:\n" + res)