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:
Jouni Malinen 2017-03-06 23:53:33 +02:00 committed by Jouni Malinen
parent ed432343f4
commit 4fe798bd9d

View file

@ -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):