tests: Add wpa_supplicant WMM-AC test
Add basic wpa_supplicant tests for WMM-AC TSPEC addition/deletion. Signed-off-by: Eliad Peller <eliadx.peller@intel.com>
This commit is contained in:
parent
83b9d426e0
commit
7613345814
2 changed files with 106 additions and 0 deletions
76
tests/hwsim/test_wpas_wmm_ac.py
Normal file
76
tests/hwsim/test_wpas_wmm_ac.py
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
# Test cases for wpa_supplicant WMM-AC operations
|
||||||
|
# Copyright (c) 2014, Intel Corporation
|
||||||
|
#
|
||||||
|
# This software may be distributed under the terms of the BSD license.
|
||||||
|
# See README for more details.
|
||||||
|
|
||||||
|
import logging
|
||||||
|
logger = logging.getLogger()
|
||||||
|
|
||||||
|
import hwsim_utils
|
||||||
|
import hostapd
|
||||||
|
|
||||||
|
def add_wmm_ap(apdev, acm_list):
|
||||||
|
params = { "ssid": "wmm_ac",
|
||||||
|
"hw_mode": "g",
|
||||||
|
"channel": "11",
|
||||||
|
"wmm_enabled" : "1"}
|
||||||
|
|
||||||
|
for ac in acm_list:
|
||||||
|
params["wmm_ac_%s_acm" % (ac.lower())] = "1"
|
||||||
|
|
||||||
|
return hostapd.add_ap(apdev[0]['ifname'], params)
|
||||||
|
|
||||||
|
def test_tspec(dev, apdev):
|
||||||
|
"""Basic addts/delts tests"""
|
||||||
|
# configure ap with VO and VI requiring admission-control
|
||||||
|
hapd = add_wmm_ap(apdev, ["VO", "VI"])
|
||||||
|
dev[0].connect("wmm_ac", key_mgmt="NONE", scan_freq="2462")
|
||||||
|
hwsim_utils.test_connectivity(dev[0], hapd)
|
||||||
|
status = dev[0].request("WMM_AC_STATUS")
|
||||||
|
if "WMM AC is Enabled" not in status:
|
||||||
|
raise Exception("WMM-AC not enabled")
|
||||||
|
if "TSID" in status:
|
||||||
|
raise Exception("Unexpected TSID info")
|
||||||
|
if "BK: acm=0 uapsd=0" not in status:
|
||||||
|
raise Exception("Unexpected BK info" + status)
|
||||||
|
if "BE: acm=0 uapsd=0" not in status:
|
||||||
|
raise Exception("Unexpected BE info" + status)
|
||||||
|
if "VI: acm=1 uapsd=0" not in status:
|
||||||
|
raise Exception("Unexpected VI info" + status)
|
||||||
|
if "VO: acm=1 uapsd=0" not in status:
|
||||||
|
raise Exception("Unexpected VO info" + status)
|
||||||
|
|
||||||
|
tsid = 5
|
||||||
|
|
||||||
|
# make sure we fail when the ac is not configured for acm
|
||||||
|
try:
|
||||||
|
dev[0].add_ts(tsid, 3)
|
||||||
|
raise Exception("ADDTS succeeded although it should have failed")
|
||||||
|
except Exception, e:
|
||||||
|
if not str(e).startswith("ADDTS failed"):
|
||||||
|
raise
|
||||||
|
status = dev[0].request("WMM_AC_STATUS")
|
||||||
|
if "TSID" in status:
|
||||||
|
raise Exception("Unexpected TSID info")
|
||||||
|
|
||||||
|
# add tspec for UP=6
|
||||||
|
dev[0].add_ts(tsid, 6)
|
||||||
|
status = dev[0].request("WMM_AC_STATUS")
|
||||||
|
if "TSID" not in status:
|
||||||
|
raise Exception("Missing TSID info")
|
||||||
|
|
||||||
|
# using the same tsid for a different ac is invalid
|
||||||
|
try:
|
||||||
|
dev[0].add_ts(tsid, 5)
|
||||||
|
raise Exception("ADDTS succeeded although it should have failed")
|
||||||
|
except Exception, e:
|
||||||
|
if not str(e).startswith("ADDTS failed"):
|
||||||
|
raise
|
||||||
|
|
||||||
|
# update the tspec for a different UP of the same ac
|
||||||
|
dev[0].add_ts(tsid, 7)
|
||||||
|
dev[0].del_ts(tsid)
|
||||||
|
status = dev[0].request("WMM_AC_STATUS")
|
||||||
|
if "TSID" in status:
|
||||||
|
raise Exception("Unexpected TSID info")
|
|
@ -701,6 +701,36 @@ class WpaSupplicant:
|
||||||
raise Exception("Failed to request TDLS teardown")
|
raise Exception("Failed to request TDLS teardown")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def add_ts(self, tsid, up):
|
||||||
|
params = {
|
||||||
|
"sba": 9000,
|
||||||
|
"nominal_msdu_size": 1500,
|
||||||
|
"min_phy_rate": 6000000,
|
||||||
|
"mean_data_rate": 1500,
|
||||||
|
}
|
||||||
|
cmd = "WMM_AC_ADDTS downlink tsid=%d up=%d" % (tsid, up)
|
||||||
|
for (key, value) in params.iteritems():
|
||||||
|
cmd += " %s=%d" % (key, value)
|
||||||
|
|
||||||
|
if self.request(cmd).strip() != "OK":
|
||||||
|
raise Exception("ADDTS failed (tsid=%d up=%d)" % (tsid, up))
|
||||||
|
|
||||||
|
ev = self.wait_event(["TSPEC-ADDED"], timeout=1)
|
||||||
|
if ev is None:
|
||||||
|
raise Exception("ADDTS failed (time out)")
|
||||||
|
if "tsid=%d" % (tsid) not in ev:
|
||||||
|
raise Exception("ADDTS failed (invalid tsid in TSPEC-ADDED)")
|
||||||
|
|
||||||
|
def del_ts(self, tsid):
|
||||||
|
if self.request("WMM_AC_DELTS %d" % (tsid)).strip() != "OK":
|
||||||
|
raise Exception("DELTS failed")
|
||||||
|
|
||||||
|
ev = self.wait_event(["TSPEC-REMOVED"], timeout=1)
|
||||||
|
if ev is None:
|
||||||
|
raise Exception("DELTS failed (time out)")
|
||||||
|
if "tsid=%d" % (tsid) not in ev:
|
||||||
|
raise Exception("DELTS failed (invalid tsid in TSPEC-REMOVED)")
|
||||||
|
|
||||||
def connect(self, ssid=None, ssid2=None, **kwargs):
|
def connect(self, ssid=None, ssid2=None, **kwargs):
|
||||||
logger.info("Connect STA " + self.ifname + " to AP")
|
logger.info("Connect STA " + self.ifname + " to AP")
|
||||||
id = self.add_network()
|
id = self.add_network()
|
||||||
|
|
Loading…
Reference in a new issue