P2P: Add a test case for discovering a P2P client in a group
[mech_eap.git] / tests / hwsim / test_p2p_discovery.py
1 #!/usr/bin/python
2 #
3 # P2P device discovery test cases
4 # Copyright (c) 2013, Jouni Malinen <j@w1.fi>
5 #
6 # This software may be distributed under the terms of the BSD license.
7 # See README for more details.
8
9 import logging
10 logger = logging.getLogger(__name__)
11
12 import hwsim_utils
13
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)
22     if ev0 is None:
23         raise Exception("Device discovery timed out")
24     ev1 = dev[1].wait_event(["P2P-DEVICE-FOUND"], timeout=15)
25     if ev1 is None:
26         raise Exception("Device discovery timed out")
27     dev[0].dump_monitor()
28     dev[1].dump_monitor()
29     if addr1 not in ev0:
30         raise Exception("Dev1 not found properly")
31     if addr0 not in ev1:
32         raise Exception("Dev0 not found properly")
33
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)
37     if ev1 is None:
38         raise Exception("Provision discovery timed out (display/dev1)")
39     if addr0 not in ev1:
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)
43     if ev0 is None:
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)")
47     if addr1 not in ev0:
48         raise Exception("Dev1 not in provision discovery event")
49
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)
53     if ev1 is None:
54         raise Exception("Provision discovery timed out (keypad/dev1)")
55     if addr0 not in ev1:
56         raise Exception("Dev0 not in provision discovery event")
57     ev0 = dev[0].wait_event(["P2P-PROV-DISC-SHOW-PIN", "P2P-PROV-DISC-FAILURE"],
58                             timeout=15)
59     if ev0 is None:
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)")
63     if addr1 not in ev0:
64         raise Exception("Dev1 not in provision discovery event")
65
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)
69     if ev1 is None:
70         raise Exception("Provision discovery timed out (pbc/dev1)")
71     if addr0 not in ev1:
72         raise Exception("Dev0 not in provision discovery event")
73     ev0 = dev[0].wait_event(["P2P-PROV-DISC-PBC-RESP", "P2P-PROV-DISC-FAILURE"],
74                             timeout=15)
75     if ev0 is None:
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)")
79     if addr1 not in ev0:
80         raise Exception("Dev1 not in provision discovery event")
81
82     dev[0].p2p_stop_find
83     dev[1].p2p_stop_find
84
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")