]> git.ipfire.org Git - thirdparty/hostap.git/blame - tests/hwsim/test_bgscan.py
tests: Fix ap_ft_reassoc_replay for case where wlantest has the PSK
[thirdparty/hostap.git] / tests / hwsim / test_bgscan.py
CommitLineData
31ec9faf 1# bgscan tests
479c05b0 2# Copyright (c) 2014-2017, Jouni Malinen <j@w1.fi>
31ec9faf
JM
3#
4# This software may be distributed under the terms of the BSD license.
5# See README for more details.
6
7import time
8import logging
9logger = logging.getLogger()
10import os
11
12import hostapd
479c05b0 13from utils import alloc_fail, fail_test
31ec9faf
JM
14
15def test_bgscan_simple(dev, apdev):
16 """bgscan_simple"""
fab49f61
JM
17 hostapd.add_ap(apdev[0], {"ssid": "bgscan"})
18 hostapd.add_ap(apdev[1], {"ssid": "bgscan"})
31ec9faf
JM
19
20 dev[0].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
21 bgscan="simple:1:-20:2")
22 dev[1].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
23 bgscan="simple:1:-45:2")
24
c975e1c1
JM
25 dev[2].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
26 bgscan="simple:1:-45")
27 dev[2].request("REMOVE_NETWORK all")
28 dev[2].wait_disconnected()
29
30 dev[2].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
31 bgscan="simple:0:0")
32 dev[2].request("REMOVE_NETWORK all")
33 dev[2].wait_disconnected()
34
35 dev[2].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
36 bgscan="simple")
37 dev[2].request("REMOVE_NETWORK all")
38 dev[2].wait_disconnected()
39
40 dev[2].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
41 bgscan="simple:1")
42 dev[2].request("REMOVE_NETWORK all")
43 dev[2].wait_disconnected()
44
31ec9faf
JM
45 ev = dev[0].wait_event(["CTRL-EVENT-SIGNAL-CHANGE"], timeout=10)
46 if ev is None:
47 raise Exception("dev0 did not indicate signal change event")
48 if "above=0" not in ev:
49 raise Exception("Unexpected signal change event contents from dev0: " + ev)
50
51 ev = dev[1].wait_event(["CTRL-EVENT-SIGNAL-CHANGE"], timeout=10)
52 if ev is None:
53 raise Exception("dev1 did not indicate signal change event")
54 if "above=1" not in ev:
55 raise Exception("Unexpected signal change event contents from dev1: " + ev)
56
57 ev = dev[0].wait_event(["CTRL-EVENT-SCAN-STARTED"], timeout=3)
58 if ev is None:
59 raise Exception("dev0 did not start a scan")
60
61 ev = dev[1].wait_event(["CTRL-EVENT-SCAN-STARTED"], timeout=3)
62 if ev is None:
63 raise Exception("dev1 did not start a scan")
64
65 ev = dev[0].wait_event(["CTRL-EVENT-SCAN-RESULTS"], 5)
66 if ev is None:
67 raise Exception("dev0 did not complete a scan")
68 ev = dev[1].wait_event(["CTRL-EVENT-SCAN-RESULTS"], 5)
69 if ev is None:
70 raise Exception("dev1 did not complete a scan")
71
479c05b0
JM
72def test_bgscan_simple_beacon_loss(dev, apdev):
73 """bgscan_simple and beacon loss"""
fab49f61 74 hapd = hostapd.add_ap(apdev[0], {"ssid": "bgscan"})
479c05b0
JM
75
76 dev[0].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
77 bgscan="simple:1:-20:2")
78 hapd.set("ext_mgmt_frame_handling", "1")
79 if "OK" not in hapd.request("STOP_AP"):
80 raise Exception("Failed to stop AP")
81 ev = dev[0].wait_event(["CTRL-EVENT-BEACON-LOSS"], timeout=10)
82 if ev is None:
83 raise Exception("Beacon loss not reported")
84
85def test_bgscan_simple_scan_failure(dev, apdev):
86 """bgscan_simple and scan failure"""
fab49f61 87 hapd = hostapd.add_ap(apdev[0], {"ssid": "bgscan"})
479c05b0
JM
88
89 dev[0].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
90 bgscan="simple:1:-20:2")
91 with alloc_fail(dev[0], 1,
92 "wpa_supplicant_trigger_scan;bgscan_simple_timeout"):
93 ev = dev[0].wait_event(["CTRL-EVENT-SCAN-FAILED"], timeout=10)
94 if ev is None:
95 raise Exception("No scan failure reported")
96 ev = dev[0].wait_event(["CTRL-EVENT-SCAN-RESULTS"], 10)
97 if ev is None:
98 raise Exception("Scanning not continued after failure")
99
100def test_bgscan_simple_scanning(dev, apdev):
101 """bgscan_simple and scanning behavior"""
fab49f61 102 hapd = hostapd.add_ap(apdev[0], {"ssid": "bgscan"})
479c05b0
JM
103
104 dev[0].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
105 bgscan="simple:1:-20:2")
106 # Go through seven bgscan_simple_timeout calls for code coverage. This falls
107 # back from short to long scan interval and then reduces short_scan_count
108 # back to zero.
109 for i in range(7):
110 ev = dev[0].wait_event(["CTRL-EVENT-SCAN-RESULTS"], 10)
111 if ev is None:
112 raise Exception("Scanning not continued")
113
114def test_bgscan_simple_same_scan_int(dev, apdev):
115 """bgscan_simple and same short/long scan interval"""
fab49f61 116 hapd = hostapd.add_ap(apdev[0], {"ssid": "bgscan"})
479c05b0
JM
117
118 dev[0].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
119 bgscan="simple:1:-20:1")
120 for i in range(2):
121 ev = dev[0].wait_event(["CTRL-EVENT-SCAN-RESULTS"], 10)
122 if ev is None:
123 raise Exception("Scanning not continued")
124
125def test_bgscan_simple_oom(dev, apdev):
126 """bgscan_simple OOM"""
fab49f61 127 hapd = hostapd.add_ap(apdev[0], {"ssid": "bgscan"})
479c05b0
JM
128
129 with alloc_fail(dev[0], 1, "bgscan_simple_init"):
130 dev[0].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
131 bgscan="simple:1:-20:2")
132
133def test_bgscan_simple_driver_conf_failure(dev, apdev):
134 """bgscan_simple driver configuration failure"""
fab49f61 135 hapd = hostapd.add_ap(apdev[0], {"ssid": "bgscan"})
479c05b0
JM
136
137 with fail_test(dev[0], 1, "bgscan_simple_init"):
138 dev[0].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
139 bgscan="simple:1:-20:2")
140
31ec9faf
JM
141def test_bgscan_learn(dev, apdev):
142 """bgscan_learn"""
fab49f61
JM
143 hostapd.add_ap(apdev[0], {"ssid": "bgscan"})
144 hostapd.add_ap(apdev[1], {"ssid": "bgscan"})
31ec9faf
JM
145
146 try:
147 os.remove("/tmp/test_bgscan_learn.bgscan")
148 except:
149 pass
150
151 try:
152 dev[0].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
153 bgscan="learn:1:-20:2")
c975e1c1
JM
154 id = dev[1].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
155 bgscan="learn:1:-45:2:/tmp/test_bgscan_learn.bgscan")
156
157 dev[2].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
158 bgscan="learn:1:-45")
159 dev[2].request("REMOVE_NETWORK all")
160 dev[2].wait_disconnected()
161
162 dev[2].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
163 bgscan="learn:0:0")
164 dev[2].request("REMOVE_NETWORK all")
165 dev[2].wait_disconnected()
166
167 dev[2].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
168 bgscan="learn")
169 dev[2].request("REMOVE_NETWORK all")
170 dev[2].wait_disconnected()
171
172 dev[2].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
173 bgscan="learn:1")
174 dev[2].request("REMOVE_NETWORK all")
175 dev[2].wait_disconnected()
31ec9faf
JM
176
177 ev = dev[0].wait_event(["CTRL-EVENT-SIGNAL-CHANGE"], timeout=10)
178 if ev is None:
179 raise Exception("dev0 did not indicate signal change event")
180 if "above=0" not in ev:
181 raise Exception("Unexpected signal change event contents from dev0: " + ev)
182
183 ev = dev[1].wait_event(["CTRL-EVENT-SIGNAL-CHANGE"], timeout=10)
184 if ev is None:
185 raise Exception("dev1 did not indicate signal change event")
186 if "above=1" not in ev:
187 raise Exception("Unexpected signal change event contents from dev1: " + ev)
188
189 ev = dev[0].wait_event(["CTRL-EVENT-SCAN-STARTED"], timeout=3)
190 if ev is None:
191 raise Exception("dev0 did not start a scan")
192
193 ev = dev[1].wait_event(["CTRL-EVENT-SCAN-STARTED"], timeout=3)
194 if ev is None:
195 raise Exception("dev1 did not start a scan")
196
197 ev = dev[0].wait_event(["CTRL-EVENT-SCAN-RESULTS"], 5)
198 if ev is None:
199 raise Exception("dev0 did not complete a scan")
200 ev = dev[1].wait_event(["CTRL-EVENT-SCAN-RESULTS"], 5)
201 if ev is None:
202 raise Exception("dev1 did not complete a scan")
203
204 dev[0].request("DISCONNECT")
205 dev[1].request("DISCONNECT")
206 dev[0].request("REMOVE_NETWORK all")
31ec9faf
JM
207
208 with open("/tmp/test_bgscan_learn.bgscan", "r") as f:
209 lines = f.read().splitlines()
210 if lines[0] != "wpa_supplicant-bgscan-learn":
211 raise Exception("Unexpected bgscan header line")
212 if 'BSS 02:00:00:00:03:00 2412' not in lines:
213 raise Exception("Missing BSS1")
214 if 'BSS 02:00:00:00:04:00 2412' not in lines:
215 raise Exception("Missing BSS2")
216 if 'NEIGHBOR 02:00:00:00:03:00 02:00:00:00:04:00' not in lines:
217 raise Exception("Missing BSS1->BSS2 neighbor entry")
218 if 'NEIGHBOR 02:00:00:00:04:00 02:00:00:00:03:00' not in lines:
219 raise Exception("Missing BSS2->BSS1 neighbor entry")
c975e1c1
JM
220
221 dev[1].set_network(id, "scan_freq", "")
222 dev[1].connect_network(id)
223
224 ev = dev[1].wait_event(["CTRL-EVENT-SCAN-STARTED"], timeout=10)
225 if ev is None:
226 raise Exception("dev1 did not start a scan")
227
228 ev = dev[1].wait_event(["CTRL-EVENT-SCAN-RESULTS"], 10)
229 if ev is None:
230 raise Exception("dev1 did not complete a scan")
231
232 dev[1].request("REMOVE_NETWORK all")
31ec9faf
JM
233 finally:
234 try:
235 os.remove("/tmp/test_bgscan_learn.bgscan")
236 except:
237 pass
479c05b0
JM
238
239def test_bgscan_learn_beacon_loss(dev, apdev):
240 """bgscan_simple and beacon loss"""
fab49f61 241 hapd = hostapd.add_ap(apdev[0], {"ssid": "bgscan"})
479c05b0
JM
242
243 dev[0].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
244 bgscan="learn:1:-20:2")
245 hapd.set("ext_mgmt_frame_handling", "1")
246 if "OK" not in hapd.request("STOP_AP"):
247 raise Exception("Failed to stop AP")
248 ev = dev[0].wait_event(["CTRL-EVENT-BEACON-LOSS"], timeout=10)
249 if ev is None:
250 raise Exception("Beacon loss not reported")
251
252def test_bgscan_learn_scan_failure(dev, apdev):
253 """bgscan_learn and scan failure"""
fab49f61 254 hapd = hostapd.add_ap(apdev[0], {"ssid": "bgscan"})
479c05b0
JM
255
256 dev[0].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
257 bgscan="learn:1:-20:2")
258 with alloc_fail(dev[0], 1,
259 "wpa_supplicant_trigger_scan;bgscan_learn_timeout"):
260 ev = dev[0].wait_event(["CTRL-EVENT-SCAN-FAILED"], timeout=10)
261 if ev is None:
262 raise Exception("No scan failure reported")
263 ev = dev[0].wait_event(["CTRL-EVENT-SCAN-RESULTS"], 10)
264 if ev is None:
265 raise Exception("Scanning not continued after failure")
266
267def test_bgscan_learn_oom(dev, apdev):
268 """bgscan_learn OOM"""
fab49f61 269 hapd = hostapd.add_ap(apdev[0], {"ssid": "bgscan"})
479c05b0
JM
270
271 with alloc_fail(dev[0], 1, "bgscan_learn_init"):
272 dev[0].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
273 bgscan="learn:1:-20:2")
274
275def test_bgscan_learn_driver_conf_failure(dev, apdev):
276 """bgscan_learn driver configuration failure"""
fab49f61 277 hapd = hostapd.add_ap(apdev[0], {"ssid": "bgscan"})
479c05b0
JM
278
279 with fail_test(dev[0], 1, "bgscan_learn_init"):
280 dev[0].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
281 bgscan="learn:1:-20:2")
282
283def test_bgscan_unknown_module(dev, apdev):
284 """bgscan init failing due to unknown module"""
fab49f61 285 hapd = hostapd.add_ap(apdev[0], {"ssid": "bgscan"})
479c05b0
JM
286 dev[0].connect("bgscan", key_mgmt="NONE", scan_freq="2412",
287 bgscan="unknown:-20:2")