tests: rfkill test cases
Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
40602101de
commit
2d6ce4327a
1 changed files with 117 additions and 0 deletions
117
tests/hwsim/test_rfkill.py
Normal file
117
tests/hwsim/test_rfkill.py
Normal file
|
@ -0,0 +1,117 @@
|
|||
# rfkill tests
|
||||
# Copyright (c) 2014, Jouni Malinen <j@w1.fi>
|
||||
#
|
||||
# This software may be distributed under the terms of the BSD license.
|
||||
# See README for more details.
|
||||
|
||||
import logging
|
||||
logger = logging.getLogger()
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
import hostapd
|
||||
import hwsim_utils
|
||||
|
||||
def get_rfkill_id(dev):
|
||||
try:
|
||||
cmd = subprocess.Popen(["rfkill", "list"], stdout=subprocess.PIPE)
|
||||
except Exception, e:
|
||||
logger.info("No rfkill available: " + str(e))
|
||||
return None
|
||||
res = cmd.stdout.read()
|
||||
cmd.stdout.close()
|
||||
phy = dev.get_driver_status_field("phyname")
|
||||
matches = [ line for line in res.splitlines() if phy + ':' in line ]
|
||||
if len(matches) != 1:
|
||||
return None
|
||||
return matches[0].split(':')[0]
|
||||
|
||||
def test_rfkill_open(dev, apdev):
|
||||
"""rfkill block/unblock during open mode connection"""
|
||||
id = get_rfkill_id(dev[0])
|
||||
if id is None:
|
||||
return "skip"
|
||||
|
||||
hapd = hostapd.add_ap(apdev[0]['ifname'], { "ssid": "open" })
|
||||
dev[0].connect("open", key_mgmt="NONE", scan_freq="2412")
|
||||
try:
|
||||
logger.info("rfkill block")
|
||||
subprocess.call(['sudo', 'rfkill', 'block', id])
|
||||
ev = dev[0].wait_event(["CTRL-EVENT-DISCONNECTED"], timeout=10)
|
||||
if ev is None:
|
||||
raise Exception("Missing disconnection event on rfkill block")
|
||||
|
||||
logger.info("rfkill unblock")
|
||||
subprocess.call(['sudo', 'rfkill', 'unblock', id])
|
||||
ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=10)
|
||||
if ev is None:
|
||||
raise Exception("Missing connection event on rfkill unblock")
|
||||
hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
|
||||
finally:
|
||||
subprocess.call(['sudo', 'rfkill', 'unblock', id])
|
||||
|
||||
def test_rfkill_wpa2_psk(dev, apdev):
|
||||
"""rfkill block/unblock during WPA2-PSK connection"""
|
||||
id = get_rfkill_id(dev[0])
|
||||
if id is None:
|
||||
return "skip"
|
||||
|
||||
ssid = "test-wpa2-psk"
|
||||
passphrase = 'qwertyuiop'
|
||||
params = hostapd.wpa2_params(ssid=ssid, passphrase=passphrase)
|
||||
hapd = hostapd.add_ap(apdev[0]['ifname'], params)
|
||||
dev[0].connect(ssid, psk=passphrase, scan_freq="2412")
|
||||
try:
|
||||
logger.info("rfkill block")
|
||||
subprocess.call(['sudo', 'rfkill', 'block', id])
|
||||
ev = dev[0].wait_event(["CTRL-EVENT-DISCONNECTED"], timeout=10)
|
||||
if ev is None:
|
||||
raise Exception("Missing disconnection event on rfkill block")
|
||||
|
||||
logger.info("rfkill unblock")
|
||||
subprocess.call(['sudo', 'rfkill', 'unblock', id])
|
||||
ev = dev[0].wait_event(["CTRL-EVENT-CONNECTED"], timeout=10)
|
||||
if ev is None:
|
||||
raise Exception("Missing connection event on rfkill unblock")
|
||||
hwsim_utils.test_connectivity(dev[0].ifname, apdev[0]['ifname'])
|
||||
finally:
|
||||
subprocess.call(['sudo', 'rfkill', 'unblock', id])
|
||||
|
||||
def test_rfkill_autogo(dev, apdev):
|
||||
"""rfkill block/unblock for autonomous P2P GO"""
|
||||
id0 = get_rfkill_id(dev[0])
|
||||
if id0 is None:
|
||||
return "skip"
|
||||
id1 = get_rfkill_id(dev[1])
|
||||
if id1 is None:
|
||||
return "skip"
|
||||
|
||||
dev[0].p2p_start_go()
|
||||
dev[1].request("SET p2p_no_group_iface 0")
|
||||
dev[1].p2p_start_go()
|
||||
|
||||
try:
|
||||
logger.info("rfkill block 0")
|
||||
subprocess.call(['sudo', 'rfkill', 'block', id0])
|
||||
ev = dev[0].wait_global_event(["P2P-GROUP-REMOVED"], timeout=10)
|
||||
if ev is None:
|
||||
raise Exception("Group removal not reported")
|
||||
if "reason=UNAVAILABLE" not in ev:
|
||||
raise Exception("Unexpected group removal reason: " + ev)
|
||||
|
||||
logger.info("rfkill block 1")
|
||||
subprocess.call(['sudo', 'rfkill', 'block', id1])
|
||||
ev = dev[1].wait_global_event(["P2P-GROUP-REMOVED"], timeout=10)
|
||||
if ev is None:
|
||||
raise Exception("Group removal not reported")
|
||||
if "reason=UNAVAILABLE" not in ev:
|
||||
raise Exception("Unexpected group removal reason: " + ev)
|
||||
|
||||
logger.info("rfkill unblock 0")
|
||||
subprocess.call(['sudo', 'rfkill', 'unblock', id0])
|
||||
logger.info("rfkill unblock 1")
|
||||
subprocess.call(['sudo', 'rfkill', 'unblock', id1])
|
||||
time.sleep(1)
|
||||
finally:
|
||||
subprocess.call(['sudo', 'rfkill', 'unblock', id0])
|
||||
subprocess.call(['sudo', 'rfkill', 'unblock', id1])
|
Loading…
Reference in a new issue