tests: Make wnm_bss_tm_req a bit more efficient and robust
Use a local variable for the STA address instead of fetching it separately for each operation. Dump control interface monitor events between each test message to avoid increasing the socket output queue unnecessarily. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
ed432343f4
commit
4fe798bd9d
1 changed files with 30 additions and 15 deletions
|
@ -381,86 +381,97 @@ def test_wnm_bss_tm_req(dev, apdev):
|
||||||
params = { "ssid": "test-wnm", "bss_transition": "1" }
|
params = { "ssid": "test-wnm", "bss_transition": "1" }
|
||||||
hapd = hostapd.add_ap(apdev[0], params)
|
hapd = hostapd.add_ap(apdev[0], params)
|
||||||
dev[0].connect("test-wnm", key_mgmt="NONE", scan_freq="2412")
|
dev[0].connect("test-wnm", key_mgmt="NONE", scan_freq="2412")
|
||||||
|
addr = dev[0].own_addr()
|
||||||
|
|
||||||
hapd.set("ext_mgmt_frame_handling", "1")
|
hapd.set("ext_mgmt_frame_handling", "1")
|
||||||
|
|
||||||
# truncated BSS TM Request
|
# truncated BSS TM Request
|
||||||
req = bss_tm_req(dev[0].p2p_interface_addr(), apdev[0]['bssid'],
|
req = bss_tm_req(addr, apdev[0]['bssid'],
|
||||||
req_mode=0x08)
|
req_mode=0x08)
|
||||||
req['payload'] = struct.pack("<BBBBH",
|
req['payload'] = struct.pack("<BBBBH",
|
||||||
ACTION_CATEG_WNM, WNM_ACT_BSS_TM_REQ,
|
ACTION_CATEG_WNM, WNM_ACT_BSS_TM_REQ,
|
||||||
1, 0, 0)
|
1, 0, 0)
|
||||||
hapd.mgmt_tx(req)
|
hapd.mgmt_tx(req)
|
||||||
expect_ack(hapd)
|
expect_ack(hapd)
|
||||||
|
dev[0].dump_monitor()
|
||||||
|
|
||||||
# no disassociation and no candidate list
|
# no disassociation and no candidate list
|
||||||
req = bss_tm_req(dev[0].p2p_interface_addr(), apdev[0]['bssid'],
|
req = bss_tm_req(addr, apdev[0]['bssid'],
|
||||||
dialog_token=2)
|
dialog_token=2)
|
||||||
hapd.mgmt_tx(req)
|
hapd.mgmt_tx(req)
|
||||||
resp = rx_bss_tm_resp(hapd, expect_dialog=2, expect_status=1)
|
resp = rx_bss_tm_resp(hapd, expect_dialog=2, expect_status=1)
|
||||||
|
dev[0].dump_monitor()
|
||||||
|
|
||||||
# truncated BSS Termination Duration
|
# truncated BSS Termination Duration
|
||||||
req = bss_tm_req(dev[0].p2p_interface_addr(), apdev[0]['bssid'],
|
req = bss_tm_req(addr, apdev[0]['bssid'],
|
||||||
req_mode=0x08)
|
req_mode=0x08)
|
||||||
hapd.mgmt_tx(req)
|
hapd.mgmt_tx(req)
|
||||||
expect_ack(hapd)
|
expect_ack(hapd)
|
||||||
|
dev[0].dump_monitor()
|
||||||
|
|
||||||
# BSS Termination Duration with TSF=0 and Duration=10
|
# BSS Termination Duration with TSF=0 and Duration=10
|
||||||
req = bss_tm_req(dev[0].p2p_interface_addr(), apdev[0]['bssid'],
|
req = bss_tm_req(addr, apdev[0]['bssid'],
|
||||||
req_mode=0x08, dialog_token=3)
|
req_mode=0x08, dialog_token=3)
|
||||||
req['payload'] += struct.pack("<BBQH", 4, 10, 0, 10)
|
req['payload'] += struct.pack("<BBQH", 4, 10, 0, 10)
|
||||||
hapd.mgmt_tx(req)
|
hapd.mgmt_tx(req)
|
||||||
resp = rx_bss_tm_resp(hapd, expect_dialog=3, expect_status=1)
|
resp = rx_bss_tm_resp(hapd, expect_dialog=3, expect_status=1)
|
||||||
|
dev[0].dump_monitor()
|
||||||
|
|
||||||
# truncated Session Information URL
|
# truncated Session Information URL
|
||||||
req = bss_tm_req(dev[0].p2p_interface_addr(), apdev[0]['bssid'],
|
req = bss_tm_req(addr, apdev[0]['bssid'],
|
||||||
req_mode=0x10)
|
req_mode=0x10)
|
||||||
hapd.mgmt_tx(req)
|
hapd.mgmt_tx(req)
|
||||||
expect_ack(hapd)
|
expect_ack(hapd)
|
||||||
req = bss_tm_req(dev[0].p2p_interface_addr(), apdev[0]['bssid'],
|
req = bss_tm_req(addr, apdev[0]['bssid'],
|
||||||
req_mode=0x10)
|
req_mode=0x10)
|
||||||
req['payload'] += struct.pack("<BBB", 3, 65, 66)
|
req['payload'] += struct.pack("<BBB", 3, 65, 66)
|
||||||
hapd.mgmt_tx(req)
|
hapd.mgmt_tx(req)
|
||||||
expect_ack(hapd)
|
expect_ack(hapd)
|
||||||
|
dev[0].dump_monitor()
|
||||||
|
|
||||||
# Session Information URL
|
# Session Information URL
|
||||||
req = bss_tm_req(dev[0].p2p_interface_addr(), apdev[0]['bssid'],
|
req = bss_tm_req(addr, apdev[0]['bssid'],
|
||||||
req_mode=0x10, dialog_token=4)
|
req_mode=0x10, dialog_token=4)
|
||||||
req['payload'] += struct.pack("<BBB", 2, 65, 66)
|
req['payload'] += struct.pack("<BBB", 2, 65, 66)
|
||||||
hapd.mgmt_tx(req)
|
hapd.mgmt_tx(req)
|
||||||
resp = rx_bss_tm_resp(hapd, expect_dialog=4, expect_status=0)
|
resp = rx_bss_tm_resp(hapd, expect_dialog=4, expect_status=0)
|
||||||
|
dev[0].dump_monitor()
|
||||||
|
|
||||||
# Preferred Candidate List without any entries
|
# Preferred Candidate List without any entries
|
||||||
req = bss_tm_req(dev[0].p2p_interface_addr(), apdev[0]['bssid'],
|
req = bss_tm_req(addr, apdev[0]['bssid'],
|
||||||
req_mode=0x01, dialog_token=5)
|
req_mode=0x01, dialog_token=5)
|
||||||
hapd.mgmt_tx(req)
|
hapd.mgmt_tx(req)
|
||||||
resp = rx_bss_tm_resp(hapd, expect_dialog=5, expect_status=7)
|
resp = rx_bss_tm_resp(hapd, expect_dialog=5, expect_status=7)
|
||||||
|
dev[0].dump_monitor()
|
||||||
|
|
||||||
# Preferred Candidate List with a truncated entry
|
# Preferred Candidate List with a truncated entry
|
||||||
req = bss_tm_req(dev[0].p2p_interface_addr(), apdev[0]['bssid'],
|
req = bss_tm_req(addr, apdev[0]['bssid'],
|
||||||
req_mode=0x01)
|
req_mode=0x01)
|
||||||
req['payload'] += struct.pack("<BB", 52, 1)
|
req['payload'] += struct.pack("<BB", 52, 1)
|
||||||
hapd.mgmt_tx(req)
|
hapd.mgmt_tx(req)
|
||||||
expect_ack(hapd)
|
expect_ack(hapd)
|
||||||
|
dev[0].dump_monitor()
|
||||||
|
|
||||||
# Preferred Candidate List with a too short entry
|
# Preferred Candidate List with a too short entry
|
||||||
req = bss_tm_req(dev[0].p2p_interface_addr(), apdev[0]['bssid'],
|
req = bss_tm_req(addr, apdev[0]['bssid'],
|
||||||
req_mode=0x01, dialog_token=6)
|
req_mode=0x01, dialog_token=6)
|
||||||
req['payload'] += struct.pack("<BB", 52, 0)
|
req['payload'] += struct.pack("<BB", 52, 0)
|
||||||
hapd.mgmt_tx(req)
|
hapd.mgmt_tx(req)
|
||||||
resp = rx_bss_tm_resp(hapd, expect_dialog=6, expect_status=7)
|
resp = rx_bss_tm_resp(hapd, expect_dialog=6, expect_status=7)
|
||||||
|
dev[0].dump_monitor()
|
||||||
|
|
||||||
# Preferred Candidate List with a non-matching entry
|
# Preferred Candidate List with a non-matching entry
|
||||||
req = bss_tm_req(dev[0].p2p_interface_addr(), apdev[0]['bssid'],
|
req = bss_tm_req(addr, apdev[0]['bssid'],
|
||||||
req_mode=0x01, dialog_token=6)
|
req_mode=0x01, dialog_token=6)
|
||||||
req['payload'] += struct.pack("<BB6BLBBB", 52, 13,
|
req['payload'] += struct.pack("<BB6BLBBB", 52, 13,
|
||||||
1, 2, 3, 4, 5, 6,
|
1, 2, 3, 4, 5, 6,
|
||||||
0, 81, 1, 7)
|
0, 81, 1, 7)
|
||||||
hapd.mgmt_tx(req)
|
hapd.mgmt_tx(req)
|
||||||
resp = rx_bss_tm_resp(hapd, expect_dialog=6, expect_status=7)
|
resp = rx_bss_tm_resp(hapd, expect_dialog=6, expect_status=7)
|
||||||
|
dev[0].dump_monitor()
|
||||||
|
|
||||||
# Preferred Candidate List with a truncated subelement
|
# Preferred Candidate List with a truncated subelement
|
||||||
req = bss_tm_req(dev[0].p2p_interface_addr(), apdev[0]['bssid'],
|
req = bss_tm_req(addr, apdev[0]['bssid'],
|
||||||
req_mode=0x01, dialog_token=7)
|
req_mode=0x01, dialog_token=7)
|
||||||
req['payload'] += struct.pack("<BB6BLBBBBB", 52, 13 + 2,
|
req['payload'] += struct.pack("<BB6BLBBBBB", 52, 13 + 2,
|
||||||
1, 2, 3, 4, 5, 6,
|
1, 2, 3, 4, 5, 6,
|
||||||
|
@ -468,9 +479,10 @@ def test_wnm_bss_tm_req(dev, apdev):
|
||||||
1, 1)
|
1, 1)
|
||||||
hapd.mgmt_tx(req)
|
hapd.mgmt_tx(req)
|
||||||
resp = rx_bss_tm_resp(hapd, expect_dialog=7, expect_status=7)
|
resp = rx_bss_tm_resp(hapd, expect_dialog=7, expect_status=7)
|
||||||
|
dev[0].dump_monitor()
|
||||||
|
|
||||||
# Preferred Candidate List with lots of invalid optional subelements
|
# Preferred Candidate List with lots of invalid optional subelements
|
||||||
req = bss_tm_req(dev[0].p2p_interface_addr(), apdev[0]['bssid'],
|
req = bss_tm_req(addr, apdev[0]['bssid'],
|
||||||
req_mode=0x01, dialog_token=8)
|
req_mode=0x01, dialog_token=8)
|
||||||
subelems = struct.pack("<BBHB", 1, 3, 0, 100)
|
subelems = struct.pack("<BBHB", 1, 3, 0, 100)
|
||||||
subelems += struct.pack("<BBB", 2, 1, 65)
|
subelems += struct.pack("<BBB", 2, 1, 65)
|
||||||
|
@ -485,9 +497,10 @@ def test_wnm_bss_tm_req(dev, apdev):
|
||||||
0, 81, 1, 7) + subelems
|
0, 81, 1, 7) + subelems
|
||||||
hapd.mgmt_tx(req)
|
hapd.mgmt_tx(req)
|
||||||
resp = rx_bss_tm_resp(hapd, expect_dialog=8, expect_status=7)
|
resp = rx_bss_tm_resp(hapd, expect_dialog=8, expect_status=7)
|
||||||
|
dev[0].dump_monitor()
|
||||||
|
|
||||||
# Preferred Candidate List with lots of valid optional subelements (twice)
|
# Preferred Candidate List with lots of valid optional subelements (twice)
|
||||||
req = bss_tm_req(dev[0].p2p_interface_addr(), apdev[0]['bssid'],
|
req = bss_tm_req(addr, apdev[0]['bssid'],
|
||||||
req_mode=0x01, dialog_token=8)
|
req_mode=0x01, dialog_token=8)
|
||||||
# TSF Information
|
# TSF Information
|
||||||
subelems = struct.pack("<BBHH", 1, 4, 0, 100)
|
subelems = struct.pack("<BBHH", 1, 4, 0, 100)
|
||||||
|
@ -510,9 +523,10 @@ def test_wnm_bss_tm_req(dev, apdev):
|
||||||
0, 81, 1, 7) + subelems + subelems
|
0, 81, 1, 7) + subelems + subelems
|
||||||
hapd.mgmt_tx(req)
|
hapd.mgmt_tx(req)
|
||||||
resp = rx_bss_tm_resp(hapd, expect_dialog=8, expect_status=7)
|
resp = rx_bss_tm_resp(hapd, expect_dialog=8, expect_status=7)
|
||||||
|
dev[0].dump_monitor()
|
||||||
|
|
||||||
# Preferred Candidate List followed by vendor element
|
# Preferred Candidate List followed by vendor element
|
||||||
req = bss_tm_req(dev[0].p2p_interface_addr(), apdev[0]['bssid'],
|
req = bss_tm_req(addr, apdev[0]['bssid'],
|
||||||
req_mode=0x01, dialog_token=8)
|
req_mode=0x01, dialog_token=8)
|
||||||
subelems = ""
|
subelems = ""
|
||||||
req['payload'] += struct.pack("<BB6BLBBB", 52, 13 + len(subelems),
|
req['payload'] += struct.pack("<BB6BLBBB", 52, 13 + len(subelems),
|
||||||
|
@ -521,6 +535,7 @@ def test_wnm_bss_tm_req(dev, apdev):
|
||||||
req['payload'] += binascii.unhexlify("DD0411223344")
|
req['payload'] += binascii.unhexlify("DD0411223344")
|
||||||
hapd.mgmt_tx(req)
|
hapd.mgmt_tx(req)
|
||||||
resp = rx_bss_tm_resp(hapd, expect_dialog=8, expect_status=7)
|
resp = rx_bss_tm_resp(hapd, expect_dialog=8, expect_status=7)
|
||||||
|
dev[0].dump_monitor()
|
||||||
|
|
||||||
@remote_compatible
|
@remote_compatible
|
||||||
def test_wnm_bss_keep_alive(dev, apdev):
|
def test_wnm_bss_keep_alive(dev, apdev):
|
||||||
|
|
Loading…
Reference in a new issue