3 # P2P device discovery test cases
4 # Copyright (c) 2013, Jouni Malinen <j@w1.fi>
6 # This software may be distributed under the terms of the BSD license.
7 # See README for more details.
10 logger = logging.getLogger(__name__)
14 def test_discovery(dev):
15 """P2P device discovery and provision discovery"""
16 addr0 = dev[0].p2p_dev_addr()
17 addr1 = dev[1].p2p_dev_addr()
18 logger.info("Start device discovery")
19 dev[0].p2p_find(social=True)
20 dev[1].p2p_find(social=True)
21 ev0 = dev[0].wait_event(["P2P-DEVICE-FOUND"], timeout=15)
23 raise Exception("Device discovery timed out")
24 ev1 = dev[1].wait_event(["P2P-DEVICE-FOUND"], timeout=15)
26 raise Exception("Device discovery timed out")
30 raise Exception("Dev1 not found properly")
32 raise Exception("Dev0 not found properly")
34 logger.info("Test provision discovery for display")
35 dev[0].request("P2P_PROV_DISC " + addr1 + " display")
36 ev1 = dev[1].wait_event(["P2P-PROV-DISC-SHOW-PIN"], timeout=15)
38 raise Exception("Provision discovery timed out (display/dev1)")
40 raise Exception("Dev0 not in provision discovery event")
41 ev0 = dev[0].wait_event(["P2P-PROV-DISC-ENTER-PIN",
42 "P2P-PROV-DISC-FAILURE"], timeout=15)
44 raise Exception("Provision discovery timed out (display/dev0)")
45 if "P2P-PROV-DISC-FAILURE" in ev0:
46 raise Exception("Provision discovery failed (display/dev0)")
48 raise Exception("Dev1 not in provision discovery event")
50 logger.info("Test provision discovery for keypad")
51 dev[0].request("P2P_PROV_DISC " + addr1 + " keypad")
52 ev1 = dev[1].wait_event(["P2P-PROV-DISC-ENTER-PIN"], timeout=15)
54 raise Exception("Provision discovery timed out (keypad/dev1)")
56 raise Exception("Dev0 not in provision discovery event")
57 ev0 = dev[0].wait_event(["P2P-PROV-DISC-SHOW-PIN", "P2P-PROV-DISC-FAILURE"],
60 raise Exception("Provision discovery timed out (keypad/dev0)")
61 if "P2P-PROV-DISC-FAILURE" in ev0:
62 raise Exception("Provision discovery failed (keypad/dev0)")
64 raise Exception("Dev1 not in provision discovery event")
66 logger.info("Test provision discovery for push button")
67 dev[0].request("P2P_PROV_DISC " + addr1 + " pbc")
68 ev1 = dev[1].wait_event(["P2P-PROV-DISC-PBC-REQ"], timeout=15)
70 raise Exception("Provision discovery timed out (pbc/dev1)")
72 raise Exception("Dev0 not in provision discovery event")
73 ev0 = dev[0].wait_event(["P2P-PROV-DISC-PBC-RESP", "P2P-PROV-DISC-FAILURE"],
76 raise Exception("Provision discovery timed out (pbc/dev0)")
77 if "P2P-PROV-DISC-FAILURE" in ev0:
78 raise Exception("Provision discovery failed (pbc/dev0)")
80 raise Exception("Dev1 not in provision discovery event")
85 def test_discovery_group_client(dev):
86 """P2P device discovery for a client in a group"""
87 logger.info("Start autonomous GO " + dev[0].ifname)
88 res = dev[0].p2p_start_go(freq="2422")
89 logger.debug("res: " + str(res))
90 logger.info("Connect a client to the GO")
91 pin = dev[1].wps_read_pin()
92 dev[0].p2p_go_authorize_client(pin)
93 dev[1].p2p_connect_group(dev[0].p2p_dev_addr(), pin, timeout=60)
94 logger.info("Client connected")
95 hwsim_utils.test_connectivity_p2p(dev[0], dev[1])
96 logger.info("Try to discover a P2P client in a group")
97 if not dev[2].discover_peer(dev[1].p2p_dev_addr(), social=False):
98 raise Exception("Could not discover group client")