tests: Add GO Negotiation without pre-authorization
[mech_eap.git] / tests / hwsim / test_p2p_grpform.py
1 #!/usr/bin/python
2 #
3 # P2P group formation 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 import time
12 import threading
13 import Queue
14
15 import hwsim_utils
16
17 def go_neg_init(i_dev, r_dev, pin, i_method, i_intent, res):
18     logger.debug("Initiate GO Negotiation from i_dev")
19     i_res = i_dev.p2p_go_neg_init(r_dev.p2p_dev_addr(), pin, i_method, timeout=15, go_intent=i_intent)
20     logger.debug("i_res: " + str(i_res))
21     res.put(i_res)
22
23 def go_neg_pin(i_dev, r_dev, i_intent=None, r_intent=None, i_method='enter', r_method='display'):
24     r_dev.p2p_listen()
25     i_dev.p2p_listen()
26     pin = r_dev.wps_read_pin()
27     logger.info("Start GO negotiation " + i_dev.ifname + " -> " + r_dev.ifname)
28     r_dev.dump_monitor()
29     res = Queue.Queue()
30     t = threading.Thread(target=go_neg_init, args=(i_dev, r_dev, pin, i_method, i_intent, res))
31     t.start()
32     logger.debug("Wait for GO Negotiation Request on r_dev")
33     ev = r_dev.wait_event(["P2P-GO-NEG-REQUEST"], timeout=15)
34     if ev is None:
35         raise Exception("GO Negotiation timed out")
36     r_dev.dump_monitor()
37     logger.debug("Re-initiate GO Negotiation from r_dev")
38     r_res = r_dev.p2p_go_neg_init(i_dev.p2p_dev_addr(), pin, r_method, go_intent=r_intent, timeout=15)
39     logger.debug("r_res: " + str(r_res))
40     r_dev.dump_monitor()
41     t.join()
42     i_res = res.get()
43     logger.debug("i_res: " + str(i_res))
44     logger.info("Group formed")
45     hwsim_utils.test_connectivity_p2p(r_dev, i_dev)
46     i_dev.dump_monitor()
47
48 def go_neg_pin_authorized(i_dev, r_dev, i_intent=None, r_intent=None, expect_failure=False, i_go_neg_status=None, i_method='enter', r_method='display'):
49     r_dev.p2p_listen()
50     i_dev.p2p_listen()
51     pin = r_dev.wps_read_pin()
52     logger.info("Start GO negotiation " + i_dev.ifname + " -> " + r_dev.ifname)
53     r_dev.p2p_go_neg_auth(i_dev.p2p_dev_addr(), pin, r_method, go_intent=r_intent)
54     i_res = i_dev.p2p_go_neg_init(r_dev.p2p_dev_addr(), pin, i_method, timeout=15, go_intent=i_intent, expect_failure=expect_failure)
55     r_res = r_dev.p2p_go_neg_auth_result(expect_failure=expect_failure)
56     logger.debug("i_res: " + str(i_res))
57     logger.debug("r_res: " + str(r_res))
58     r_dev.dump_monitor()
59     i_dev.dump_monitor()
60     if i_go_neg_status:
61         if i_res['result'] != 'go-neg-failed':
62             raise Exception("Expected GO Negotiation failure not reported")
63         if i_res['status'] != i_go_neg_status:
64             raise Exception("Expected GO Negotiation status not seen")
65     if expect_failure:
66         return
67     logger.info("Group formed")
68     hwsim_utils.test_connectivity_p2p(r_dev, i_dev)
69
70 def test_grpform(dev):
71     go_neg_pin_authorized(i_dev=dev[0], i_intent=15, r_dev=dev[1], r_intent=0)
72     dev[0].remove_group()
73     try:
74         dev[1].remove_group()
75     except:
76         pass
77
78 def test_grpform2(dev):
79     go_neg_pin_authorized(i_dev=dev[0], i_intent=0, r_dev=dev[1], r_intent=15)
80     dev[0].remove_group()
81     try:
82         dev[1].remove_group()
83     except:
84         pass
85
86 def test_grpform3(dev):
87     go_neg_pin(i_dev=dev[0], i_intent=15, r_dev=dev[1], r_intent=0)
88     dev[0].remove_group()
89     try:
90         dev[1].remove_group()
91     except:
92         pass
93
94 def test_both_go_intent_15(dev):
95     go_neg_pin_authorized(i_dev=dev[0], i_intent=15, r_dev=dev[1], r_intent=15, expect_failure=True, i_go_neg_status=9)
96
97 def test_both_go_neg_display(dev):
98     go_neg_pin_authorized(i_dev=dev[0], r_dev=dev[1], expect_failure=True, i_go_neg_status=10, i_method='display', r_method='display')
99
100 def test_both_go_neg_enter(dev):
101     go_neg_pin_authorized(i_dev=dev[0], r_dev=dev[1], expect_failure=True, i_go_neg_status=10, i_method='enter', r_method='enter')
102
103 def add_tests(tests):
104     tests.append(test_grpform)
105     tests.append(test_grpform2)
106     tests.append(test_grpform3)
107     tests.append(test_both_go_intent_15)
108     tests.append(test_both_go_neg_display)
109     tests.append(test_both_go_neg_enter)