fragattacks/tests/hwsim/test_p2p_service.py
Jouni Malinen 644b24c6bb tests: Verify SD TX callback processing after P2P find is stopped
These are far from perfect since timing is quite difficult to match for
the case that behaved incorrectly. Anyway, it looks loke
p2p_service_discovery_peer_not_listening was able to hit the error now
and then, so this should be sufficient as a regression test case.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
2015-02-04 20:47:14 +02:00

513 lines
23 KiB
Python

# P2P service discovery test cases
# Copyright (c) 2013, 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 time
import uuid
import hwsim_utils
def add_bonjour_services(dev):
dev.request("P2P_SERVICE_ADD bonjour 0b5f6166706f766572746370c00c000c01 074578616d706c65c027")
dev.request("P2P_SERVICE_ADD bonjour 076578616d706c650b5f6166706f766572746370c00c001001 00")
dev.request("P2P_SERVICE_ADD bonjour 045f697070c00c000c01 094d795072696e746572c027")
dev.request("P2P_SERVICE_ADD bonjour 096d797072696e746572045f697070c00c001001 09747874766572733d311a70646c3d6170706c69636174696f6e2f706f7374736372797074")
def add_upnp_services(dev):
dev.request("P2P_SERVICE_ADD upnp 10 uuid:6859dede-8574-59ab-9332-123456789012::upnp:rootdevice")
dev.request("P2P_SERVICE_ADD upnp 10 uuid:5566d33e-9774-09ab-4822-333456785632::upnp:rootdevice")
dev.request("P2P_SERVICE_ADD upnp 10 uuid:1122de4e-8574-59ab-9322-333456789044::urn:schemas-upnp-org:service:ContentDirectory:2")
dev.request("P2P_SERVICE_ADD upnp 10 uuid:5566d33e-9774-09ab-4822-333456785632::urn:schemas-upnp-org:service:ContentDirectory:2")
dev.request("P2P_SERVICE_ADD upnp 10 uuid:6859dede-8574-59ab-9332-123456789012::urn:schemas-upnp-org:device:InternetGatewayDevice:1")
def add_extra_services(dev):
for i in range(0, 100):
dev.request("P2P_SERVICE_ADD upnp 10 uuid:" + str(uuid.uuid4()) + "::upnp:rootdevice")
def run_sd(dev, dst, query, exp_query=None, fragment=False, query2=None):
addr0 = dev[0].p2p_dev_addr()
addr1 = dev[1].p2p_dev_addr()
add_bonjour_services(dev[0])
add_upnp_services(dev[0])
if fragment:
add_extra_services(dev[0])
dev[0].p2p_listen()
dev[1].request("P2P_FLUSH")
dev[1].request("P2P_SERV_DISC_REQ " + dst + " " + query)
if query2:
dev[1].request("P2P_SERV_DISC_REQ " + dst + " " + query2)
if not dev[1].discover_peer(addr0, social=True, force_find=True):
raise Exception("Peer " + addr0 + " not found")
ev = dev[0].wait_event(["P2P-SERV-DISC-REQ"], timeout=10)
if ev is None:
raise Exception("Service discovery timed out")
if addr1 not in ev:
raise Exception("Unexpected service discovery request source")
if exp_query is None:
exp_query = query
if exp_query not in ev and (query2 is None or query2 not in ev):
raise Exception("Unexpected service discovery request contents")
if query2:
ev_list = []
for i in range(0, 4):
ev = dev[1].wait_event(["P2P-SERV-DISC-RESP"], timeout=10)
if ev is None:
raise Exception("Service discovery timed out")
if addr0 in ev:
ev_list.append(ev)
if len(ev_list) == 2:
break
return ev_list
for i in range(0, 2):
ev = dev[1].wait_event(["P2P-SERV-DISC-RESP"], timeout=10)
if ev is None:
raise Exception("Service discovery timed out")
if addr0 in ev:
break
dev[0].p2p_stop_find()
dev[1].p2p_stop_find()
if "OK" not in dev[0].request("P2P_SERVICE_DEL upnp 10 uuid:6859dede-8574-59ab-9332-123456789012::upnp:rootdevice"):
raise Exception("Failed to delete a UPnP service")
if "FAIL" not in dev[0].request("P2P_SERVICE_DEL upnp 10 uuid:6859dede-8574-59ab-9332-123456789012::upnp:rootdevice"):
raise Exception("Unexpected deletion success for UPnP service")
if "OK" not in dev[0].request("P2P_SERVICE_DEL bonjour 0b5f6166706f766572746370c00c000c01"):
raise Exception("Failed to delete a Bonjour service")
if "FAIL" not in dev[0].request("P2P_SERVICE_DEL bonjour 0b5f6166706f766572746370c00c000c01"):
raise Exception("Unexpected deletion success for Bonjour service")
return ev
def test_p2p_service_discovery(dev):
"""P2P service discovery"""
addr0 = dev[0].p2p_dev_addr()
for dst in [ "00:00:00:00:00:00", addr0 ]:
ev = run_sd(dev, dst, "02000001")
if "0b5f6166706f766572746370c00c000c01" not in ev:
raise Exception("Unexpected service discovery response contents (Bonjour)")
if "496e7465726e6574" not in ev:
raise Exception("Unexpected service discovery response contents (UPnP)")
for req in [ "foo 02000001",
addr0,
addr0 + " upnp qq urn:schemas-upnp-org:device:InternetGatewayDevice:1",
addr0 + " upnp 10",
addr0 + " 123",
addr0 + " qq" ]:
if "FAIL" not in dev[1].request("P2P_SERV_DISC_REQ " + req):
raise Exception("Invalid P2P_SERV_DISC_REQ accepted: " + req)
def test_p2p_service_discovery2(dev):
"""P2P service discovery with one peer having no services"""
dev[2].p2p_listen()
for dst in [ "00:00:00:00:00:00", dev[0].p2p_dev_addr() ]:
ev = run_sd(dev, dst, "02000001")
if "0b5f6166706f766572746370c00c000c01" not in ev:
raise Exception("Unexpected service discovery response contents (Bonjour)")
if "496e7465726e6574" not in ev:
raise Exception("Unexpected service discovery response contents (UPnP)")
def test_p2p_service_discovery3(dev):
"""P2P service discovery for Bonjour with one peer having no services"""
dev[2].p2p_listen()
for dst in [ "00:00:00:00:00:00", dev[0].p2p_dev_addr() ]:
ev = run_sd(dev, dst, "02000101")
if "0b5f6166706f766572746370c00c000c01" not in ev:
raise Exception("Unexpected service discovery response contents (Bonjour)")
def test_p2p_service_discovery4(dev):
"""P2P service discovery for UPnP with one peer having no services"""
dev[2].p2p_listen()
for dst in [ "00:00:00:00:00:00", dev[0].p2p_dev_addr() ]:
ev = run_sd(dev, dst, "02000201")
if "496e7465726e6574" not in ev:
raise Exception("Unexpected service discovery response contents (UPnP)")
def test_p2p_service_discovery_multiple_queries(dev):
"""P2P service discovery with multiple queries"""
for dst in [ "00:00:00:00:00:00", dev[0].p2p_dev_addr() ]:
ev = run_sd(dev, dst, "02000201", query2="02000101")
if "0b5f6166706f766572746370c00c000c01" not in ev[0] + ev[1]:
raise Exception("Unexpected service discovery response contents (Bonjour)")
if "496e7465726e6574" not in ev[0] + ev[1]:
raise Exception("Unexpected service discovery response contents (UPnP)")
def test_p2p_service_discovery_multiple_queries2(dev):
"""P2P service discovery with multiple queries with one peer having no services"""
dev[2].p2p_listen()
for dst in [ "00:00:00:00:00:00", dev[0].p2p_dev_addr() ]:
ev = run_sd(dev, dst, "02000201", query2="02000101")
if "0b5f6166706f766572746370c00c000c01" not in ev[0] + ev[1]:
raise Exception("Unexpected service discovery response contents (Bonjour)")
if "496e7465726e6574" not in ev[0] + ev[1]:
raise Exception("Unexpected service discovery response contents (UPnP)")
def test_p2p_service_discovery_fragmentation(dev):
"""P2P service discovery with fragmentation"""
for dst in [ "00:00:00:00:00:00", dev[0].p2p_dev_addr() ]:
ev = run_sd(dev, dst, "02000001", fragment=True)
if not "long response" in ev:
if "0b5f6166706f766572746370c00c000c01" not in ev:
raise Exception("Unexpected service discovery response contents (Bonjour)")
if "496e7465726e6574" not in ev:
raise Exception("Unexpected service discovery response contents (UPnP)")
def test_p2p_service_discovery_bonjour(dev):
"""P2P service discovery (Bonjour)"""
ev = run_sd(dev, "00:00:00:00:00:00", "02000101")
if "0b5f6166706f766572746370c00c000c01" not in ev:
raise Exception("Unexpected service discovery response contents (Bonjour)")
if "045f697070c00c000c01" not in ev:
raise Exception("Unexpected service discovery response contents (Bonjour)")
if "496e7465726e6574" in ev:
raise Exception("Unexpected service discovery response contents (UPnP not expected)")
def test_p2p_service_discovery_bonjour2(dev):
"""P2P service discovery (Bonjour AFS)"""
ev = run_sd(dev, "00:00:00:00:00:00", "130001010b5f6166706f766572746370c00c000c01")
if "0b5f6166706f766572746370c00c000c01" not in ev:
raise Exception("Unexpected service discovery response contents (Bonjour)")
if "045f697070c00c000c01" in ev:
raise Exception("Unexpected service discovery response contents (Bonjour mismatching)")
if "496e7465726e6574" in ev:
raise Exception("Unexpected service discovery response contents (UPnP not expected)")
def test_p2p_service_discovery_bonjour3(dev):
"""P2P service discovery (Bonjour AFS - no match)"""
ev = run_sd(dev, "00:00:00:00:00:00", "130001010b5f6166706f766572746370c00c000c02")
if "0300010102" not in ev:
raise Exception("Requested-info-not-available was not indicated")
if "0b5f6166706f766572746370c00c000c01" in ev:
raise Exception("Unexpected service discovery response contents (Bonjour)")
if "045f697070c00c000c01" in ev:
raise Exception("Unexpected service discovery response contents (Bonjour mismatching)")
if "496e7465726e6574" in ev:
raise Exception("Unexpected service discovery response contents (UPnP not expected)")
def test_p2p_service_discovery_upnp(dev):
"""P2P service discovery (UPnP)"""
ev = run_sd(dev, "00:00:00:00:00:00", "02000201")
if "0b5f6166706f766572746370c00c000c01" in ev:
raise Exception("Unexpected service discovery response contents (Bonjour not expected)")
if "496e7465726e6574" not in ev:
raise Exception("Unexpected service discovery response contents (UPnP)")
def test_p2p_service_discovery_upnp2(dev):
"""P2P service discovery (UPnP using request helper)"""
ev = run_sd(dev, "00:00:00:00:00:00", "upnp 10 ssdp:all", "0b00020110737364703a616c6c")
if "0b5f6166706f766572746370c00c000c01" in ev:
raise Exception("Unexpected service discovery response contents (Bonjour not expected)")
if "496e7465726e6574" not in ev:
raise Exception("Unexpected service discovery response contents (UPnP)")
def test_p2p_service_discovery_upnp3(dev):
"""P2P service discovery (UPnP using request helper - no match)"""
ev = run_sd(dev, "00:00:00:00:00:00", "upnp 10 ssdp:foo", "0b00020110737364703a666f6f")
if "0300020102" not in ev:
raise Exception("Requested-info-not-available was not indicated")
if "0b5f6166706f766572746370c00c000c01" in ev:
raise Exception("Unexpected service discovery response contents (Bonjour not expected)")
if "496e7465726e6574" in ev:
raise Exception("Unexpected service discovery response contents (UPnP)")
def test_p2p_service_discovery_ws(dev):
"""P2P service discovery (WS-Discovery)"""
ev = run_sd(dev, "00:00:00:00:00:00", "02000301")
if "0b5f6166706f766572746370c00c000c01" in ev:
raise Exception("Unexpected service discovery response contents (Bonjour not expected)")
if "496e7465726e6574" in ev:
raise Exception("Unexpected service discovery response contents (UPnP not expected)")
if "0300030101" not in ev:
raise Exception("Unexpected service discovery response contents (WS)")
def test_p2p_service_discovery_wfd(dev):
"""P2P service discovery (Wi-Fi Display)"""
dev[0].request("SET wifi_display 1")
ev = run_sd(dev, "00:00:00:00:00:00", "02000401")
if " 030004" in ev:
raise Exception("Unexpected response to invalid WFD SD query")
dev[0].request("SET wifi_display 0")
ev = run_sd(dev, "00:00:00:00:00:00", "0300040100")
if "0300040101" not in ev:
raise Exception("Unexpected response to WFD SD query (protocol was disabled)")
def test_p2p_service_discovery_req_cancel(dev):
"""Cancel a P2P service discovery request"""
if "FAIL" not in dev[0].request("P2P_SERV_DISC_CANCEL_REQ ab"):
raise Exception("Unexpected SD cancel success")
if "FAIL" not in dev[0].request("P2P_SERV_DISC_CANCEL_REQ qq"):
raise Exception("Unexpected SD cancel success")
query = dev[0].request("P2P_SERV_DISC_REQ " + dev[1].p2p_dev_addr() + " 02000001")
if "OK" not in dev[0].request("P2P_SERV_DISC_CANCEL_REQ " + query):
raise Exception("Unexpected SD cancel failure")
query1 = dev[0].request("P2P_SERV_DISC_REQ " + dev[1].p2p_dev_addr() + " 02000001")
query2 = dev[0].request("P2P_SERV_DISC_REQ " + dev[1].p2p_dev_addr() + " 02000002")
query3 = dev[0].request("P2P_SERV_DISC_REQ " + dev[1].p2p_dev_addr() + " 02000003")
if "OK" not in dev[0].request("P2P_SERV_DISC_CANCEL_REQ " + query2):
raise Exception("Unexpected SD cancel failure")
if "OK" not in dev[0].request("P2P_SERV_DISC_CANCEL_REQ " + query1):
raise Exception("Unexpected SD cancel failure")
if "OK" not in dev[0].request("P2P_SERV_DISC_CANCEL_REQ " + query3):
raise Exception("Unexpected SD cancel failure")
query = dev[0].request("P2P_SERV_DISC_REQ 00:00:00:00:00:00 02000001")
if "OK" not in dev[0].request("P2P_SERV_DISC_CANCEL_REQ " + query):
raise Exception("Unexpected SD(broadcast) cancel failure")
def test_p2p_service_discovery_go(dev):
"""P2P service discovery from GO"""
addr0 = dev[0].p2p_dev_addr()
addr1 = dev[1].p2p_dev_addr()
add_bonjour_services(dev[0])
add_upnp_services(dev[0])
dev[0].p2p_start_go(freq=2412)
dev[1].request("P2P_FLUSH")
dev[1].request("P2P_SERV_DISC_REQ " + addr0 + " 02000001")
if not dev[1].discover_peer(addr0, social=True, force_find=True):
raise Exception("Peer " + addr0 + " not found")
ev = dev[0].wait_event(["P2P-SERV-DISC-REQ"], timeout=10)
if ev is None:
raise Exception("Service discovery timed out")
if addr1 not in ev:
raise Exception("Unexpected service discovery request source")
ev = dev[1].wait_event(["P2P-SERV-DISC-RESP"], timeout=10)
if ev is None:
raise Exception("Service discovery timed out")
if addr0 not in ev:
raise Exception("Unexpected service discovery response source")
if "0b5f6166706f766572746370c00c000c01" not in ev:
raise Exception("Unexpected service discovery response contents (Bonjour)")
if "496e7465726e6574" not in ev:
raise Exception("Unexpected service discovery response contents (UPnP)")
dev[1].p2p_stop_find()
dev[0].request("P2P_SERVICE_FLUSH")
dev[1].request("P2P_FLUSH")
dev[1].request("P2P_SERV_DISC_REQ " + addr0 + " 02000001")
if not dev[1].discover_peer(addr0, social=True, force_find=True):
raise Exception("Peer " + addr0 + " not found")
ev = dev[0].wait_event(["P2P-SERV-DISC-REQ"], timeout=10)
if ev is None:
raise Exception("Service discovery timed out")
if addr1 not in ev:
raise Exception("Unexpected service discovery request source")
ev = dev[1].wait_event(["P2P-SERV-DISC-RESP"], timeout=10)
if ev is None:
raise Exception("Service discovery timed out")
if addr0 not in ev:
raise Exception("Unexpected service discovery response source")
if "0300000101" not in ev:
raise Exception("Unexpected service discovery response contents (Bonjour)")
dev[1].p2p_stop_find()
def _test_p2p_service_discovery_external(dev):
addr0 = dev[0].p2p_dev_addr()
addr1 = dev[1].p2p_dev_addr()
if "FAIL" not in dev[0].request("P2P_SERV_DISC_EXTERNAL 2"):
raise Exception("Invalid P2P_SERV_DISC_EXTERNAL accepted")
if "OK" not in dev[0].request("P2P_SERV_DISC_EXTERNAL 1"):
raise Exception("P2P_SERV_DISC_EXTERNAL failed")
dev[0].p2p_listen()
dev[1].request("P2P_FLUSH")
dev[1].request("P2P_SERV_DISC_REQ " + addr0 + " 02000001")
if not dev[1].discover_peer(addr0, social=True, force_find=True):
raise Exception("Peer " + addr0 + " not found")
ev = dev[0].wait_global_event(["P2P-SERV-DISC-REQ"], timeout=10)
if ev is None:
raise Exception("Service discovery timed out")
if addr1 not in ev:
raise Exception("Unexpected service discovery request source")
arg = ev.split(' ')
resp = "0300000101"
if "OK" not in dev[0].global_request("P2P_SERV_DISC_RESP %s %s %s %s" % (arg[2], arg[3], arg[4], resp)):
raise Exception("P2P_SERV_DISC_RESP failed")
ev = dev[1].wait_global_event(["P2P-SERV-DISC-RESP"], timeout=15)
if ev is None:
raise Exception("Service discovery timed out")
if addr0 not in ev:
raise Exception("Unexpected address in SD Response: " + ev)
if ev.split(' ')[4] != resp:
raise Exception("Unexpected response data SD Response: " + ev)
ver = ev.split(' ')[3]
dev[0].request("P2P_SERVICE_UPDATE")
dev[1].request("P2P_FLUSH")
dev[1].request("P2P_SERV_DISC_REQ " + addr0 + " 02000001")
if not dev[1].discover_peer(addr0, social=True, force_find=True):
raise Exception("Peer " + addr0 + " not found")
ev = dev[0].wait_global_event(["P2P-SERV-DISC-REQ"], timeout=10)
if ev is None:
raise Exception("Service discovery timed out")
if addr1 not in ev:
raise Exception("Unexpected service discovery request source")
arg = ev.split(' ')
resp = "0300000101"
if "OK" not in dev[0].global_request("P2P_SERV_DISC_RESP %s %s %s %s" % (arg[2], arg[3], arg[4], resp)):
raise Exception("P2P_SERV_DISC_RESP failed")
ev = dev[1].wait_global_event(["P2P-SERV-DISC-RESP"], timeout=15)
if ev is None:
raise Exception("Service discovery timed out")
if addr0 not in ev:
raise Exception("Unexpected address in SD Response: " + ev)
if ev.split(' ')[4] != resp:
raise Exception("Unexpected response data SD Response: " + ev)
ver2 = ev.split(' ')[3]
if ver == ver2:
raise Exception("Service list version did not change")
for cmd in [ "%s%s%s%s" % (arg[2], arg[3], arg[4], resp),
"%s %s %s %s" % ("0", arg[3], arg[4], resp),
"%s %s %s %s" % (arg[2], "foo", arg[4], resp),
"%s %s%s%s" % (arg[2], arg[3], arg[4], resp),
"%s %s %s%s" % (arg[2], arg[3], arg[4], resp),
"%s %s %s %s" % (arg[2], arg[3], arg[4], "12345"),
"%s %s %s %s" % (arg[2], arg[3], arg[4], "qq") ]:
if "FAIL" not in dev[0].global_request("P2P_SERV_DISC_RESP " + cmd):
raise Exception("Invalid P2P_SERV_DISC_RESP accepted: " + cmd)
def test_p2p_service_discovery_external(dev):
"""P2P service discovery using external response"""
try:
_test_p2p_service_discovery_external(dev)
finally:
dev[0].request("P2P_SERV_DISC_EXTERNAL 0")
def test_p2p_service_discovery_invalid_commands(dev):
"""P2P service discovery invalid commands"""
for cmd in [ "bonjour",
"bonjour 12",
"bonjour 123 12",
"bonjour qq 12",
"bonjour 12 123",
"bonjour 12 qq",
"upnp 10",
"upnp qq uuid:",
"foo bar" ]:
if "FAIL" not in dev[0].request("P2P_SERVICE_ADD " + cmd):
raise Exception("Invalid P2P_SERVICE_ADD accepted: " + cmd)
for cmd in [ "bonjour",
"bonjour 123",
"bonjour qq",
"upnp 10",
"upnp ",
"upnp qq uuid:",
"foo bar" ]:
if "FAIL" not in dev[0].request("P2P_SERVICE_DEL " + cmd):
raise Exception("Invalid P2P_SERVICE_DEL accepted: " + cmd)
def test_p2p_service_discovery_cancel_during_query(dev):
"""P2P service discovery and cancel during query"""
for i in range(2):
add_bonjour_services(dev[i])
add_upnp_services(dev[i])
add_extra_services(dev[i])
dev[i].p2p_listen()
dev[2].request("P2P_FLUSH")
id1 = dev[2].request("P2P_SERV_DISC_REQ 00:00:00:00:00:00 02000201")
id2 = dev[2].request("P2P_SERV_DISC_REQ 00:00:00:00:00:00 02000101")
dev[2].p2p_find(social=True)
ev = dev[2].wait_global_event(["P2P-DEVICE-FOUND"], timeout=15)
if ev is None:
raise Exception("Could not discover peer")
if "OK" not in dev[2].request("P2P_SERV_DISC_CANCEL_REQ " + id1):
raise Exception("Failed to cancel req1")
if "OK" not in dev[2].request("P2P_SERV_DISC_CANCEL_REQ " + id2):
raise Exception("Failed to cancel req2")
ev = dev[2].wait_global_event(["P2P-SERV-DISC-RESP"], timeout=3)
# we may or may not get a response depending on timing, so ignore the result
dev[2].p2p_stop_find()
dev[1].p2p_stop_find()
dev[0].p2p_stop_find()
def get_p2p_state(dev):
res = dev.global_request("STATUS")
p2p_state = None
for line in res.splitlines():
if line.startswith("p2p_state="):
p2p_state = line.split('=')[1]
break
if p2p_state is None:
raise Exception("Could not get p2p_state")
return p2p_state
def test_p2p_service_discovery_peer_not_listening(dev):
"""P2P service discovery and peer not listening"""
addr0 = dev[0].p2p_dev_addr()
addr1 = dev[1].p2p_dev_addr()
add_bonjour_services(dev[0])
add_upnp_services(dev[0])
dev[0].p2p_listen()
dev[1].global_request("P2P_FIND 1 type=social")
ev = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=4)
if ev is None:
raise Exception("Peer not found")
dev[0].p2p_stop_find()
ev = dev[1].wait_event(["CTRL-EVENT-SCAN-STARTED"], timeout=1)
ev = dev[1].wait_event(["CTRL-EVENT-SCAN-STARTED"], timeout=1)
time.sleep(0.03)
dev[1].request("P2P_SERV_DISC_REQ " + addr0 + " 02000001")
ev = dev[0].wait_global_event(["P2P-SERV-DISC-REQ"], timeout=1)
if ev is not None:
raise Exception("Service discovery request unexpectedly received")
ev = dev[1].wait_global_event(["P2P-FIND-STOPPED", "P2P-SERV-DISC-RESP"],
timeout=10)
if ev is None:
raise Exception("P2P-FIND-STOPPED event timed out")
if "P2P-SERV-DISC-RESP" in ev:
raise Exception("Unexpected SD response")
p2p_state = get_p2p_state(dev[1])
if p2p_state != "IDLE":
raise Exception("Unexpected p2p_state after P2P_FIND timeout: " + p2p_state)
def test_p2p_service_discovery_peer_not_listening2(dev):
"""P2P service discovery and peer not listening"""
addr0 = dev[0].p2p_dev_addr()
addr1 = dev[1].p2p_dev_addr()
add_bonjour_services(dev[0])
add_upnp_services(dev[0])
dev[0].p2p_listen()
dev[1].global_request("P2P_FIND type=social")
ev = dev[1].wait_global_event(["P2P-DEVICE-FOUND"], timeout=10)
if ev is None:
raise Exception("Peer not found")
dev[0].p2p_stop_find()
time.sleep(0.53)
dev[1].request("P2P_SERV_DISC_REQ " + addr0 + " 02000001")
ev = dev[0].wait_global_event(["P2P-SERV-DISC-REQ"], timeout=0.5)
if ev is not None:
raise Exception("Service discovery request unexpectedly received")
dev[1].p2p_stop_find()
ev = dev[1].wait_global_event(["P2P-FIND-STOPPED", "P2P-SERV-DISC-RESP"],
timeout=10)
if ev is None:
raise Exception("P2P-FIND-STOPPED event timed out")
if "P2P-SERV-DISC-RESP" in ev:
raise Exception("Unexpected SD response")
p2p_state = get_p2p_state(dev[1])
if p2p_state != "IDLE":
raise Exception("Unexpected p2p_state after P2P_FIND timeout: " + p2p_state)