From 870906d5cc398a30c60b7bc3f6de84a5cba2e950 Mon Sep 17 00:00:00 2001 From: Mathy Vanhoef Date: Mon, 6 Aug 2018 15:46:41 -0400 Subject: [PATCH] tests: OCI validation in SA Query frames (OCV) Signed-off-by: Mathy Vanhoef --- tests/hwsim/test_ap_pmf.py | 67 +++++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/tests/hwsim/test_ap_pmf.py b/tests/hwsim/test_ap_pmf.py index c60f66d4d..e2f6529b2 100644 --- a/tests/hwsim/test_ap_pmf.py +++ b/tests/hwsim/test_ap_pmf.py @@ -11,7 +11,7 @@ logger = logging.getLogger() import hwsim_utils import hostapd -from utils import alloc_fail, fail_test, wait_fail_trigger +from utils import alloc_fail, fail_test, wait_fail_trigger, HwsimSkip from wlantest import Wlantest from wpasupplicant import WpaSupplicant @@ -57,6 +57,71 @@ def test_ap_pmf_required(dev, apdev): dev[1].p2p_interface_addr()) < 1: raise Exception("STA did not reply to SA Query") +@remote_compatible +def test_ocv_sa_query(dev, apdev): + """Test SA Query with OCV""" + ssid = "test-pmf-required" + params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678") + params["wpa_key_mgmt"] = "WPA-PSK-SHA256" + params["ieee80211w"] = "2" + params["ocv"] = "1" + try: + hapd = hostapd.add_ap(apdev[0], params) + except Exception, e: + if "Failed to set hostapd parameter ocv" in str(e): + raise HwsimSkip("OCV not supported") + raise + Wlantest.setup(hapd) + wt = Wlantest() + wt.flush() + wt.add_passphrase("12345678") + dev[0].connect(ssid, psk="12345678", ieee80211w="1", ocv="1", + key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2", + scan_freq="2412") + + # Test that client can handle SA Query with OCI element + if "OK" not in hapd.request("SA_QUERY " + dev[0].own_addr()): + raise Exception("SA_QUERY failed") + time.sleep(0.1) + if wt.get_sta_counter("valid_saqueryresp_tx", apdev[0]['bssid'], + dev[0].own_addr()) < 1: + raise Exception("STA did not reply to SA Query") + + # Test that AP can handle SA Query with OCI element + if "OK" not in dev[0].request("UNPROT_DEAUTH"): + raise Exception("Triggering SA Query from the STA failed") + ev = dev[0].wait_event(["CTRL-EVENT-DISCONNECTED"], timeout=3) + if ev is not None: + raise Exception("SA Query from the STA failed") + +@remote_compatible +def test_ocv_sa_query_csa(dev, apdev): + """Test SA Query with OCV after channel switch""" + ssid = "test-pmf-required" + params = hostapd.wpa2_params(ssid=ssid, passphrase="12345678") + params["wpa_key_mgmt"] = "WPA-PSK-SHA256" + params["ieee80211w"] = "2" + params["ocv"] = "1" + try: + hapd = hostapd.add_ap(apdev[0], params) + except Exception, e: + if "Failed to set hostapd parameter ocv" in str(e): + raise HwsimSkip("OCV not supported") + raise + Wlantest.setup(hapd) + wt = Wlantest() + wt.flush() + wt.add_passphrase("12345678") + dev[0].connect(ssid, psk="12345678", ieee80211w="1", ocv="1", + key_mgmt="WPA-PSK WPA-PSK-SHA256", proto="WPA2", + scan_freq="2412") + + hapd.request("CHAN_SWITCH 5 2437") + time.sleep(1) + if wt.get_sta_counter("valid_saqueryreq_tx", apdev[0]['bssid'], + dev[0].own_addr()) < 1: + raise Exception("STA did not start SA Query after channel switch") + @remote_compatible def test_ap_pmf_optional(dev, apdev): """WPA2-PSK AP with PMF optional"""