]> git.ipfire.org Git - thirdparty/hostap.git/blame - tests/hwsim/test_wpas_mesh.py
tests: Add test_wpas_mesh test cases
[thirdparty/hostap.git] / tests / hwsim / test_wpas_mesh.py
CommitLineData
68157c06
JL
1#!/usr/bin/python
2#
3# wpa_supplicant mesh mode tests
4# Copyright (c) 2014, cozybit Inc.
5#
6# This software may be distributed under the terms of the BSD license.
7# See README for more details.
8
9
10def check_mesh_scan(dev, params, other_started=False):
11 if not other_started:
12 dev.dump_monitor()
13 id = dev.request("SCAN " + params)
14 if "FAIL" in id:
15 raise Exception("Failed to start scan")
16 id = int(id)
17
18 if other_started:
19 ev = dev.wait_event(["CTRL-EVENT-SCAN-STARTED"])
20 if ev is None:
21 raise Exception("Other scan did not start")
22 if "id=" + str(id) in ev:
23 raise Exception("Own scan id unexpectedly included in start event")
24
25 ev = dev.wait_event(["CTRL-EVENT-SCAN-RESULTS"])
26 if ev is None:
27 raise Exception("Other scan did not complete")
28 if "id=" + str(id) in ev:
29 raise Exception(
30 "Own scan id unexpectedly included in completed event")
31
32 ev = dev.wait_event(["CTRL-EVENT-SCAN-STARTED"])
33 if ev is None:
34 raise Exception("Scan did not start")
35 if "id=" + str(id) not in ev:
36 raise Exception("Scan id not included in start event")
37
38 ev = dev.wait_event(["CTRL-EVENT-SCAN-RESULTS"])
39 if ev is None:
40 raise Exception("Scan did not complete")
41 if "id=" + str(id) not in ev:
42 raise Exception("Scan id not included in completed event")
43
44 res = dev.request("SCAN_RESULTS")
45
46 if not res.find("[MESH]"):
47 raise Exception("Scan did not contain a MESH network")
48
49
50def check_mesh_group_added(dev):
51 ev = dev.wait_event(["MESH-GROUP-STARTED"])
52 if ev is None:
53 raise Exception("Test exception: Couldn't join mesh")
54
55
56def check_mesh_group_removed(dev):
57 ev = dev.wait_event(["MESH-GROUP-REMOVED"])
58 if ev is None:
59 raise Exception("Test exception: Couldn't leave mesh")
60
61
62def check_mesh_peer_connected(dev):
63 ev = dev.wait_event(["MESH-PEER-CONNECTED"])
64 if ev is None:
65 raise Exception("Test exception: Remote peer did not connect.")
66
67
68def check_mesh_peer_disconnected(dev):
69 ev = dev.wait_event(["MESH-PEER-DISCONNECTED"])
70 if ev is None:
71 raise Exception("Test exception: Peer disconnect event not detected.")
72
73
74def test_wpas_add_set_remove_support(dev):
75 """wpa_supplicant MESH add/set/remove network support"""
76 id = dev[0].add_network()
77 dev[0].set_network(id, "mode", "5")
78 dev[0].remove_network(id)
79
80
81def test_wpas_mesh_group_added(dev):
82 """wpa_supplicant MESH group add"""
83 id = dev[0].add_network()
84 dev[0].set_network(id, "mode", "5")
85 dev[0].set_network_quoted(id, "ssid", "wpas-mesh-open")
86 dev[0].set_network(id, "key_mgmt", "NONE")
87 dev[0].set_network(id, "frequency", "2412")
88 dev[0].mesh_group_add(id)
89
90 # Check for MESH-GROUP-STARTED event
91 check_mesh_group_added(dev[0])
92
93
94def test_wpas_mesh_group_remove(dev):
95 """wpa_supplicant MESH group remove"""
96 id = dev[0].add_network()
97 dev[0].set_network(id, "mode", "5")
98 dev[0].set_network_quoted(id, "ssid", "wpas-mesh-open")
99 dev[0].set_network(id, "key_mgmt", "NONE")
100 dev[0].set_network(id, "frequency", "2412")
101 dev[0].mesh_group_add(id)
102 # Check for MESH-GROUP-STARTED event
103 check_mesh_group_added(dev[0])
104 dev[0].mesh_group_remove()
105 # Check for MESH-GROUP-REMOVED event
106 check_mesh_group_removed(dev[0])
107
108
109def test_wpas_mesh_peer_connected(dev):
110 """wpa_supplicant MESH peer connected"""
111 id = dev[0].add_network()
112 dev[0].set_network(id, "mode", "5")
113 dev[0].set_network_quoted(id, "ssid", "wpas-mesh-open")
114 dev[0].set_network(id, "key_mgmt", "NONE")
115 dev[0].set_network(id, "frequency", "2412")
116 dev[0].mesh_group_add(id)
117
118 id = dev[1].add_network()
119 dev[1].set_network(id, "mode", "5")
120 dev[1].set_network_quoted(id, "ssid", "wpas-mesh-open")
121 dev[1].set_network(id, "key_mgmt", "NONE")
122 dev[1].set_network(id, "frequency", "2412")
123 dev[1].mesh_group_add(id)
124
125 # Check for mesh joined
126 check_mesh_group_added(dev[0])
127 check_mesh_group_added(dev[1])
128
129 # Check for peer connected
130 check_mesh_peer_connected(dev[0])
131 check_mesh_peer_connected(dev[1])
132
133
134def test_wpas_mesh_peer_disconnected(dev):
135 """wpa_supplicant MESH peer disconnected"""
136 id = dev[0].add_network()
137 dev[0].set_network(id, "mode", "5")
138 dev[0].set_network_quoted(id, "ssid", "wpas-mesh-open")
139 dev[0].set_network(id, "key_mgmt", "NONE")
140 dev[0].set_network(id, "frequency", "2412")
141 dev[0].mesh_group_add(id)
142
143 id = dev[1].add_network()
144 dev[1].set_network(id, "mode", "5")
145 dev[1].set_network_quoted(id, "ssid", "wpas-mesh-open")
146 dev[1].set_network(id, "key_mgmt", "NONE")
147 dev[1].set_network(id, "frequency", "2412")
148 dev[1].mesh_group_add(id)
149
150 # Check for mesh joined
151 check_mesh_group_added(dev[0])
152 check_mesh_group_added(dev[1])
153
154 # Check for peer connected
155 check_mesh_peer_connected(dev[0])
156 check_mesh_peer_connected(dev[1])
157
158 # Remove group on dev 1
159 dev[1].mesh_group_remove()
160 # Device 0 should get a disconnection event
161 check_mesh_peer_disconnected(dev[0])
162
163
164def test_wpas_mesh_mode_scan(dev):
165 """wpa_supplicant MESH scan support"""
166 id = dev[0].add_network()
167 dev[0].set_network(id, "mode", "5")
168 dev[0].set_network_quoted(id, "ssid", "wpas-mesh-open")
169 dev[0].set_network(id, "key_mgmt", "NONE")
170 dev[0].set_network(id, "frequency", "2412")
171 dev[0].mesh_group_add(id)
172
173 id = dev[1].add_network()
174 dev[1].set_network(id, "mode", "5")
175 dev[1].set_network_quoted(id, "ssid", "wpas-mesh-open")
176 dev[1].set_network(id, "key_mgmt", "NONE")
177 dev[1].set_network(id, "frequency", "2412")
178 dev[1].mesh_group_add(id)
179
180 # Check for mesh joined
181 check_mesh_group_added(dev[0])
182 check_mesh_group_added(dev[1])
183
184 # Check for Mesh scan
185 check_mesh_scan(dev[0], "use_id=1")
186
187
188def wrap_wpas_mesh_test(test, dev, apdev):
189 import hwsim_utils
190
191 def _test_connectivity(dev1, dev2):
192 return hwsim_utils.test_connectivity(dev1, dev2)
193
194 return test(dev, apdev, _test_connectivity)
195
196
197def _test_wpas_mesh_open(dev, apdev, test_connectivity):
198 """wpa_supplicant open MESH network connectivity"""
199 id = dev[0].add_network()
200 dev[0].set_network(id, "mode", "5")
201 dev[0].set_network_quoted(id, "ssid", "wpas-mesh-open")
202 dev[0].set_network(id, "key_mgmt", "NONE")
203 dev[0].set_network(id, "frequency", "2412")
204 dev[0].mesh_group_add(id)
205
206 id = dev[1].add_network()
207 dev[1].set_network(id, "mode", "5")
208 dev[1].set_network_quoted(id, "ssid", "wpas-mesh-open")
209 dev[1].set_network(id, "key_mgmt", "NONE")
210 dev[1].set_network(id, "frequency", "2412")
211 dev[1].mesh_group_add(id)
212
213 # Check for mesh joined
214 check_mesh_group_added(dev[0])
215 check_mesh_group_added(dev[1])
216
217 # Check for peer connected
218 check_mesh_peer_connected(dev[0])
219 check_mesh_peer_connected(dev[1])
220
221 # Test connectivity 0->1 and 1->0
222 test_connectivity(dev[0], dev[1])
223 test_connectivity(dev[1], dev[0])
224
225
226def test_wpas_mesh_open(dev, apdev):
227 return wrap_wpas_mesh_test(_test_wpas_mesh_open, dev, apdev)
228
229
230def _test_wpas_mesh_open_no_auto(dev, apdev, test_connectivity):
231 """wpa_supplicant open MESH network connectivity"""
232 id = dev[0].add_network()
233 dev[0].set_network(id, "mode", "5")
234 dev[0].set_network_quoted(id, "ssid", "wpas-mesh-open")
235 dev[0].set_network(id, "key_mgmt", "NONE")
236 dev[0].set_network(id, "frequency", "2412")
237 dev[0].mesh_group_add(id)
238
239 id = dev[1].add_network()
240 dev[1].set_network(id, "mode", "5")
241 dev[1].set_network_quoted(id, "ssid", "wpas-mesh-open")
242 dev[1].set_network(id, "key_mgmt", "NONE")
243 dev[1].set_network(id, "frequency", "2412")
244 dev[1].set_network(id, "no_auto_peer", "1")
245 dev[1].mesh_group_add(id)
246
247 # Check for mesh joined
248 check_mesh_group_added(dev[0])
249 check_mesh_group_added(dev[1])
250
251 # Check for peer connected
252 check_mesh_peer_connected(dev[0])
253 check_mesh_peer_connected(dev[1])
254
255 # Test connectivity 0->1 and 1->0
256 test_connectivity(dev[0], dev[1])
257 test_connectivity(dev[1], dev[0])
258
259
260def test_wpas_mesh_open_no_auto(dev, apdev):
261 return wrap_wpas_mesh_test(_test_wpas_mesh_open_no_auto, dev, apdev)
262
263
264def _test_wpas_mesh_secure(dev, apdev, test_connectivity):
265 """wpa_supplicant secure MESH network connectivity"""
266 id = dev[0].add_network()
267 dev[0].set_network(id, "mode", "5")
268 dev[0].set_network_quoted(id, "ssid", "wpas-mesh-sec")
269 dev[0].set_network(id, "key_mgmt", "SAE")
270 dev[0].set_network(id, "frequency", "2412")
271 dev[0].set_network_quoted(id, "psk", "thisismypassphrase!")
272 dev[0].mesh_group_add(id)
273
274 id = dev[1].add_network()
275 dev[1].set_network(id, "mode", "5")
276 dev[1].set_network_quoted(id, "ssid", "wpas-mesh-sec")
277 dev[1].set_network(id, "key_mgmt", "SAE")
278 dev[1].set_network(id, "frequency", "2412")
279 dev[1].set_network_quoted(id, "psk", "thisismypassphrase!")
280 dev[1].mesh_group_add(id)
281
282 # Check for mesh joined
283 check_mesh_group_added(dev[0])
284 check_mesh_group_added(dev[1])
285
286 # Check for peer connected
287 check_mesh_peer_connected(dev[0])
288 check_mesh_peer_connected(dev[1])
289
290 # Test connectivity 0->1 and 1->0
291 test_connectivity(dev[0], dev[1])
292 test_connectivity(dev[1], dev[0])
293
294
295def test_wpas_mesh_secure(dev, apdev):
296 return wrap_wpas_mesh_test(_test_wpas_mesh_secure, dev, apdev)
297
298
299def _test_wpas_mesh_secure_no_auto(dev, apdev, test_connectivity):
300 """wpa_supplicant secure MESH network connectivity"""
301 id = dev[0].add_network()
302 dev[0].set_network(id, "mode", "5")
303 dev[0].set_network_quoted(id, "ssid", "wpas-mesh-sec")
304 dev[0].set_network(id, "key_mgmt", "SAE")
305 dev[0].set_network(id, "frequency", "2412")
306 dev[0].set_network_quoted(id, "psk", "thisismypassphrase!")
307 dev[0].mesh_group_add(id)
308
309 id = dev[1].add_network()
310 dev[1].set_network(id, "mode", "5")
311 dev[1].set_network_quoted(id, "ssid", "wpas-mesh-sec")
312 dev[1].set_network(id, "key_mgmt", "SAE")
313 dev[1].set_network(id, "frequency", "2412")
314 dev[1].set_network_quoted(id, "psk", "thisismypassphrase!")
315 dev[1].set_network(id, "no_auto_peer", "1")
316 dev[1].mesh_group_add(id)
317
318 # Check for mesh joined
319 check_mesh_group_added(dev[0])
320 check_mesh_group_added(dev[1])
321
322 # Check for peer connected
323 check_mesh_peer_connected(dev[0])
324 check_mesh_peer_connected(dev[1])
325
326 # Test connectivity 0->1 and 1->0
327 test_connectivity(dev[0], dev[1])
328 test_connectivity(dev[1], dev[0])
329
330
331def test_wpas_mesh_secure_no_auto(dev, apdev):
332 return wrap_wpas_mesh_test(_test_wpas_mesh_secure_no_auto, dev, apdev)