diff --git a/tests/hwsim/test_ap_psk.py b/tests/hwsim/test_ap_psk.py index 12d780536..461d5969e 100644 --- a/tests/hwsim/test_ap_psk.py +++ b/tests/hwsim/test_ap_psk.py @@ -17,7 +17,7 @@ import subprocess import time import hostapd -from utils import HwsimSkip +from utils import HwsimSkip, fail_test import hwsim_utils from wpasupplicant import WpaSupplicant @@ -1971,3 +1971,21 @@ def test_ap_wpa_ie_parsing(dev, apdev): dev[0].request("DISCONNECT") finally: dev[0].request("VENDOR_ELEM_REMOVE 13 *") + +def test_ap_wpa2_psk_no_random(dev, apdev): + """WPA2-PSK AP and no random numbers available""" + ssid = "test-wpa2-psk" + passphrase = 'qwertyuiop' + psk = '602e323e077bc63bd80307ef4745b754b0ae0a925c2638ecd13a794b9527b9e6' + params = hostapd.wpa2_params(ssid=ssid) + params['wpa_psk'] = psk + hapd = hostapd.add_ap(apdev[0]['ifname'], params) + with fail_test(hapd, 1, "wpa_gmk_to_gtk"): + id = dev[0].connect(ssid, raw_psk=psk, scan_freq="2412", + wait_connect=False) + ev = dev[0].wait_event(["CTRL-EVENT-DISCONNECTED"], timeout=15) + if ev is None: + raise Exception("Disconnection event not reported") + dev[0].request("DISCONNECT") + dev[0].select_network(id, freq=2412) + dev[0].wait_connected() diff --git a/tests/hwsim/utils.py b/tests/hwsim/utils.py index 2769e192c..580c65e32 100644 --- a/tests/hwsim/utils.py +++ b/tests/hwsim/utils.py @@ -36,6 +36,20 @@ class alloc_fail(object): if self._dev.request("GET_ALLOC_FAIL") != "0:%s" % self._funcs: raise Exception("Allocation failure did not trigger") +class fail_test(object): + def __init__(self, dev, count, funcs): + self._dev = dev + self._count = count + self._funcs = funcs + def __enter__(self): + cmd = "TEST_FAIL %d:%s" % (self._count, self._funcs) + if "OK" not in self._dev.request(cmd): + raise HwsimSkip("TEST_FAIL not supported") + def __exit__(self, type, value, traceback): + if type is None: + if self._dev.request("GET_FAIL") != "0:%s" % self._funcs: + raise Exception("Test failure did not trigger") + def require_under_vm(): with open('/proc/1/cmdline', 'r') as f: cmd = f.read()