tests: wpa_supplicant control interface wait for client
This test case is also adding code coverage for process daemonizing and Linux tracing. Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
5b0afb0a29
commit
523061996c
1 changed files with 44 additions and 0 deletions
|
@ -6,11 +6,13 @@
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
logger = logging.getLogger()
|
logger = logging.getLogger()
|
||||||
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
import time
|
import time
|
||||||
|
|
||||||
import hostapd
|
import hostapd
|
||||||
import hwsim_utils
|
import hwsim_utils
|
||||||
|
from hwsim import HWSimRadio
|
||||||
from wpasupplicant import WpaSupplicant
|
from wpasupplicant import WpaSupplicant
|
||||||
from utils import alloc_fail
|
from utils import alloc_fail
|
||||||
|
|
||||||
|
@ -1455,3 +1457,45 @@ def _test_wpas_ctrl_interface_add2(dev, apdev, ifname):
|
||||||
del wpas
|
del wpas
|
||||||
dev[0].global_request("INTERFACE_REMOVE " + ifname)
|
dev[0].global_request("INTERFACE_REMOVE " + ifname)
|
||||||
hwsim_utils.test_connectivity(dev[0], hapd)
|
hwsim_utils.test_connectivity(dev[0], hapd)
|
||||||
|
|
||||||
|
def test_wpas_ctrl_wait(dev, apdev, test_params):
|
||||||
|
"""wpa_supplicant control interface wait for client"""
|
||||||
|
logfile = os.path.join(test_params['logdir'], 'wpas_ctrl_wait.log-wpas')
|
||||||
|
pidfile = os.path.join(test_params['logdir'], 'wpas_ctrl_wait.pid-wpas')
|
||||||
|
conffile = os.path.join(test_params['logdir'], 'wpas_ctrl_wait.conf')
|
||||||
|
with open(conffile, 'w') as f:
|
||||||
|
f.write("ctrl_interface=DIR=/var/run/wpa_supplicant\n")
|
||||||
|
|
||||||
|
prg = os.path.join(test_params['logdir'],
|
||||||
|
'alt-wpa_supplicant/wpa_supplicant/wpa_supplicant')
|
||||||
|
if not os.path.exists(prg):
|
||||||
|
prg = '../../wpa_supplicant/wpa_supplicant'
|
||||||
|
arg = [ prg ]
|
||||||
|
cmd = subprocess.Popen(arg, stdout=subprocess.PIPE)
|
||||||
|
out = cmd.communicate()[0]
|
||||||
|
cmd.wait()
|
||||||
|
tracing = "Linux tracing" in out
|
||||||
|
|
||||||
|
with HWSimRadio() as (radio, iface):
|
||||||
|
arg = [ prg, '-BdddW', '-P', pidfile, '-f', logfile,
|
||||||
|
'-Dnl80211', '-c', conffile, '-i', iface ]
|
||||||
|
if tracing:
|
||||||
|
arg += [ '-T' ]
|
||||||
|
logger.info("Start wpa_supplicant: " + str(arg))
|
||||||
|
subprocess.call(arg)
|
||||||
|
wpas = WpaSupplicant(ifname=iface)
|
||||||
|
if "PONG" not in wpas.request("PING"):
|
||||||
|
raise Exception("Could not PING wpa_supplicant")
|
||||||
|
if not os.path.exists(pidfile):
|
||||||
|
raise Exception("PID file not created")
|
||||||
|
if "OK" not in wpas.request("TERMINATE"):
|
||||||
|
raise Exception("Could not TERMINATE")
|
||||||
|
ev = wpas.wait_event([ "CTRL-EVENT-TERMINATING" ], timeout=2)
|
||||||
|
if ev is None:
|
||||||
|
raise Exception("No termination event received")
|
||||||
|
for i in range(20):
|
||||||
|
if not os.path.exists(pidfile):
|
||||||
|
break
|
||||||
|
time.sleep(0.1)
|
||||||
|
if os.path.exists(pidfile):
|
||||||
|
raise Exception("PID file not removed")
|
||||||
|
|
Loading…
Reference in a new issue