]>
git.ipfire.org Git - thirdparty/hostap.git/blob - tests/hwsim/test_p2p_grpform.py
3 # P2P group formation 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__
)
17 def check_grpform_results(i_res
, r_res
):
18 if i_res
['result'] != 'success' or r_res
['result'] != 'success':
19 raise Exception("Failed group formation")
20 if i_res
['ssid'] != r_res
['ssid']:
21 raise Exception("SSID mismatch")
22 if i_res
['freq'] != r_res
['freq']:
23 raise Exception("SSID mismatch")
24 if i_res
['go_dev_addr'] != r_res
['go_dev_addr']:
25 raise Exception("GO Device Address mismatch")
27 def go_neg_init(i_dev
, r_dev
, pin
, i_method
, i_intent
, res
):
28 logger
.debug("Initiate GO Negotiation from i_dev")
29 i_res
= i_dev
.p2p_go_neg_init(r_dev
.p2p_dev_addr(), pin
, i_method
, timeout
=15, go_intent
=i_intent
)
30 logger
.debug("i_res: " + str(i_res
))
33 def go_neg_pin(i_dev
, r_dev
, i_intent
=None, r_intent
=None, i_method
='enter', r_method
='display'):
36 pin
= r_dev
.wps_read_pin()
37 logger
.info("Start GO negotiation " + i_dev
.ifname
+ " -> " + r_dev
.ifname
)
40 t
= threading
.Thread(target
=go_neg_init
, args
=(i_dev
, r_dev
, pin
, i_method
, i_intent
, res
))
42 logger
.debug("Wait for GO Negotiation Request on r_dev")
43 ev
= r_dev
.wait_event(["P2P-GO-NEG-REQUEST"], timeout
=15)
45 raise Exception("GO Negotiation timed out")
47 logger
.debug("Re-initiate GO Negotiation from r_dev")
48 r_res
= r_dev
.p2p_go_neg_init(i_dev
.p2p_dev_addr(), pin
, r_method
, go_intent
=r_intent
, timeout
=15)
49 logger
.debug("r_res: " + str(r_res
))
53 logger
.debug("i_res: " + str(i_res
))
54 logger
.info("Group formed")
55 hwsim_utils
.test_connectivity_p2p(r_dev
, i_dev
)
58 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'):
61 pin
= r_dev
.wps_read_pin()
62 logger
.info("Start GO negotiation " + i_dev
.ifname
+ " -> " + r_dev
.ifname
)
63 r_dev
.p2p_go_neg_auth(i_dev
.p2p_dev_addr(), pin
, r_method
, go_intent
=r_intent
)
64 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
)
65 r_res
= r_dev
.p2p_go_neg_auth_result(expect_failure
=expect_failure
)
66 logger
.debug("i_res: " + str(i_res
))
67 logger
.debug("r_res: " + str(r_res
))
71 if i_res
['result'] != 'go-neg-failed':
72 raise Exception("Expected GO Negotiation failure not reported")
73 if i_res
['status'] != i_go_neg_status
:
74 raise Exception("Expected GO Negotiation status not seen")
77 logger
.info("Group formed")
78 hwsim_utils
.test_connectivity_p2p(r_dev
, i_dev
)
80 def go_neg_init_pbc(i_dev
, r_dev
, i_intent
, res
):
81 logger
.debug("Initiate GO Negotiation from i_dev")
82 i_res
= i_dev
.p2p_go_neg_init(r_dev
.p2p_dev_addr(), None, "pbc", timeout
=15, go_intent
=i_intent
)
83 logger
.debug("i_res: " + str(i_res
))
86 def go_neg_pbc(i_dev
, r_dev
, i_intent
=None, r_intent
=None):
89 logger
.info("Start GO negotiation " + i_dev
.ifname
+ " -> " + r_dev
.ifname
)
92 t
= threading
.Thread(target
=go_neg_init_pbc
, args
=(i_dev
, r_dev
, i_intent
, res
))
94 logger
.debug("Wait for GO Negotiation Request on r_dev")
95 ev
= r_dev
.wait_event(["P2P-GO-NEG-REQUEST"], timeout
=15)
97 raise Exception("GO Negotiation timed out")
99 logger
.debug("Re-initiate GO Negotiation from r_dev")
100 r_res
= r_dev
.p2p_go_neg_init(i_dev
.p2p_dev_addr(), None, "pbc", go_intent
=r_intent
, timeout
=15)
101 logger
.debug("r_res: " + str(r_res
))
105 logger
.debug("i_res: " + str(i_res
))
106 logger
.info("Group formed")
107 hwsim_utils
.test_connectivity_p2p(r_dev
, i_dev
)
109 return [i_res
, r_res
]
111 def test_grpform(dev
):
112 go_neg_pin_authorized(i_dev
=dev
[0], i_intent
=15, r_dev
=dev
[1], r_intent
=0)
113 dev
[0].remove_group()
115 dev
[1].remove_group()
119 def test_grpform2(dev
):
120 go_neg_pin_authorized(i_dev
=dev
[0], i_intent
=0, r_dev
=dev
[1], r_intent
=15)
121 dev
[0].remove_group()
123 dev
[1].remove_group()
127 def test_grpform3(dev
):
128 go_neg_pin(i_dev
=dev
[0], i_intent
=15, r_dev
=dev
[1], r_intent
=0)
129 dev
[0].remove_group()
131 dev
[1].remove_group()
135 def test_grpform_pbc(dev
):
136 [i_res
, r_res
] = go_neg_pbc(i_dev
=dev
[0], i_intent
=15, r_dev
=dev
[1], r_intent
=0)
137 check_grpform_results(i_res
, r_res
)
138 if i_res
['role'] != 'GO' or r_res
['role'] != 'client':
139 raise Exception("Unexpected device roles")
140 dev
[0].remove_group()
142 dev
[1].remove_group()
146 def test_both_go_intent_15(dev
):
147 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)
149 def test_both_go_neg_display(dev
):
150 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')
152 def test_both_go_neg_enter(dev
):
153 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')
155 def add_tests(tests
):
156 tests
.append(test_grpform
)
157 tests
.append(test_grpform2
)
158 tests
.append(test_grpform3
)
159 tests
.append(test_grpform_pbc
)
160 tests
.append(test_both_go_intent_15
)
161 tests
.append(test_both_go_neg_display
)
162 tests
.append(test_both_go_neg_enter
)