tests: Split mbo_supp_oper_classes into multiple test cases
In addition, add even more workarounds for cfg80211 regulatory state clearing since this test case seems to be the most likely one to fail due to country=98 issues. Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
02a4ac0feb
commit
cc0a04ac86
1 changed files with 97 additions and 41 deletions
|
@ -54,7 +54,9 @@ def run_mbo_supp_oper_classes(dev, apdev, hapd, hapd2, country):
|
|||
sta = hapd.get_sta(addr)
|
||||
res5 = sta['supp_op_classes'][2:]
|
||||
dev[0].wait_regdom(country_ie=True)
|
||||
time.sleep(0.1)
|
||||
hapd.disable()
|
||||
time.sleep(0.1)
|
||||
dev[0].request("REMOVE_NETWORK all")
|
||||
dev[0].request("ABORT_SCAN")
|
||||
dev[0].wait_disconnected()
|
||||
|
@ -67,7 +69,9 @@ def run_mbo_supp_oper_classes(dev, apdev, hapd, hapd2, country):
|
|||
sta = hapd2.get_sta(addr)
|
||||
res2 = sta['supp_op_classes'][2:]
|
||||
dev[0].wait_regdom(country_ie=True)
|
||||
time.sleep(0.1)
|
||||
hapd2.disable()
|
||||
time.sleep(0.1)
|
||||
dev[0].request("REMOVE_NETWORK all")
|
||||
dev[0].request("ABORT_SCAN")
|
||||
dev[0].wait_disconnected()
|
||||
|
@ -75,16 +79,44 @@ def run_mbo_supp_oper_classes(dev, apdev, hapd, hapd2, country):
|
|||
|
||||
return res2, res5
|
||||
|
||||
def test_mbo_supp_oper_classes(dev, apdev):
|
||||
"""MBO and supported operating classes"""
|
||||
params = { 'ssid': "test-wnm-mbo",
|
||||
'mbo': '1',
|
||||
"country_code": "US",
|
||||
'ieee80211d': '1',
|
||||
"ieee80211n": "1",
|
||||
"hw_mode": "a",
|
||||
"channel": "36" }
|
||||
hapd = hostapd.add_ap(apdev[0], params, no_enable=True)
|
||||
def clear_country(dev):
|
||||
logger.info("Try to clear country")
|
||||
id = dev[1].add_network()
|
||||
dev[1].set_network(id, "mode", "2")
|
||||
dev[1].set_network_quoted(id, "ssid", "country-clear")
|
||||
dev[1].set_network(id, "key_mgmt", "NONE")
|
||||
dev[1].set_network(id, "frequency", "2412")
|
||||
dev[1].set_network(id, "scan_freq", "2412")
|
||||
dev[1].select_network(id)
|
||||
ev = dev[1].wait_event(["CTRL-EVENT-CONNECTED"])
|
||||
if ev:
|
||||
dev[0].connect("country-clear", key_mgmt="NONE", scan_freq="2412")
|
||||
dev[1].request("DISCONNECT")
|
||||
dev[0].wait_disconnected()
|
||||
dev[0].request("DISCONNECT")
|
||||
dev[0].request("ABORT_SCAN")
|
||||
time.sleep(1)
|
||||
dev[0].dump_monitor()
|
||||
dev[1].dump_monitor()
|
||||
|
||||
def wait_regdom_changes(dev):
|
||||
for i in range(10):
|
||||
ev = dev.wait_event(["CTRL-EVENT-REGDOM-CHANGE"], timeout=0.1)
|
||||
if ev is None:
|
||||
break
|
||||
|
||||
def run_mbo_supp_oper_class(dev, apdev, country, expected, inc5):
|
||||
if inc5:
|
||||
params = { 'ssid': "test-wnm-mbo",
|
||||
'mbo': '1',
|
||||
"country_code": "US",
|
||||
'ieee80211d': '1',
|
||||
"ieee80211n": "1",
|
||||
"hw_mode": "a",
|
||||
"channel": "36" }
|
||||
hapd = hostapd.add_ap(apdev[0], params, no_enable=True)
|
||||
else:
|
||||
hapd = None
|
||||
|
||||
params = { 'ssid': "test-wnm-mbo-2",
|
||||
'mbo': '1',
|
||||
|
@ -97,42 +129,66 @@ def test_mbo_supp_oper_classes(dev, apdev):
|
|||
|
||||
try:
|
||||
dev[0].request("STA_AUTOCONNECT 0")
|
||||
za2, za5 = run_mbo_supp_oper_classes(dev, apdev, hapd, hapd2, "ZA")
|
||||
fi2, fi5 = run_mbo_supp_oper_classes(dev, apdev, hapd, hapd2, "FI")
|
||||
us2, us5 = run_mbo_supp_oper_classes(dev, apdev, hapd, hapd2, "US")
|
||||
jp2, jp5 = run_mbo_supp_oper_classes(dev, apdev, hapd, hapd2, "JP")
|
||||
bd2, bd5 = run_mbo_supp_oper_classes(dev, apdev, None, hapd2, "BD")
|
||||
sy2, sy5 = run_mbo_supp_oper_classes(dev, apdev, None, hapd2, "SY")
|
||||
res2, res5 = run_mbo_supp_oper_classes(dev, apdev, hapd, hapd2, country)
|
||||
finally:
|
||||
dev[0].dump_monitor()
|
||||
set_reg("00", apdev[0], apdev[1], dev[0])
|
||||
ev = dev[0].wait_event(["CTRL-EVENT-REGDOM-CHANGE"], timeout=1)
|
||||
dev[0].request("STA_AUTOCONNECT 1")
|
||||
wait_regdom_changes(dev[0])
|
||||
country1 = dev[0].get_driver_status_field("country")
|
||||
logger.info("Country code at the end (1): " + country1)
|
||||
set_reg("00", apdev[0], apdev[1], dev[0])
|
||||
country2 = dev[0].get_driver_status_field("country")
|
||||
logger.info("Country code at the end (2): " + country2)
|
||||
for i in range(5):
|
||||
ev = dev[0].wait_event(["CTRL-EVENT-REGDOM-CHANGE"], timeout=1)
|
||||
if ev is None or "init=USER type=WORLD" in ev:
|
||||
break
|
||||
wait_regdom_changes(dev[0])
|
||||
country3 = dev[0].get_driver_status_field("country")
|
||||
logger.info("Country code at the end (3): " + country3)
|
||||
if country3 != "00":
|
||||
clear_country(dev)
|
||||
|
||||
za = "515354737475767778797a7b808182"
|
||||
fi = "515354737475767778797a7b808182"
|
||||
us = "515354737475767778797a7b7c7d7e7f808182"
|
||||
jp = "51525354737475767778797a7b808182"
|
||||
bd = "5153547c7d7e7f80"
|
||||
sy = "515354"
|
||||
# For now, allow operating class 129 to be missing since not all
|
||||
# installed regdb files include the 160 MHz channels.
|
||||
expected2 = expected.replace('808182', '8082')
|
||||
# For now, allow operating classes 121-123 to be missing since not all
|
||||
# installed regdb files include the related US DFS channels.
|
||||
expected2 = expected2.replace('78797a7b7c', '787c')
|
||||
if res2 != expected and res2 != expected2:
|
||||
raise Exception("Unexpected supp_op_class string (country=%s, 2.4 GHz): %s (expected: %s)" % (country, res2, expected))
|
||||
if inc5 and res5 != expected and res5 != expected2:
|
||||
raise Exception("Unexpected supp_op_class string (country=%s, 5 GHz): %s (expected: %s)" % (country, res5, expected))
|
||||
|
||||
tests = [ ("ZA", za, za2, za5, True),
|
||||
("FI", fi, fi2, fi5, True),
|
||||
("US", us, us2, us5, True),
|
||||
("JP", jp, jp2, jp5, True),
|
||||
("BD", bd, bd2, bd5, False),
|
||||
("SY", sy, sy2, sy5, False) ]
|
||||
for country, expected, res2, res5, inc5 in tests:
|
||||
# For now, allow operating class 129 to be missing since not all
|
||||
# installed regdb files include the 160 MHz channels.
|
||||
expected2 = expected.replace('808182', '8082')
|
||||
# For now, allow operating classes 121-123 to be missing since not all
|
||||
# installed regdb files include the related US DFS channels.
|
||||
expected2 = expected2.replace('78797a7b7c', '787c')
|
||||
if res2 != expected and res2 != expected2:
|
||||
raise Exception("Unexpected supp_op_class string (country=%s, 2.4 GHz): %s (expected: %s)" % (country, res2, expected))
|
||||
if inc5 and res5 != expected and res5 != expected2:
|
||||
raise Exception("Unexpected supp_op_class string (country=%s, 5 GHz): %s (expected: %s)" % (country, res5, expected))
|
||||
def test_mbo_supp_oper_classes_za(dev, apdev):
|
||||
"""MBO and supported operating classes (ZA)"""
|
||||
run_mbo_supp_oper_class(dev, apdev, "ZA",
|
||||
"515354737475767778797a7b808182", True)
|
||||
|
||||
def test_mbo_supp_oper_classes_fi(dev, apdev):
|
||||
"""MBO and supported operating classes (FI)"""
|
||||
run_mbo_supp_oper_class(dev, apdev, "FI",
|
||||
"515354737475767778797a7b808182", True)
|
||||
|
||||
def test_mbo_supp_oper_classes_us(dev, apdev):
|
||||
"""MBO and supported operating classes (US)"""
|
||||
run_mbo_supp_oper_class(dev, apdev, "US",
|
||||
"515354737475767778797a7b7c7d7e7f808182", True)
|
||||
|
||||
def test_mbo_supp_oper_classes_jp(dev, apdev):
|
||||
"""MBO and supported operating classes (JP)"""
|
||||
run_mbo_supp_oper_class(dev, apdev, "JP",
|
||||
"51525354737475767778797a7b808182", True)
|
||||
|
||||
def test_mbo_supp_oper_classes_bd(dev, apdev):
|
||||
"""MBO and supported operating classes (BD)"""
|
||||
run_mbo_supp_oper_class(dev, apdev, "BD",
|
||||
"5153547c7d7e7f80", False)
|
||||
|
||||
def test_mbo_supp_oper_classes_sy(dev, apdev):
|
||||
"""MBO and supported operating classes (SY)"""
|
||||
run_mbo_supp_oper_class(dev, apdev, "SY",
|
||||
"515354", False)
|
||||
|
||||
def test_mbo_assoc_disallow(dev, apdev, params):
|
||||
"""MBO and association disallowed"""
|
||||
|
|
Loading…
Reference in a new issue