| # 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.global_request("P2P_SERVICE_ADD bonjour 0b5f6166706f766572746370c00c000c01 074578616d706c65c027") |
| dev.global_request("P2P_SERVICE_ADD bonjour 076578616d706c650b5f6166706f766572746370c00c001001 00") |
| dev.global_request("P2P_SERVICE_ADD bonjour 045f697070c00c000c01 094d795072696e746572c027") |
| dev.global_request("P2P_SERVICE_ADD bonjour 096d797072696e746572045f697070c00c001001 09747874766572733d311a70646c3d6170706c69636174696f6e2f706f7374736372797074") |
| |
| def add_upnp_services(dev): |
| dev.global_request("P2P_SERVICE_ADD upnp 10 uuid:6859dede-8574-59ab-9332-123456789012::upnp:rootdevice") |
| dev.global_request("P2P_SERVICE_ADD upnp 10 uuid:5566d33e-9774-09ab-4822-333456785632::upnp:rootdevice") |
| dev.global_request("P2P_SERVICE_ADD upnp 10 uuid:1122de4e-8574-59ab-9322-333456789044::urn:schemas-upnp-org:service:ContentDirectory:2") |
| dev.global_request("P2P_SERVICE_ADD upnp 10 uuid:5566d33e-9774-09ab-4822-333456785632::urn:schemas-upnp-org:service:ContentDirectory:2") |
| dev.global_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.global_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].global_request("P2P_FLUSH") |
| dev[1].global_request("P2P_SERV_DISC_REQ " + dst + " " + query) |
| if query2: |
| dev[1].global_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_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") |
| 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_global_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_global_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].global_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].global_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].global_request("P2P_SERVICE_DEL bonjour 0b5f6166706f766572746370c00c000c01"): |
| raise Exception("Failed to delete a Bonjour service") |
| if "FAIL" not in dev[0].global_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].global_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].global_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].global_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].global_request("P2P_SERV_DISC_CANCEL_REQ ab"): |
| raise Exception("Unexpected SD cancel success") |
| if "FAIL" not in dev[0].global_request("P2P_SERV_DISC_CANCEL_REQ qq"): |
| raise Exception("Unexpected SD cancel success") |
| query = dev[0].global_request("P2P_SERV_DISC_REQ " + dev[1].p2p_dev_addr() + " 02000001") |
| if "OK" not in dev[0].global_request("P2P_SERV_DISC_CANCEL_REQ " + query): |
| raise Exception("Unexpected SD cancel failure") |
| query1 = dev[0].global_request("P2P_SERV_DISC_REQ " + dev[1].p2p_dev_addr() + " 02000001") |
| query2 = dev[0].global_request("P2P_SERV_DISC_REQ " + dev[1].p2p_dev_addr() + " 02000002") |
| query3 = dev[0].global_request("P2P_SERV_DISC_REQ " + dev[1].p2p_dev_addr() + " 02000003") |
| if "OK" not in dev[0].global_request("P2P_SERV_DISC_CANCEL_REQ " + query2): |
| raise Exception("Unexpected SD cancel failure") |
| if "OK" not in dev[0].global_request("P2P_SERV_DISC_CANCEL_REQ " + query1): |
| raise Exception("Unexpected SD cancel failure") |
| if "OK" not in dev[0].global_request("P2P_SERV_DISC_CANCEL_REQ " + query3): |
| raise Exception("Unexpected SD cancel failure") |
| |
| query = dev[0].global_request("P2P_SERV_DISC_REQ 00:00:00:00:00:00 02000001") |
| if "OK" not in dev[0].global_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].global_request("P2P_FLUSH") |
| dev[1].global_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") |
| |
| ev = dev[1].wait_global_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].global_request("P2P_SERVICE_FLUSH") |
| |
| dev[1].global_request("P2P_FLUSH") |
| dev[1].global_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") |
| |
| ev = dev[1].wait_global_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].global_request("P2P_SERV_DISC_EXTERNAL 2"): |
| raise Exception("Invalid P2P_SERV_DISC_EXTERNAL accepted") |
| if "OK" not in dev[0].global_request("P2P_SERV_DISC_EXTERNAL 1"): |
| raise Exception("P2P_SERV_DISC_EXTERNAL failed") |
| dev[0].p2p_listen() |
| dev[1].global_request("P2P_FLUSH") |
| dev[1].global_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].global_request("P2P_SERVICE_UPDATE") |
| |
| dev[1].global_request("P2P_FLUSH") |
| dev[1].global_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].global_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].global_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].global_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) |