]>
git.ipfire.org Git - thirdparty/hostap.git/blob - tests/hwsim/test_wpas_ctrl.py
1 # wpa_supplicant control interface
2 # Copyright (c) 2014, Qualcomm Atheros, Inc.
4 # This software may be distributed under the terms of the BSD license.
5 # See README for more details.
8 logger
= logging
. getLogger ()
16 from hwsim
import HWSimRadio
17 from wpasupplicant
import WpaSupplicant
18 from utils
import alloc_fail
20 def test_wpas_ctrl_network ( dev
):
21 """wpa_supplicant ctrl_iface network set/get"""
22 id = dev
[ 0 ]. add_network ()
24 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id )):
25 raise Exception ( "Unexpected success for invalid SET_NETWORK" )
26 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + " name" ):
27 raise Exception ( "Unexpected success for invalid SET_NETWORK" )
28 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id + 1 ) + " proto OPEN" ):
29 raise Exception ( "Unexpected success for invalid network id" )
30 if "FAIL" not in dev
[ 0 ]. request ( "GET_NETWORK " + str ( id )):
31 raise Exception ( "Unexpected success for invalid GET_NETWORK" )
32 if "FAIL" not in dev
[ 0 ]. request ( "GET_NETWORK " + str ( id + 1 ) + " proto" ):
33 raise Exception ( "Unexpected success for invalid network id" )
35 tests
= (( "key_mgmt" , "WPA-PSK WPA-EAP IEEE8021X NONE WPA-NONE FT-PSK FT-EAP WPA-PSK-SHA256 WPA-EAP-SHA256" ),
36 ( "pairwise" , "CCMP-256 GCMP-256 CCMP GCMP TKIP" ),
37 ( "group" , "CCMP-256 GCMP-256 CCMP GCMP TKIP" ),
38 ( "auth_alg" , "OPEN SHARED LEAP" ),
39 ( "scan_freq" , "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15" ),
40 ( "freq_list" , "2412 2417" ),
42 ( "bssid" , "00:11:22:33:44:55" ),
43 ( "proto" , "WPA RSN OSEN" ),
45 ( "go_p2p_dev_addr" , "22:33:44:55:66:aa" ),
46 ( "p2p_client_list" , "22:33:44:55:66:bb 02:11:22:33:44:55" ))
48 dev
[ 0 ]. set_network_quoted ( id , "ssid" , "test" )
49 for field
, value
in tests
:
50 dev
[ 0 ]. set_network ( id , field
, value
)
51 res
= dev
[ 0 ]. get_network ( id , field
)
53 raise Exception ( "Unexpected response for '" + field
+ "': '" + res
+ "'" )
55 q_tests
= (( "identity" , "hello" ),
56 ( "anonymous_identity" , "foo@nowhere.com" ))
57 for field
, value
in q_tests
:
58 dev
[ 0 ]. set_network_quoted ( id , field
, value
)
59 res
= dev
[ 0 ]. get_network ( id , field
)
60 if res
!= '"' + value
+ '"' :
61 raise Exception ( "Unexpected quoted response for '" + field
+ "': '" + res
+ "'" )
63 get_tests
= (( "foo" , None ), ( "ssid" , '"test"' ))
64 for field
, value
in get_tests
:
65 res
= dev
[ 0 ]. get_network ( id , field
)
67 raise Exception ( "Unexpected response for '" + field
+ "': '" + res
+ "'" )
69 if dev
[ 0 ]. get_network ( id , "password" ):
70 raise Exception ( "Unexpected response for 'password'" )
71 dev
[ 0 ]. set_network_quoted ( id , "password" , "foo" )
72 if dev
[ 0 ]. get_network ( id , "password" ) != '*' :
73 raise Exception ( "Unexpected response for 'password' (expected *)" )
74 dev
[ 0 ]. set_network ( id , "password" , "hash:12345678901234567890123456789012" )
75 if dev
[ 0 ]. get_network ( id , "password" ) != '*' :
76 raise Exception ( "Unexpected response for 'password' (expected *)" )
77 dev
[ 0 ]. set_network ( id , "password" , "NULL" )
78 if dev
[ 0 ]. get_network ( id , "password" ):
79 raise Exception ( "Unexpected response for 'password'" )
80 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + " password hash:12" ):
81 raise Exception ( "Unexpected success for invalid password hash" )
82 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + " password hash:123456789012345678x0123456789012" ):
83 raise Exception ( "Unexpected success for invalid password hash" )
85 dev
[ 0 ]. set_network ( id , "identity" , "414243" )
86 if dev
[ 0 ]. get_network ( id , "identity" ) != '"ABC"' :
87 raise Exception ( "Unexpected identity hex->text response" )
89 dev
[ 0 ]. set_network ( id , "identity" , 'P"abc \n def"' )
90 if dev
[ 0 ]. get_network ( id , "identity" ) != "6162630a646566" :
91 raise Exception ( "Unexpected identity printf->hex response" )
93 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' identity P"foo' ):
94 raise Exception ( "Unexpected success for invalid identity string" )
96 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' identity 12x3' ):
97 raise Exception ( "Unexpected success for invalid identity string" )
100 if "FAIL" in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' wep_key' + str ( i
) + ' aabbccddee' ):
101 raise Exception ( "Unexpected wep_key set failure" )
102 if dev
[ 0 ]. get_network ( id , "wep_key" + str ( i
)) != '*' :
103 raise Exception ( "Unexpected wep_key get failure" )
105 if "FAIL" in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list P2P-00:11:22:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef' ):
106 raise Exception ( "Unexpected failure for psk_list string" )
108 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list 00:11:x2:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef' ):
109 raise Exception ( "Unexpected success for invalid psk_list string" )
111 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list P2P-00:11:x2:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef' ):
112 raise Exception ( "Unexpected success for invalid psk_list string" )
114 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list P2P-00:11:22:33:44:55+0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef' ):
115 raise Exception ( "Unexpected success for invalid psk_list string" )
117 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list P2P-00:11:22:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcde' ):
118 raise Exception ( "Unexpected success for invalid psk_list string" )
120 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' psk_list P2P-00:11:22:33:44:55-0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdex' ):
121 raise Exception ( "Unexpected success for invalid psk_list string" )
123 if dev
[ 0 ]. get_network ( id , "psk_list" ):
124 raise Exception ( "Unexpected psk_list get response" )
126 if dev
[ 0 ]. list_networks ()[ 0 ][ 'ssid' ] != "test" :
127 raise Exception ( "Unexpected ssid in LIST_NETWORKS" )
128 dev
[ 0 ]. set_network ( id , "ssid" , "NULL" )
129 if dev
[ 0 ]. list_networks ()[ 0 ][ 'ssid' ] != "" :
130 raise Exception ( "Unexpected ssid in LIST_NETWORKS after clearing it" )
132 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' ssid "0123456789abcdef0123456789abcdef0"' ):
133 raise Exception ( "Too long SSID accepted" )
134 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' scan_ssid qwerty' ):
135 raise Exception ( "Invalid integer accepted" )
136 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' scan_ssid 2' ):
137 raise Exception ( "Too large integer accepted" )
138 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' psk 12345678' ):
139 raise Exception ( "Invalid PSK accepted" )
140 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' psk "1234567"' ):
141 raise Exception ( "Too short PSK accepted" )
142 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' psk "1234567890123456789012345678901234567890123456789012345678901234"' ):
143 raise Exception ( "Too long PSK accepted" )
144 dev
[ 0 ]. set_network_quoted ( id , "psk" , "123456768" );
145 dev
[ 0 ]. set_network_quoted ( id , "psk" , "123456789012345678901234567890123456789012345678901234567890123" );
146 if dev
[ 0 ]. get_network ( id , "psk" ) != '*' :
147 raise Exception ( "Unexpected psk read result" );
149 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' eap UNKNOWN' ):
150 raise Exception ( "Unknown EAP method accepted" )
152 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' password "foo' ):
153 raise Exception ( "Invalid password accepted" )
155 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' wep_key0 "foo' ):
156 raise Exception ( "Invalid WEP key accepted" )
157 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' wep_key0 "12345678901234567"' ):
158 raise Exception ( "Too long WEP key accepted" )
159 # too short WEP key is ignored
160 dev
[ 0 ]. set_network_quoted ( id , "wep_key0" , "1234" )
161 dev
[ 0 ]. set_network_quoted ( id , "wep_key1" , "12345" )
162 dev
[ 0 ]. set_network_quoted ( id , "wep_key2" , "1234567890123" )
163 dev
[ 0 ]. set_network_quoted ( id , "wep_key3" , "1234567890123456" )
165 dev
[ 0 ]. set_network ( id , "go_p2p_dev_addr" , "any" )
166 if dev
[ 0 ]. get_network ( id , "go_p2p_dev_addr" ) is not None :
167 raise Exception ( "Unexpected go_p2p_dev_addr value" )
168 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' go_p2p_dev_addr 00:11:22:33:44' ):
169 raise Exception ( "Invalid go_p2p_dev_addr accepted" )
170 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' p2p_client_list 00:11:22:33:44' ):
171 raise Exception ( "Invalid p2p_client_list accepted" )
172 if "FAIL" in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' p2p_client_list 00:11:22:33:44:55 00:1' ):
173 raise Exception ( "p2p_client_list truncation workaround failed" )
174 if dev
[ 0 ]. get_network ( id , "p2p_client_list" ) != "00:11:22:33:44:55" :
175 raise Exception ( "p2p_client_list truncation workaround did not work" )
177 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' auth_alg ' ):
178 raise Exception ( "Empty auth_alg accepted" )
179 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' auth_alg FOO' ):
180 raise Exception ( "Invalid auth_alg accepted" )
182 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' proto ' ):
183 raise Exception ( "Empty proto accepted" )
184 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' proto FOO' ):
185 raise Exception ( "Invalid proto accepted" )
187 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' pairwise ' ):
188 raise Exception ( "Empty pairwise accepted" )
189 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' pairwise FOO' ):
190 raise Exception ( "Invalid pairwise accepted" )
191 if "FAIL" not in dev
[ 0 ]. request ( 'SET_NETWORK ' + str ( id ) + ' pairwise WEP40' ):
192 raise Exception ( "Invalid pairwise accepted" )
194 if "OK" not in dev
[ 0 ]. request ( 'BSSID ' + str ( id ) + ' 00:11:22:33:44:55' ):
195 raise Exception ( "Unexpected BSSID failure" )
196 if dev
[ 0 ]. request ( "GET_NETWORK 0 bssid" ) != '00:11:22:33:44:55' :
197 raise Exception ( "BSSID command did not set network bssid" )
198 if "OK" not in dev
[ 0 ]. request ( 'BSSID ' + str ( id ) + ' 00:00:00:00:00:00' ):
199 raise Exception ( "Unexpected BSSID failure" )
200 if "FAIL" not in dev
[ 0 ]. request ( "GET_NETWORK 0 bssid" ):
201 raise Exception ( "bssid claimed configured after clearing" )
202 if "FAIL" not in dev
[ 0 ]. request ( 'BSSID 123 00:11:22:33:44:55' ):
203 raise Exception ( "Unexpected BSSID success" )
204 if "FAIL" not in dev
[ 0 ]. request ( 'BSSID ' + str ( id ) + ' 00:11:22:33:44' ):
205 raise Exception ( "Unexpected BSSID success" )
206 if "FAIL" not in dev
[ 0 ]. request ( 'BSSID ' + str ( id )):
207 raise Exception ( "Unexpected BSSID success" )
209 tests
= [ "02:11:22:33:44:55" ,
210 "02:11:22:33:44:55 02:ae:be:ce:53:77" ,
211 "02:11:22:33:44:55/ff:00:ff:00:ff:00" ,
212 "02:11:22:33:44:55/ff:00:ff:00:ff:00 f2:99:88:77:66:55" ,
213 "f2:99:88:77:66:55 02:11:22:33:44:55/ff:00:ff:00:ff:00" ,
214 "f2:99:88:77:66:55 02:11:22:33:44:55/ff:00:ff:00:ff:00 12:34:56:78:90:ab" ,
215 "02:11:22:33:44:55/ff:ff:ff:00:00:00 02:ae:be:ce:53:77/00:00:00:00:00:ff" ]
217 dev
[ 0 ]. set_network ( id , "bssid_blacklist" , val
)
218 res
= dev
[ 0 ]. get_network ( id , "bssid_blacklist" )
220 raise Exception ( "Unexpected bssid_blacklist value: %s != %s " % ( res
, val
))
221 dev
[ 0 ]. set_network ( id , "bssid_whitelist" , val
)
222 res
= dev
[ 0 ]. get_network ( id , "bssid_whitelist" )
224 raise Exception ( "Unexpected bssid_whitelist value: %s != %s " % ( res
, val
))
228 "00:11:22:33:44:55q" ,
229 "00:11:22:33:44:55/" ,
230 "00:11:22:33:44:55/66:77:88:99:aa:b" ]
232 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK %d bssid_blacklist %s " % ( id , val
)):
233 raise Exception ( "Invalid bssid_blacklist value accepted" )
235 def test_wpas_ctrl_network_oom ( dev
):
236 """wpa_supplicant ctrl_iface network OOM in string parsing"""
237 id = dev
[ 0 ]. add_network ()
239 tests
= [ ( '"foo"' , 1 , 'dup_binstr;wpa_config_set' ),
240 ( 'P"foo"' , 1 , 'dup_binstr;wpa_config_set' ),
241 ( 'P"foo"' , 2 , 'wpa_config_set' ),
242 ( '112233' , 1 , 'wpa_config_set' ) ]
243 for val
, count
, func
in tests
:
244 with
alloc_fail ( dev
[ 0 ], count
, func
):
245 if "FAIL" not in dev
[ 0 ]. request ( "SET_NETWORK " + str ( id ) + ' ssid ' + val
):
246 raise Exception ( "Unexpected success for SET_NETWORK during OOM" )
248 def test_wpas_ctrl_many_networks ( dev
, apdev
):
249 """wpa_supplicant ctrl_iface LIST_NETWORKS with huge number of networks"""
250 for i
in range ( 1000 ):
251 id = dev
[ 0 ]. add_network ()
252 res
= dev
[ 0 ]. request ( "LIST_NETWORKS" )
254 raise Exception ( "Last added network was unexpectedly included" )
255 res
= dev
[ 0 ]. request ( "LIST_NETWORKS LAST_ID= %d " % ( id - 2 ))
256 if str ( id ) not in res
:
257 raise Exception ( "Last added network was not present when using LAST_ID" )
258 # This command can take a very long time under valgrind testing on a low
259 # power CPU, so increase the command timeout significantly to avoid issues
260 # with the test case failing and following reset operation timing out.
261 dev
[ 0 ]. request ( "REMOVE_NETWORK all" , timeout
= 60 )
263 def test_wpas_ctrl_dup_network ( dev
, apdev
):
264 """wpa_supplicant ctrl_iface DUP_NETWORK"""
266 passphrase
= 'qwertyuiop'
267 params
= hostapd
. wpa2_params ( ssid
= ssid
, passphrase
= passphrase
)
268 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
270 src
= dev
[ 0 ]. connect ( "another" , psk
= passphrase
, scan_freq
= "2412" ,
271 only_add_network
= True )
272 id = dev
[ 0 ]. add_network ()
273 dev
[ 0 ]. set_network_quoted ( id , "ssid" , ssid
)
274 for f
in [ "key_mgmt" , "psk" , "scan_freq" ]:
275 res
= dev
[ 0 ]. request ( "DUP_NETWORK {} {} {}" . format ( src
, id , f
))
277 raise Exception ( "DUP_NETWORK failed" )
278 dev
[ 0 ]. connect_network ( id )
280 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK " ):
281 raise Exception ( "Unexpected DUP_NETWORK success" )
282 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK %d " % id ):
283 raise Exception ( "Unexpected DUP_NETWORK success" )
284 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK %d %d " % ( id , id )):
285 raise Exception ( "Unexpected DUP_NETWORK success" )
286 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK 123456 1234567 " ):
287 raise Exception ( "Unexpected DUP_NETWORK success" )
288 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK %d 123456 " % id ):
289 raise Exception ( "Unexpected DUP_NETWORK success" )
290 if "FAIL" not in dev
[ 0 ]. request ( "DUP_NETWORK %d %d foo" % ( id , id )):
291 raise Exception ( "Unexpected DUP_NETWORK success" )
292 dev
[ 0 ]. request ( "DISCONNECT" )
293 if "OK" not in dev
[ 0 ]. request ( "DUP_NETWORK %d %d ssid" % ( id , id )):
294 raise Exception ( "Unexpected DUP_NETWORK failure" )
296 def test_wpas_ctrl_dup_network_global ( dev
, apdev
):
297 """wpa_supplicant ctrl_iface DUP_NETWORK (global)"""
299 passphrase
= 'qwertyuiop'
300 params
= hostapd
. wpa2_params ( ssid
= ssid
, passphrase
= passphrase
)
301 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
303 src
= dev
[ 0 ]. connect ( "another" , psk
= passphrase
, scan_freq
= "2412" ,
304 only_add_network
= True )
305 id = dev
[ 0 ]. add_network ()
306 dev
[ 0 ]. set_network_quoted ( id , "ssid" , ssid
)
307 for f
in [ "key_mgmt" , "psk" , "scan_freq" ]:
308 res
= dev
[ 0 ]. global_request ( "DUP_NETWORK {} {} {} {} {}" . format ( dev
[ 0 ]. ifname
, dev
[ 0 ]. ifname
, src
, id , f
))
310 raise Exception ( "DUP_NETWORK failed" )
311 dev
[ 0 ]. connect_network ( id )
313 if "FAIL" not in dev
[ 0 ]. global_request ( "DUP_NETWORK " ):
314 raise Exception ( "Unexpected DUP_NETWORK success" )
315 if "FAIL" not in dev
[ 0 ]. global_request ( "DUP_NETWORK %s " % dev
[ 0 ]. ifname
):
316 raise Exception ( "Unexpected DUP_NETWORK success" )
317 if "FAIL" not in dev
[ 0 ]. global_request ( "DUP_NETWORK %s %s " % ( dev
[ 0 ]. ifname
, dev
[ 0 ]. ifname
)):
318 raise Exception ( "Unexpected DUP_NETWORK success" )
319 if "FAIL" not in dev
[ 0 ]. global_request ( "DUP_NETWORK %s %s %d " % ( dev
[ 0 ]. ifname
, dev
[ 0 ]. ifname
, id )):
320 raise Exception ( "Unexpected DUP_NETWORK success" )
321 if "FAIL" not in dev
[ 0 ]. global_request ( "DUP_NETWORK %s %s %d %d " % ( dev
[ 0 ]. ifname
, dev
[ 0 ]. ifname
, id , id )):
322 raise Exception ( "Unexpected DUP_NETWORK success" )
323 dev
[ 0 ]. request ( "DISCONNECT" )
324 if "OK" not in dev
[ 0 ]. global_request ( "DUP_NETWORK %s %s %d %d ssid" % ( dev
[ 0 ]. ifname
, dev
[ 0 ]. ifname
, id , id )):
325 raise Exception ( "Unexpected DUP_NETWORK failure" )
329 ev
= dev
. wait_event ([ "CRED-ADDED" ])
331 raise Exception ( "Missing CRED-ADDED event" )
332 if " " + str ( id ) not in ev
:
333 raise Exception ( "CRED-ADDED event without matching id" )
336 def set_cred ( dev
, id , field
, value
):
337 dev
. set_cred ( id , field
, value
)
338 ev
= dev
. wait_event ([ "CRED-MODIFIED" ])
340 raise Exception ( "Missing CRED-MODIFIED event" )
341 if " " + str ( id ) + " " not in ev
:
342 raise Exception ( "CRED-MODIFIED event without matching id" )
344 raise Exception ( "CRED-MODIFIED event without matching field" )
346 def set_cred_quoted ( dev
, id , field
, value
):
347 dev
. set_cred_quoted ( id , field
, value
)
348 ev
= dev
. wait_event ([ "CRED-MODIFIED" ])
350 raise Exception ( "Missing CRED-MODIFIED event" )
351 if " " + str ( id ) + " " not in ev
:
352 raise Exception ( "CRED-MODIFIED event without matching id" )
354 raise Exception ( "CRED-MODIFIED event without matching field" )
356 def remove_cred ( dev
, id ):
358 ev
= dev
. wait_event ([ "CRED-REMOVED" ])
360 raise Exception ( "Missing CRED-REMOVED event" )
361 if " " + str ( id ) not in ev
:
362 raise Exception ( "CRED-REMOVED event without matching id" )
364 def test_wpas_ctrl_cred ( dev
):
365 """wpa_supplicant ctrl_iface cred set"""
366 id1
= add_cred ( dev
[ 0 ])
367 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id1
+ 1 ) + " temporary 1" ):
368 raise Exception ( "SET_CRED succeeded unexpectedly on unknown cred id" )
369 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id1
)):
370 raise Exception ( "Invalid SET_CRED succeeded unexpectedly" )
371 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id1
) + " temporary" ):
372 raise Exception ( "Invalid SET_CRED succeeded unexpectedly" )
373 if "FAIL" not in dev
[ 0 ]. request ( "GET_CRED " + str ( id1
+ 1 ) + " temporary" ):
374 raise Exception ( "GET_CRED succeeded unexpectedly on unknown cred id" )
375 if "FAIL" not in dev
[ 0 ]. request ( "GET_CRED " + str ( id1
)):
376 raise Exception ( "Invalid GET_CRED succeeded unexpectedly" )
377 if "FAIL" not in dev
[ 0 ]. request ( "GET_CRED " + str ( id1
) + " foo" ):
378 raise Exception ( "Invalid GET_CRED succeeded unexpectedly" )
379 id = add_cred ( dev
[ 0 ])
380 id2
= add_cred ( dev
[ 0 ])
381 set_cred ( dev
[ 0 ], id , "temporary" , "1" )
382 set_cred ( dev
[ 0 ], id , "priority" , "1" )
383 set_cred ( dev
[ 0 ], id , "pcsc" , "1" )
384 set_cred_quoted ( dev
[ 0 ], id , "private_key_passwd" , "test" )
385 set_cred_quoted ( dev
[ 0 ], id , "domain_suffix_match" , "test" )
386 set_cred_quoted ( dev
[ 0 ], id , "phase1" , "test" )
387 set_cred_quoted ( dev
[ 0 ], id , "phase2" , "test" )
389 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " eap FOO" ):
390 raise Exception ( "Unexpected success on unknown EAP method" )
392 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " username 12xa" ):
393 raise Exception ( "Unexpected success on invalid string" )
395 for i
in ( "11" , "1122" , "112233445566778899aabbccddeeff00" ):
396 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " roaming_consortium " + i
):
397 raise Exception ( "Unexpected success on invalid roaming_consortium" )
399 dev
[ 0 ]. set_cred ( id , "excluded_ssid" , "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff" )
400 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " excluded_ssid 00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00" ):
401 raise Exception ( "Unexpected success on invalid excluded_ssid" )
403 if "FAIL" not in dev
[ 0 ]. request ( "SET_CRED " + str ( id ) + " foo 4142" ):
404 raise Exception ( "Unexpected success on unknown field" )
406 id3
= add_cred ( dev
[ 0 ])
407 id4
= add_cred ( dev
[ 0 ])
408 if len ( dev
[ 0 ]. request ( "LIST_CREDS" ). splitlines ()) != 6 :
409 raise Exception ( "Unexpected LIST_CREDS result(1)" )
411 remove_cred ( dev
[ 0 ], id1
)
412 remove_cred ( dev
[ 0 ], id3
)
413 remove_cred ( dev
[ 0 ], id4
)
414 remove_cred ( dev
[ 0 ], id2
)
415 remove_cred ( dev
[ 0 ], id )
416 if "FAIL" not in dev
[ 0 ]. request ( "REMOVE_CRED 1" ):
417 raise Exception ( "Unexpected success on invalid remove cred" )
418 if len ( dev
[ 0 ]. request ( "LIST_CREDS" ). splitlines ()) != 1 :
419 raise Exception ( "Unexpected LIST_CREDS result(2)" )
421 id = add_cred ( dev
[ 0 ])
422 values
= [ ( "temporary" , "1" , False ),
423 ( "temporary" , "0" , False ),
424 ( "pcsc" , "1" , False ),
425 ( "realm" , "example.com" , True ),
426 ( "username" , "user@example.com" , True ),
427 ( "password" , "foo" , True , "*" ),
428 ( "ca_cert" , "ca.pem" , True ),
429 ( "client_cert" , "user.pem" , True ),
430 ( "private_key" , "key.pem" , True ),
431 ( "private_key_passwd" , "foo" , True , "*" ),
432 ( "imsi" , "310026-000000000" , True ),
433 ( "milenage" , "foo" , True , "*" ),
434 ( "domain_suffix_match" , "example.com" , True ),
435 ( "domain" , "example.com" , True ),
436 ( "domain" , "example.org" , True , "example.com \n example.org" ),
437 ( "roaming_consortium" , "0123456789" , False ),
438 ( "required_roaming_consortium" , "456789" , False ),
439 ( "eap" , "TTLS" , False ),
440 ( "phase1" , "foo=bar1" , True ),
441 ( "phase2" , "foo=bar2" , True ),
442 ( "excluded_ssid" , "test" , True ),
443 ( "excluded_ssid" , "foo" , True , "test \n foo" ),
444 ( "roaming_partner" , "example.com,0,4,*" , True ),
445 ( "roaming_partner" , "example.org,1,2,US" , True ,
446 "example.com,0,4,* \n example.org,1,2,US" ),
447 ( "update_identifier" , "4" , False ),
448 ( "provisioning_sp" , "sp.example.com" , True ),
449 ( "sp_priority" , "7" , False ),
450 ( "min_dl_bandwidth_home" , "100" , False ),
451 ( "min_ul_bandwidth_home" , "101" , False ),
452 ( "min_dl_bandwidth_roaming" , "102" , False ),
453 ( "min_ul_bandwidth_roaming" , "103" , False ),
454 ( "max_bss_load" , "57" , False ),
455 ( "req_conn_capab" , "6:22,80,443" , False ),
456 ( "req_conn_capab" , "17:500" , False , "6:22,80,443 \n 17:500" ),
457 ( "req_conn_capab" , "50" , False , "6:22,80,443 \n 17:500 \n 50" ),
458 ( "ocsp" , "1" , False ) ]
461 set_cred_quoted ( dev
[ 0 ], id , v
[ 0 ], v
[ 1 ])
463 set_cred ( dev
[ 0 ], id , v
[ 0 ], v
[ 1 ])
464 val
= dev
[ 0 ]. get_cred ( id , v
[ 0 ])
470 raise Exception ( "Unexpected GET_CRED value for {}: {} != {}" . format ( v
[ 0 ], val
, expect
))
471 creds
= dev
[ 0 ]. request ( "LIST_CREDS" ). splitlines ()
473 raise Exception ( "Unexpected LIST_CREDS result(3)" )
474 if creds
[ 1 ] != "0 \t example.com \t user@example.com \t example.com \t 310026-000000000" :
475 raise Exception ( "Unexpected LIST_CREDS value" )
476 remove_cred ( dev
[ 0 ], id )
477 if len ( dev
[ 0 ]. request ( "LIST_CREDS" ). splitlines ()) != 1 :
478 raise Exception ( "Unexpected LIST_CREDS result(4)" )
480 id = add_cred ( dev
[ 0 ])
481 set_cred_quoted ( dev
[ 0 ], id , "domain" , "foo.example.com" )
482 id = add_cred ( dev
[ 0 ])
483 set_cred_quoted ( dev
[ 0 ], id , "domain" , "bar.example.com" )
484 id = add_cred ( dev
[ 0 ])
485 set_cred_quoted ( dev
[ 0 ], id , "domain" , "foo.example.com" )
486 if "OK" not in dev
[ 0 ]. request ( "REMOVE_CRED sp_fqdn=foo.example.com" ):
487 raise Exception ( "REMOVE_CRED failed" )
488 creds
= dev
[ 0 ]. request ( "LIST_CREDS" )
489 if "foo.example.com" in creds
:
490 raise Exception ( "REMOVE_CRED sp_fqdn did not remove cred" )
491 if "bar.example.com" not in creds
:
492 raise Exception ( "REMOVE_CRED sp_fqdn removed incorrect cred" )
493 dev
[ 0 ]. request ( "REMOVE_CRED all" )
495 id = add_cred ( dev
[ 0 ])
496 set_cred_quoted ( dev
[ 0 ], id , "domain" , "foo.example.com" )
497 set_cred_quoted ( dev
[ 0 ], id , "provisioning_sp" , "sp.foo.example.com" )
498 id = add_cred ( dev
[ 0 ])
499 set_cred_quoted ( dev
[ 0 ], id , "domain" , "bar.example.com" )
500 set_cred_quoted ( dev
[ 0 ], id , "provisioning_sp" , "sp.bar.example.com" )
501 id = add_cred ( dev
[ 0 ])
502 set_cred_quoted ( dev
[ 0 ], id , "domain" , "foo.example.com" )
503 set_cred_quoted ( dev
[ 0 ], id , "provisioning_sp" , "sp.foo.example.com" )
504 if "OK" not in dev
[ 0 ]. request ( "REMOVE_CRED provisioning_sp=sp.foo.example.com" ):
505 raise Exception ( "REMOVE_CRED failed" )
506 creds
= dev
[ 0 ]. request ( "LIST_CREDS" )
507 if "foo.example.com" in creds
:
508 raise Exception ( "REMOVE_CRED provisioning_sp did not remove cred" )
509 if "bar.example.com" not in creds
:
510 raise Exception ( "REMOVE_CRED provisioning_sp removed incorrect cred" )
511 dev
[ 0 ]. request ( "REMOVE_CRED all" )
513 # Test large number of creds and LIST_CREDS truncation
514 dev
[ 0 ]. dump_monitor ()
515 for i
in range ( 0 , 100 ):
516 id = add_cred ( dev
[ 0 ])
517 set_cred_quoted ( dev
[ 0 ], id , "realm" , "relatively.long.realm.test %d .example.com" % i
)
518 dev
[ 0 ]. dump_monitor ()
519 creds
= dev
[ 0 ]. request ( "LIST_CREDS" )
520 for i
in range ( 0 , 100 ):
521 dev
[ 0 ]. remove_cred ( i
)
522 dev
[ 0 ]. dump_monitor ()
523 if len ( creds
) < 3900 or len ( creds
) > 4100 :
524 raise Exception ( "Unexpected LIST_CREDS length: %d " % len ( creds
))
525 if "test10.example.com" not in creds
:
526 raise Exception ( "Missing credential" )
527 if len ( creds
. splitlines ()) > 95 :
528 raise Exception ( "Too many LIST_CREDS entries in the buffer" )
530 def test_wpas_ctrl_pno ( dev
):
531 """wpa_supplicant ctrl_iface pno"""
532 if "FAIL" not in dev
[ 0 ]. request ( "SET pno 1" ):
533 raise Exception ( "Unexpected success in enabling PNO without enabled network blocks" )
534 id = dev
[ 0 ]. add_network ()
535 dev
[ 0 ]. set_network_quoted ( id , "ssid" , "test" )
536 dev
[ 0 ]. set_network ( id , "key_mgmt" , "NONE" )
537 dev
[ 0 ]. request ( "ENABLE_NETWORK " + str ( id ) + " no-connect" )
538 #mac80211_hwsim does not yet support PNO, so this fails
539 if "FAIL" not in dev
[ 0 ]. request ( "SET pno 1" ):
540 raise Exception ( "Unexpected success in enabling PNO" )
541 if "FAIL" not in dev
[ 0 ]. request ( "SET pno 1 freq=2000-3000,5180" ):
542 raise Exception ( "Unexpected success in enabling PNO" )
543 if "FAIL" not in dev
[ 0 ]. request ( "SET pno 1 freq=0-6000" ):
544 raise Exception ( "Unexpected success in enabling PNO" )
545 if "FAIL" in dev
[ 0 ]. request ( "SET pno 0" ):
546 raise Exception ( "Unexpected failure in disabling PNO" )
548 def test_wpas_ctrl_get ( dev
):
549 """wpa_supplicant ctrl_iface get"""
550 if "FAIL" in dev
[ 0 ]. request ( "GET version" ):
551 raise Exception ( "Unexpected get failure for version" )
552 if "FAIL" in dev
[ 0 ]. request ( "GET wifi_display" ):
553 raise Exception ( "Unexpected get failure for wifi_display" )
554 if "FAIL" not in dev
[ 0 ]. request ( "GET foo" ):
555 raise Exception ( "Unexpected success on get command" )
557 def test_wpas_ctrl_preauth ( dev
):
558 """wpa_supplicant ctrl_iface preauth"""
559 if "FAIL" not in dev
[ 0 ]. request ( "PREAUTH " ):
560 raise Exception ( "Unexpected success on invalid PREAUTH" )
561 if "FAIL" in dev
[ 0 ]. request ( "PREAUTH 00:11:22:33:44:55" ):
562 raise Exception ( "Unexpected failure on PREAUTH" )
564 def test_wpas_ctrl_stkstart ( dev
):
565 """wpa_supplicant ctrl_iface strkstart"""
566 if "FAIL" not in dev
[ 0 ]. request ( "STKSTART " ):
567 raise Exception ( "Unexpected success on invalid STKSTART" )
568 if "FAIL" not in dev
[ 0 ]. request ( "STKSTART 00:11:22:33:44:55" ):
569 raise Exception ( "Unexpected success on STKSTART" )
571 def test_wpas_ctrl_tdls_discover ( dev
):
572 """wpa_supplicant ctrl_iface tdls_discover"""
573 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_DISCOVER " ):
574 raise Exception ( "Unexpected success on invalid TDLS_DISCOVER" )
575 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_DISCOVER 00:11:22:33:44:55" ):
576 raise Exception ( "Unexpected success on TDLS_DISCOVER" )
578 def test_wpas_ctrl_tdls_chan_switch ( dev
):
579 """wpa_supplicant ctrl_iface tdls_chan_switch error cases"""
580 for args
in [ '' , '00:11:22:33:44:55' ]:
581 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_CANCEL_CHAN_SWITCH " + args
):
582 raise Exception ( "Unexpected success on invalid TDLS_CANCEL_CHAN_SWITCH: " + args
)
584 for args
in [ '' , 'foo ' , '00:11:22:33:44:55 ' , '00:11:22:33:44:55 q' ,
585 '00:11:22:33:44:55 81' , '00:11:22:33:44:55 81 1234' ,
586 '00:11:22:33:44:55 81 1234 center_freq1=234 center_freq2=345 bandwidth=456 sec_channel_offset=567 ht vht' ]:
587 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_CHAN_SWITCH " + args
):
588 raise Exception ( "Unexpected success on invalid TDLS_CHAN_SWITCH: " + args
)
590 def test_wpas_ctrl_addr ( dev
):
591 """wpa_supplicant ctrl_iface invalid address"""
592 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_SETUP " ):
593 raise Exception ( "Unexpected success on invalid TDLS_SETUP" )
594 if "FAIL" not in dev
[ 0 ]. request ( "TDLS_TEARDOWN " ):
595 raise Exception ( "Unexpected success on invalid TDLS_TEARDOWN" )
596 if "FAIL" not in dev
[ 0 ]. request ( "FT_DS " ):
597 raise Exception ( "Unexpected success on invalid FT_DS" )
598 if "FAIL" not in dev
[ 0 ]. request ( "WPS_PBC 00:11:22:33:44" ):
599 raise Exception ( "Unexpected success on invalid WPS_PBC" )
600 if "FAIL" not in dev
[ 0 ]. request ( "WPS_PIN 00:11:22:33:44" ):
601 raise Exception ( "Unexpected success on invalid WPS_PIN" )
602 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC 00:11:22:33:44" ):
603 raise Exception ( "Unexpected success on invalid WPS_NFC" )
604 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44 12345670" ):
605 raise Exception ( "Unexpected success on invalid WPS_REG" )
606 if "FAIL" not in dev
[ 0 ]. request ( "IBSS_RSN 00:11:22:33:44" ):
607 raise Exception ( "Unexpected success on invalid IBSS_RSN" )
608 if "FAIL" not in dev
[ 0 ]. request ( "BLACKLIST 00:11:22:33:44" ):
609 raise Exception ( "Unexpected success on invalid BLACKLIST" )
611 def test_wpas_ctrl_wps_errors ( dev
):
612 """wpa_supplicant ctrl_iface WPS error cases"""
613 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44:55" ):
614 raise Exception ( "Unexpected success on invalid WPS_REG" )
615 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44:55 12345670 2233" ):
616 raise Exception ( "Unexpected success on invalid WPS_REG" )
617 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44:55 12345670 2233 OPEN" ):
618 raise Exception ( "Unexpected success on invalid WPS_REG" )
619 if "FAIL" not in dev
[ 0 ]. request ( "WPS_REG 00:11:22:33:44:55 12345670 2233 OPEN NONE" ):
620 raise Exception ( "Unexpected success on invalid WPS_REG" )
622 if "FAIL" not in dev
[ 0 ]. request ( "WPS_AP_PIN random" ):
623 raise Exception ( "Unexpected success on WPS_AP_PIN in non-AP mode" )
625 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_PIN any" ):
626 raise Exception ( "Unexpected success on invalid WPS_ER_PIN" )
628 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_LEARN 00:11:22:33:44:55" ):
629 raise Exception ( "Unexpected success on invalid WPS_ER_LEARN" )
631 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_SET_CONFIG 00:11:22:33:44:55" ):
632 raise Exception ( "Unexpected success on invalid WPS_ER_SET_CONFIG" )
634 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55" ):
635 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
636 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55 12345670" ):
637 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
638 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55 12345670 2233" ):
639 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
640 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55 12345670 2233 OPEN" ):
641 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
642 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_CONFIG 00:11:22:33:44:55 12345670 2233 OPEN NONE" ):
643 raise Exception ( "Unexpected success on invalid WPS_ER_CONFIG" )
645 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_NFC_CONFIG_TOKEN WPS" ):
646 raise Exception ( "Unexpected success on invalid WPS_ER_NFC_CONFIG_TOKEN" )
647 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_NFC_CONFIG_TOKEN FOO 00:11:22:33:44:55" ):
648 raise Exception ( "Unexpected success on invalid WPS_ER_NFC_CONFIG_TOKEN" )
649 if "FAIL" not in dev
[ 0 ]. request ( "WPS_ER_NFC_CONFIG_TOKEN NDEF 00:11:22:33:44:55" ):
650 raise Exception ( "Unexpected success on invalid WPS_ER_NFC_CONFIG_TOKEN" )
652 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC_CONFIG_TOKEN FOO" ):
653 raise Exception ( "Unexpected success on invalid WPS_NFC_CONFIG_TOKEN" )
654 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC_CONFIG_TOKEN WPS FOO" ):
655 raise Exception ( "Unexpected success on invalid WPS_NFC_CONFIG_TOKEN" )
656 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC_TOKEN FOO" ):
657 raise Exception ( "Unexpected success on invalid WPS_NFC_TOKEN" )
659 def test_wpas_ctrl_config_parser ( dev
):
660 """wpa_supplicant ctrl_iface SET config parser"""
661 if "FAIL" not in dev
[ 0 ]. request ( "SET pbc_in_m1 qwerty" ):
662 raise Exception ( "Non-number accepted as integer" )
663 if "FAIL" not in dev
[ 0 ]. request ( "SET eapol_version 0" ):
664 raise Exception ( "Out-of-range value accepted" )
665 if "FAIL" not in dev
[ 0 ]. request ( "SET eapol_version 10" ):
666 raise Exception ( "Out-of-range value accepted" )
668 if "FAIL" not in dev
[ 0 ]. request ( "SET serial_number 0123456789abcdef0123456789abcdef0" ):
669 raise Exception ( "Too long string accepted" )
671 def test_wpas_ctrl_mib ( dev
):
672 """wpa_supplicant ctrl_iface MIB"""
673 mib
= dev
[ 0 ]. get_mib ()
674 if "dot11RSNAOptionImplemented" not in mib
:
675 raise Exception ( "Missing MIB entry" )
676 if mib
[ "dot11RSNAOptionImplemented" ] != "TRUE" :
677 raise Exception ( "Unexpected dot11RSNAOptionImplemented value" )
679 def test_wpas_ctrl_set_wps_params ( dev
):
680 """wpa_supplicant ctrl_iface SET config_methods"""
681 ts
= [ "config_methods label virtual_display virtual_push_button keypad" ,
682 "device_type 1-0050F204-1" ,
683 "os_version 01020300" ,
684 "uuid 12345678-9abc-def0-1234-56789abcdef0" ]
686 if "OK" not in dev
[ 2 ]. request ( "SET " + t
):
687 raise Exception ( "SET failed for: " + t
)
689 ts
= [ "uuid 12345678+9abc-def0-1234-56789abcdef0" ,
690 "uuid 12345678-qabc-def0-1234-56789abcdef0" ,
691 "uuid 12345678-9abc+def0-1234-56789abcdef0" ,
692 "uuid 12345678-9abc-qef0-1234-56789abcdef0" ,
693 "uuid 12345678-9abc-def0+1234-56789abcdef0" ,
694 "uuid 12345678-9abc-def0-q234-56789abcdef0" ,
695 "uuid 12345678-9abc-def0-1234+56789abcdef0" ,
696 "uuid 12345678-9abc-def0-1234-q6789abcdef0" ,
699 if "FAIL" not in dev
[ 2 ]. request ( "SET " + t
):
700 raise Exception ( "SET succeeded for: " + t
)
702 def test_wpas_ctrl_level ( dev
):
703 """wpa_supplicant ctrl_iface LEVEL"""
705 if "FAIL" not in dev
[ 2 ]. request ( "LEVEL 3" ):
706 raise Exception ( "Unexpected LEVEL success" )
707 if "OK" not in dev
[ 2 ]. mon
. request ( "LEVEL 2" ):
708 raise Exception ( "Unexpected LEVEL failure" )
709 dev
[ 2 ]. request ( "SCAN freq=2412" )
710 ev
= dev
[ 2 ]. wait_event ([ "State:" ], timeout
= 5 )
712 raise Exception ( "No debug message received" )
713 dev
[ 2 ]. wait_event ([ "CTRL-EVENT-SCAN-RESULTS" ], timeout
= 5 )
715 dev
[ 2 ]. mon
. request ( "LEVEL 3" )
717 def test_wpas_ctrl_bssid_filter ( dev
, apdev
):
718 """wpa_supplicant bssid_filter"""
720 if "OK" not in dev
[ 2 ]. request ( "SET bssid_filter " + apdev
[ 0 ][ 'bssid' ]):
721 raise Exception ( "Failed to set bssid_filter" )
722 params
= { "ssid" : "test" }
723 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
724 hostapd
. add_ap ( apdev
[ 1 ][ 'ifname' ], params
)
725 dev
[ 2 ]. scan_for_bss ( apdev
[ 0 ][ 'bssid' ], freq
= "2412" )
726 dev
[ 2 ]. scan ( freq
= "2412" )
727 bss
= dev
[ 2 ]. get_bss ( apdev
[ 0 ][ 'bssid' ])
728 if bss
is None or len ( bss
) == 0 :
729 raise Exception ( "Missing BSS data" )
730 bss
= dev
[ 2 ]. get_bss ( apdev
[ 1 ][ 'bssid' ])
731 if bss
and len ( bss
) != 0 :
732 raise Exception ( "Unexpected BSS data" )
733 dev
[ 2 ]. request ( "SET bssid_filter " )
734 dev
[ 2 ]. scan ( freq
= "2412" )
735 bss
= dev
[ 2 ]. get_bss ( apdev
[ 0 ][ 'bssid' ])
736 if bss
is None or len ( bss
) == 0 :
737 raise Exception ( "Missing BSS data" )
738 bss
= dev
[ 2 ]. get_bss ( apdev
[ 1 ][ 'bssid' ])
739 if bss
is None or len ( bss
) == 0 :
740 raise Exception ( "Missing BSS data(2)" )
741 res
= dev
[ 2 ]. request ( "SCAN_RESULTS" ). splitlines ()
742 if "test" not in res
[ 1 ] or "test" not in res
[ 2 ]:
743 raise Exception ( "SSID missing from SCAN_RESULTS" )
744 if apdev
[ 0 ][ 'bssid' ] not in res
[ 1 ] and apdev
[ 1 ][ 'bssid' ] not in res
[ 1 ]:
745 raise Exception ( "BSS1 missing from SCAN_RESULTS" )
746 if apdev
[ 0 ][ 'bssid' ] not in res
[ 2 ] and apdev
[ 1 ][ 'bssid' ] not in res
[ 2 ]:
747 raise Exception ( "BSS1 missing from SCAN_RESULTS" )
749 if "FAIL" not in dev
[ 2 ]. request ( "SET bssid_filter 00:11:22:33:44:55 00:11:22:33:44" ):
750 raise Exception ( "Unexpected success for invalid SET bssid_filter" )
752 dev
[ 2 ]. request ( "SET bssid_filter " )
754 def test_wpas_ctrl_disallow_aps ( dev
, apdev
):
755 """wpa_supplicant ctrl_iface disallow_aps"""
756 params
= { "ssid" : "test" }
757 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
759 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps bssid " ):
760 raise Exception ( "Unexpected success on invalid disallow_aps" )
761 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps bssid 00:11:22:33:44" ):
762 raise Exception ( "Unexpected success on invalid disallow_aps" )
763 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps ssid 0" ):
764 raise Exception ( "Unexpected success on invalid disallow_aps" )
765 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps ssid 4q" ):
766 raise Exception ( "Unexpected success on invalid disallow_aps" )
767 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps bssid 00:11:22:33:44:55 ssid 112233 ssid 123" ):
768 raise Exception ( "Unexpected success on invalid disallow_aps" )
769 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps ssid 000102030405060708090a0b0c0d0e0f000102030405060708090a0b0c0d0e0f00" ):
770 raise Exception ( "Unexpected success on invalid disallow_aps" )
771 if "FAIL" not in dev
[ 0 ]. request ( "SET disallow_aps foo 112233445566" ):
772 raise Exception ( "Unexpected success on invalid disallow_aps" )
774 dev
[ 0 ]. connect ( "test" , key_mgmt
= "NONE" , scan_freq
= "2412" )
775 hostapd
. add_ap ( apdev
[ 1 ][ 'ifname' ], params
)
776 dev
[ 0 ]. scan_for_bss ( apdev
[ 1 ][ 'bssid' ], freq
= "2412" )
777 dev
[ 0 ]. dump_monitor ()
778 if "OK" not in dev
[ 0 ]. request ( "SET disallow_aps bssid 00:11:22:33:44:55 bssid 00:22:33:44:55:66" ):
779 raise Exception ( "Failed to set disallow_aps" )
780 if "OK" not in dev
[ 0 ]. request ( "SET disallow_aps bssid " + apdev
[ 0 ][ 'bssid' ]):
781 raise Exception ( "Failed to set disallow_aps" )
782 ev
= dev
[ 0 ]. wait_connected ( timeout
= 30 , error
= "Reassociation timed out" )
783 if apdev
[ 1 ][ 'bssid' ] not in ev
:
784 raise Exception ( "Unexpected BSSID" )
786 dev
[ 0 ]. dump_monitor ()
787 if "OK" not in dev
[ 0 ]. request ( "SET disallow_aps ssid " + "test" . encode ( "hex" )):
788 raise Exception ( "Failed to set disallow_aps" )
789 dev
[ 0 ]. wait_disconnected ( timeout
= 5 , error
= "Disconnection not seen" )
790 ev
= dev
[ 0 ]. wait_event ([ "CTRL-EVENT-CONNECTED" ], timeout
= 1 )
792 raise Exception ( "Unexpected reassociation" )
794 dev
[ 0 ]. request ( "DISCONNECT" )
795 dev
[ 0 ]. p2p_start_go ( freq
= 2412 )
796 if "OK" not in dev
[ 0 ]. request ( "SET disallow_aps " ):
797 raise Exception ( "Failed to set disallow_aps" )
799 def test_wpas_ctrl_blob ( dev
):
800 """wpa_supplicant ctrl_iface SET blob"""
801 if "FAIL" not in dev
[ 0 ]. request ( "SET blob foo" ):
802 raise Exception ( "Unexpected SET success" )
803 if "FAIL" not in dev
[ 0 ]. request ( "SET blob foo 0" ):
804 raise Exception ( "Unexpected SET success" )
805 if "FAIL" not in dev
[ 0 ]. request ( "SET blob foo 0q" ):
806 raise Exception ( "Unexpected SET success" )
807 if "OK" not in dev
[ 0 ]. request ( "SET blob foo 00" ):
808 raise Exception ( "Unexpected SET failure" )
809 if "OK" not in dev
[ 0 ]. request ( "SET blob foo 0011" ):
810 raise Exception ( "Unexpected SET failure" )
812 def test_wpas_ctrl_set_uapsd ( dev
):
813 """wpa_supplicant ctrl_iface SET uapsd"""
814 if "FAIL" not in dev
[ 0 ]. request ( "SET uapsd foo" ):
815 raise Exception ( "Unexpected SET success" )
816 if "FAIL" not in dev
[ 0 ]. request ( "SET uapsd 0,0,0" ):
817 raise Exception ( "Unexpected SET success" )
818 if "FAIL" not in dev
[ 0 ]. request ( "SET uapsd 0,0" ):
819 raise Exception ( "Unexpected SET success" )
820 if "FAIL" not in dev
[ 0 ]. request ( "SET uapsd 0" ):
821 raise Exception ( "Unexpected SET success" )
822 if "OK" not in dev
[ 0 ]. request ( "SET uapsd 1,1,1,1;1" ):
823 raise Exception ( "Unexpected SET failure" )
824 if "OK" not in dev
[ 0 ]. request ( "SET uapsd 0,0,0,0;0" ):
825 raise Exception ( "Unexpected SET failure" )
826 if "OK" not in dev
[ 0 ]. request ( "SET uapsd disable" ):
827 raise Exception ( "Unexpected SET failure" )
829 def test_wpas_ctrl_set ( dev
):
830 """wpa_supplicant ctrl_iface SET"""
836 "dot11RSNAConfigPMKLifetime 0" ,
837 "dot11RSNAConfigPMKReauthThreshold 101" ,
838 "dot11RSNAConfigSATimeout 0" ,
839 "wps_version_number -1" ,
840 "wps_version_number 256" ]
842 if "FAIL" not in dev
[ 0 ]. request ( "SET " + val
):
843 raise Exception ( "Unexpected SET success for " + val
)
845 vals
= [ "EAPOL::heldPeriod 60" ,
846 "EAPOL::authPeriod 30" ,
847 "EAPOL::startPeriod 30" ,
849 "dot11RSNAConfigSATimeout 60" ,
856 if "OK" not in dev
[ 0 ]. request ( "SET " + val
):
857 raise Exception ( "Unexpected SET failure for " + val
)
859 def test_wpas_ctrl_get_capability ( dev
):
860 """wpa_supplicant ctrl_iface GET_CAPABILITY"""
861 if "FAIL" not in dev
[ 0 ]. request ( "GET_CAPABILITY 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" ):
862 raise Exception ( "Unexpected success on invalid GET_CAPABILITY" )
863 if "FAIL" not in dev
[ 0 ]. request ( "GET_CAPABILITY eap foo" ):
864 raise Exception ( "Unexpected success on invalid GET_CAPABILITY" )
865 if "AP" not in dev
[ 0 ]. request ( "GET_CAPABILITY modes strict" ):
866 raise Exception ( "Unexpected GET_CAPABILITY response" )
867 res
= dev
[ 0 ]. get_capability ( "eap" )
868 if "TTLS" not in res
:
869 raise Exception ( "Unexpected GET_CAPABILITY eap response: " + str ( res
))
871 res
= dev
[ 0 ]. get_capability ( "pairwise" )
872 if "CCMP" not in res
:
873 raise Exception ( "Unexpected GET_CAPABILITY pairwise response: " + str ( res
))
875 res
= dev
[ 0 ]. get_capability ( "group" )
876 if "CCMP" not in res
:
877 raise Exception ( "Unexpected GET_CAPABILITY group response: " + str ( res
))
879 res
= dev
[ 0 ]. get_capability ( "key_mgmt" )
880 if "WPA-PSK" not in res
or "WPA-EAP" not in res
:
881 raise Exception ( "Unexpected GET_CAPABILITY key_mgmt response: " + str ( res
))
883 res
= dev
[ 0 ]. get_capability ( "proto" )
884 if "WPA" not in res
or "RSN" not in res
:
885 raise Exception ( "Unexpected GET_CAPABILITY proto response: " + str ( res
))
887 res
= dev
[ 0 ]. get_capability ( "auth_alg" )
888 if "OPEN" not in res
or "SHARED" not in res
:
889 raise Exception ( "Unexpected GET_CAPABILITY auth_alg response: " + str ( res
))
891 res
= dev
[ 0 ]. get_capability ( "modes" )
892 if "IBSS" not in res
or "AP" not in res
:
893 raise Exception ( "Unexpected GET_CAPABILITY modes response: " + str ( res
))
895 res
= dev
[ 0 ]. get_capability ( "channels" )
896 if "8" not in res
or "36" not in res
:
897 raise Exception ( "Unexpected GET_CAPABILITY channels response: " + str ( res
))
899 res
= dev
[ 0 ]. get_capability ( "freq" )
900 if "2457" not in res
or "5180" not in res
:
901 raise Exception ( "Unexpected GET_CAPABILITY freq response: " + str ( res
))
903 res
= dev
[ 0 ]. get_capability ( "tdls" )
904 if "EXTERNAL" not in res
[ 0 ]:
905 raise Exception ( "Unexpected GET_CAPABILITY tdls response: " + str ( res
))
907 res
= dev
[ 0 ]. get_capability ( "erp" )
908 if res
is None or "ERP" not in res
[ 0 ]:
909 raise Exception ( "Unexpected GET_CAPABILITY erp response: " + str ( res
))
911 if dev
[ 0 ]. get_capability ( "foo" ) is not None :
912 raise Exception ( "Unexpected GET_CAPABILITY foo response: " + str ( res
))
914 def test_wpas_ctrl_nfc_report_handover ( dev
):
915 """wpa_supplicant ctrl_iface NFC_REPORT_HANDOVER"""
926 if "FAIL" not in dev
[ 0 ]. request ( "NFC_REPORT_HANDOVER " + v
):
927 raise Exception ( "Unexpected NFC_REPORT_HANDOVER success for " + v
)
929 def test_wpas_ctrl_nfc_tag_read ( dev
):
930 """wpa_supplicant ctrl_iface WPS_NFC_TAG_READ"""
931 vals
= [ "FOO" , "0Q" , "00" , "000000" , "10000001" , "10000000" , "00000000" ,
932 "100e0000" , "100e0001ff" , "100e000411110000" , "100e0004100e0001" ]
934 if "FAIL" not in dev
[ 0 ]. request ( "WPS_NFC_TAG_READ " + v
):
935 raise Exception ( "Unexpected WPS_NFC_TAG_READ success for " + v
)
937 def test_wpas_ctrl_nfc_get_handover ( dev
):
938 """wpa_supplicant ctrl_iface NFC_GET_HANDOVER"""
939 vals
= [ "FOO" , "FOO BAR" , "WPS WPS" , "WPS WPS-CR" , "WPS FOO" , "NDEF P2P" ]
941 if "FAIL" not in dev
[ 0 ]. request ( "NFC_GET_HANDOVER_REQ " + v
):
942 raise Exception ( "Unexpected NFC_GET_HANDOVER_REQ success for " + v
)
944 vals
= [ "NDEF WPS" , "NDEF P2P-CR" , "WPS P2P-CR" ]
946 if "FAIL" in dev
[ 0 ]. request ( "NFC_GET_HANDOVER_REQ " + v
):
947 raise Exception ( "Unexpected NFC_GET_HANDOVER_REQ failure for " + v
)
949 vals
= [ "FOO" , "FOO BAR" , "WPS WPS" , "WPS WPS-CR" , "WPS FOO" , "NDEF P2P" ,
950 "NDEF WPS" , "NDEF WPS uuid" ]
952 if "FAIL" not in dev
[ 0 ]. request ( "NFC_GET_HANDOVER_SEL " + v
):
953 raise Exception ( "Unexpected NFC_GET_HANDOVER_SEL success for " + v
)
955 vals
= [ "NDEF P2P-CR" , "WPS P2P-CR" , "NDEF P2P-CR-TAG" ,
958 if "FAIL" in dev
[ 0 ]. request ( "NFC_GET_HANDOVER_SEL " + v
):
959 raise Exception ( "Unexpected NFC_GET_HANDOVER_SEL failure for " + v
)
961 def get_blacklist ( dev
):
962 return dev
. request ( "BLACKLIST" ). splitlines ()
964 def test_wpas_ctrl_blacklist ( dev
):
965 """wpa_supplicant ctrl_iface BLACKLIST"""
966 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST clear" ):
967 raise Exception ( "BLACKLIST clear failed" )
968 b
= get_blacklist ( dev
[ 0 ])
970 raise Exception ( "Unexpected blacklist contents: " + str ( b
))
971 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST 00:11:22:33:44:55" ):
972 raise Exception ( "BLACKLIST add failed" )
973 b
= get_blacklist ( dev
[ 0 ])
974 if "00:11:22:33:44:55" not in b
:
975 raise Exception ( "Unexpected blacklist contents: " + str ( b
))
976 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST 00:11:22:33:44:56" ):
977 raise Exception ( "BLACKLIST add failed" )
978 b
= get_blacklist ( dev
[ 0 ])
979 if "00:11:22:33:44:55" not in b
or "00:11:22:33:44:56" not in b
:
980 raise Exception ( "Unexpected blacklist contents: " + str ( b
))
981 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST 00:11:22:33:44:56" ):
982 raise Exception ( "BLACKLIST add failed" )
983 b
= get_blacklist ( dev
[ 0 ])
984 if "00:11:22:33:44:55" not in b
or "00:11:22:33:44:56" not in b
or len ( b
) != 2 :
985 raise Exception ( "Unexpected blacklist contents: " + str ( b
))
987 if "OK" not in dev
[ 0 ]. request ( "BLACKLIST clear" ):
988 raise Exception ( "BLACKLIST clear failed" )
989 if dev
[ 0 ]. request ( "BLACKLIST" ) != "" :
990 raise Exception ( "Unexpected blacklist contents" )
992 def test_wpas_ctrl_blacklist_oom ( dev
):
993 """wpa_supplicant ctrl_iface BLACKLIST and out-of-memory"""
994 with
alloc_fail ( dev
[ 0 ], 1 , "wpa_blacklist_add" ):
995 if "FAIL" not in dev
[ 0 ]. request ( "BLACKLIST aa:bb:cc:dd:ee:ff" ):
996 raise Exception ( "Unexpected success with allocation failure" )
998 def test_wpas_ctrl_log_level ( dev
):
999 """wpa_supplicant ctrl_iface LOG_LEVEL"""
1000 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
1001 if "Current level: MSGDUMP" not in level
:
1002 raise Exception ( "Unexpected debug level(1): " + level
)
1003 if "Timestamp: 1" not in level
:
1004 raise Exception ( "Unexpected timestamp(1): " + level
)
1006 if "OK" not in dev
[ 2 ]. request ( "LOG_LEVEL MSGDUMP 0" ):
1007 raise Exception ( "LOG_LEVEL failed" )
1008 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
1009 if "Current level: MSGDUMP" not in level
:
1010 raise Exception ( "Unexpected debug level(2): " + level
)
1011 if "Timestamp: 0" not in level
:
1012 raise Exception ( "Unexpected timestamp(2): " + level
)
1014 if "OK" not in dev
[ 2 ]. request ( "LOG_LEVEL MSGDUMP 1" ):
1015 raise Exception ( "LOG_LEVEL failed" )
1016 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
1017 if "Current level: MSGDUMP" not in level
:
1018 raise Exception ( "Unexpected debug level(3): " + level
)
1019 if "Timestamp: 1" not in level
:
1020 raise Exception ( "Unexpected timestamp(3): " + level
)
1022 if "FAIL" not in dev
[ 2 ]. request ( "LOG_LEVEL FOO" ):
1023 raise Exception ( "Invalid LOG_LEVEL accepted" )
1025 for lev
in [ "EXCESSIVE" , "MSGDUMP" , "DEBUG" , "INFO" , "WARNING" , "ERROR" ]:
1026 if "OK" not in dev
[ 2 ]. request ( "LOG_LEVEL " + lev
):
1027 raise Exception ( "LOG_LEVEL failed for " + lev
)
1028 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
1029 if "Current level: " + lev
not in level
:
1030 raise Exception ( "Unexpected debug level: " + level
)
1032 if "OK" not in dev
[ 2 ]. request ( "LOG_LEVEL MSGDUMP 1" ):
1033 raise Exception ( "LOG_LEVEL failed" )
1034 level
= dev
[ 2 ]. request ( "LOG_LEVEL" )
1035 if "Current level: MSGDUMP" not in level
:
1036 raise Exception ( "Unexpected debug level(3): " + level
)
1037 if "Timestamp: 1" not in level
:
1038 raise Exception ( "Unexpected timestamp(3): " + level
)
1040 def test_wpas_ctrl_enable_disable_network ( dev
, apdev
):
1041 """wpa_supplicant ctrl_iface ENABLE/DISABLE_NETWORK"""
1042 params
= { "ssid" : "test" }
1043 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
1045 id = dev
[ 0 ]. connect ( "test" , key_mgmt
= "NONE" , scan_freq
= "2412" ,
1046 only_add_network
= True )
1047 if "OK" not in dev
[ 0 ]. request ( "DISABLE_NETWORK " + str ( id )):
1048 raise Exception ( "Failed to disable network" )
1049 if "OK" not in dev
[ 0 ]. request ( "ENABLE_NETWORK " + str ( id ) + " no-connect" ):
1050 raise Exception ( "Failed to enable network" )
1051 if "OK" not in dev
[ 0 ]. request ( "DISABLE_NETWORK all" ):
1052 raise Exception ( "Failed to disable networks" )
1053 if "OK" not in dev
[ 0 ]. request ( "ENABLE_NETWORK " + str ( id )):
1054 raise Exception ( "Failed to enable network" )
1055 dev
[ 0 ]. wait_connected ( timeout
= 10 )
1056 if "OK" not in dev
[ 0 ]. request ( "DISABLE_NETWORK " + str ( id )):
1057 raise Exception ( "Failed to disable network" )
1058 dev
[ 0 ]. wait_disconnected ( timeout
= 10 )
1061 if "OK" not in dev
[ 0 ]. request ( "ENABLE_NETWORK all" ):
1062 raise Exception ( "Failed to enable network" )
1063 dev
[ 0 ]. wait_connected ( timeout
= 10 )
1064 if "OK" not in dev
[ 0 ]. request ( "DISABLE_NETWORK all" ):
1065 raise Exception ( "Failed to disable network" )
1066 dev
[ 0 ]. wait_disconnected ( timeout
= 10 )
1068 def test_wpas_ctrl_country ( dev
, apdev
):
1069 """wpa_supplicant SET/GET country code"""
1071 # work around issues with possible pending regdom event from the end of
1072 # the previous test case
1074 dev
[ 0 ]. dump_monitor ()
1076 if "OK" not in dev
[ 0 ]. request ( "SET country FI" ):
1077 raise Exception ( "Failed to set country code" )
1078 if dev
[ 0 ]. request ( "GET country" ) != "FI" :
1079 raise Exception ( "Country code set failed" )
1080 ev
= dev
[ 0 ]. wait_global_event ([ "CTRL-EVENT-REGDOM-CHANGE" ], 10 )
1082 raise Exception ( "regdom change event not seen" )
1083 if "init=USER type=COUNTRY alpha2=FI" not in ev
:
1084 raise Exception ( "Unexpected event contents: " + ev
)
1085 dev
[ 0 ]. request ( "SET country 00" )
1086 if dev
[ 0 ]. request ( "GET country" ) != "00" :
1087 raise Exception ( "Country code set failed" )
1088 ev
= dev
[ 0 ]. wait_global_event ([ "CTRL-EVENT-REGDOM-CHANGE" ], 10 )
1090 raise Exception ( "regdom change event not seen" )
1091 if "init=CORE type=WORLD" not in ev
:
1092 raise Exception ( "Unexpected event contents: " + ev
)
1094 subprocess
. call ([ 'iw' , 'reg' , 'set' , '00' ])
1096 def test_wpas_ctrl_suspend_resume ( dev
):
1097 """wpa_supplicant SUSPEND/RESUME"""
1098 wpas
= WpaSupplicant ( global_iface
= '/tmp/wpas-wlan5' )
1099 wpas
. interface_add ( "wlan5" )
1100 if "OK" not in wpas
. global_request ( "SUSPEND" ):
1101 raise Exception ( "SUSPEND failed" )
1103 if "OK" not in wpas
. global_request ( "RESUME" ):
1104 raise Exception ( "RESUME failed" )
1105 if "OK" not in wpas
. request ( "SUSPEND" ):
1106 raise Exception ( "Per-interface SUSPEND failed" )
1107 if "OK" not in wpas
. request ( "RESUME" ):
1108 raise Exception ( "Per-interface RESUME failed" )
1109 ev
= wpas
. wait_event ([ "CTRL-EVENT-SCAN-RESULTS" ], timeout
= 10 )
1111 raise Exception ( "Scan not completed" )
1113 def test_wpas_ctrl_global ( dev
):
1114 """wpa_supplicant global control interface"""
1115 wpas
= WpaSupplicant ( global_iface
= '/tmp/wpas-wlan5' )
1116 wpas
. interface_add ( "wlan5" )
1118 if "PONG" not in wpas
. global_request ( "PING" ):
1119 raise Exception ( "PING failed" )
1120 if "wlan5" not in wpas
. global_request ( "INTERFACES" ):
1121 raise Exception ( "Interface not found" )
1122 if "UNKNOWN COMMAND" not in wpas
. global_request ( "FOO" ):
1123 raise Exception ( "Unexpected response to unknown command" )
1124 if "PONG" not in wpas
. global_request ( "IFNAME=wlan5 PING" ):
1125 raise Exception ( "Per-interface PING failed" )
1126 if "FAIL-NO-IFNAME-MATCH" not in wpas
. global_request ( "IFNAME=notfound PING" ):
1127 raise Exception ( "Unknown interface not reported correctly" )
1128 if "FAIL" not in wpas
. global_request ( "SAVE_CONFIG" ):
1129 raise Exception ( "SAVE_CONFIG succeeded unexpectedly" )
1130 if "OK" not in wpas
. global_request ( "SET wifi_display 0" ):
1131 raise Exception ( "SET failed" )
1132 if "wifi_display=0" not in wpas
. global_request ( "STATUS" ):
1133 raise Exception ( "wifi_display not disabled" )
1134 if "OK" not in wpas
. global_request ( "SET wifi_display 1" ):
1135 raise Exception ( "SET failed" )
1136 if "wifi_display=1" not in wpas
. global_request ( "STATUS" ):
1137 raise Exception ( "wifi_display not enabled" )
1138 if "FAIL" not in wpas
. global_request ( "SET foo 1" ):
1139 raise Exception ( "SET succeeded unexpectedly" )
1141 if "p2p_state=IDLE" not in wpas
. global_request ( "STATUS" ):
1142 raise Exception ( "P2P was disabled" )
1143 wpas
. global_request ( "P2P_SET disabled 1" )
1144 if "p2p_state=DISABLED" not in wpas
. global_request ( "STATUS" ):
1145 raise Exception ( "P2P was not disabled" )
1146 wpas
. global_request ( "P2P_SET disabled 0" )
1147 if "p2p_state=IDLE" not in wpas
. global_request ( "STATUS" ):
1148 raise Exception ( "P2P was not enabled" )
1150 # driver_nl80211.c does not support interface list, so do not fail because
1152 logger
. debug ( wpas
. global_request ( "INTERFACE_LIST" ))
1154 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD " ):
1155 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1156 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO" ):
1157 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1158 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf" ):
1159 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1160 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver" ):
1161 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1162 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver ctrliface" ):
1163 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1164 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver ctrliface driverparam" ):
1165 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1166 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver ctrliface driverparam bridge" ):
1167 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1168 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO conf driver ctrliface driverparam bridge foo" ):
1169 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1170 if "FAIL" not in wpas
. global_request ( "INTERFACE_ADD FOO " ):
1171 raise Exception ( "INTERFACE_ADD succeeded unexpectedly" )
1173 def test_wpas_ctrl_roam ( dev
, apdev
):
1174 """wpa_supplicant ctrl_iface ROAM error cases"""
1175 if "FAIL" not in dev
[ 0 ]. request ( "ROAM 00:11:22:33:44" ):
1176 raise Exception ( "Unexpected success" )
1177 if "FAIL" not in dev
[ 0 ]. request ( "ROAM 00:11:22:33:44:55" ):
1178 raise Exception ( "Unexpected success" )
1179 params
= { "ssid" : "test" }
1180 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
1181 id = dev
[ 0 ]. connect ( "test" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1182 if "FAIL" not in dev
[ 0 ]. request ( "ROAM 00:11:22:33:44:55" ):
1183 raise Exception ( "Unexpected success" )
1185 def test_wpas_ctrl_ipaddr ( dev
, apdev
):
1186 """wpa_supplicant IP address in STATUS"""
1188 subprocess
. call ([ 'ip' , 'addr' , 'add' , '10.174.65.207/32' , 'dev' ,
1190 ipaddr
= dev
[ 0 ]. get_status_field ( 'ip_address' )
1191 if ipaddr
!= '10.174.65.207' :
1192 raise Exception ( "IP address not in STATUS output" )
1194 subprocess
. call ([ 'ip' , 'addr' , 'del' , '10.174.65.207/32' , 'dev' ,
1197 def test_wpas_ctrl_neighbor_rep_req ( dev
, apdev
):
1198 """wpa_supplicant ctrl_iface NEIGHBOR_REP_REQUEST"""
1199 params
= { "ssid" : "test" }
1200 hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], params
)
1201 params
= { "ssid" : "test2" , "radio_measurements" : "1" }
1202 hostapd
. add_ap ( apdev
[ 1 ][ 'ifname' ], params
)
1204 dev
[ 0 ]. connect ( "test" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1205 if "FAIL" not in dev
[ 0 ]. request ( "NEIGHBOR_REP_REQUEST" ):
1206 raise Exception ( "Request succeeded unexpectedly" )
1207 if "FAIL" not in dev
[ 0 ]. request ( "NEIGHBOR_REP_REQUEST ssid=abcdef" ):
1208 raise Exception ( "Request succeeded unexpectedly" )
1209 dev
[ 0 ]. request ( "DISCONNECT" )
1211 rrm
= int ( dev
[ 0 ]. get_driver_status_field ( "capa.rrm_flags" ), 16 )
1212 if rrm
& 0x5 != 0x5 :
1213 logger
. info ( "Driver does not support required RRM capabilities - skip rest of the test case" )
1216 dev
[ 0 ]. connect ( "test2" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1218 # These requests are expected to get sent properly, but since hostapd does
1219 # not yet support processing of the request, these are expected to fail.
1221 if "OK" not in dev
[ 0 ]. request ( "NEIGHBOR_REP_REQUEST" ):
1222 raise Exception ( "Request failed" )
1223 ev
= dev
[ 0 ]. wait_event ([ "RRM-NEIGHBOR-REP-RECEIVED" ,
1224 "RRM-NEIGHBOR-REP-REQUEST-FAILED" ], timeout
= 10 )
1226 raise Exception ( "RRM report result not indicated" )
1227 logger
. info ( "RRM result: " + ev
)
1229 if "OK" not in dev
[ 0 ]. request ( "NEIGHBOR_REP_REQUEST ssid=abcdef" ):
1230 raise Exception ( "Request failed" )
1231 ev
= dev
[ 0 ]. wait_event ([ "RRM-NEIGHBOR-REP-RECEIVED" ,
1232 "RRM-NEIGHBOR-REP-REQUEST-FAILED" ], timeout
= 10 )
1234 raise Exception ( "RRM report result not indicated" )
1235 logger
. info ( "RRM result: " + ev
)
1237 def test_wpas_ctrl_rsp ( dev
, apdev
):
1238 """wpa_supplicant ctrl_iface CTRL-RSP-"""
1239 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-" ):
1240 raise Exception ( "Request succeeded unexpectedly" )
1241 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-foo-" ):
1242 raise Exception ( "Request succeeded unexpectedly" )
1243 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-foo-1234567" ):
1244 raise Exception ( "Request succeeded unexpectedly" )
1245 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-foo-1234567:" ):
1246 raise Exception ( "Request succeeded unexpectedly" )
1247 id = dev
[ 0 ]. add_network ()
1248 if "FAIL" not in dev
[ 0 ]. request ( "CTRL-RSP-foo- %d :" % id ):
1249 raise Exception ( "Request succeeded unexpectedly" )
1250 for req
in [ "IDENTITY" , "PASSWORD" , "NEW_PASSWORD" , "PIN" , "OTP" ,
1251 "PASSPHRASE" , "SIM" ]:
1252 if "OK" not in dev
[ 0 ]. request ( "CTRL-RSP- %s-%d :" % ( req
, id )):
1253 raise Exception ( "Request failed unexpectedly" )
1254 if "OK" not in dev
[ 0 ]. request ( "CTRL-RSP- %s-%d :" % ( req
, id )):
1255 raise Exception ( "Request failed unexpectedly" )
1257 def test_wpas_ctrl_vendor ( dev
, apdev
):
1258 """wpa_supplicant ctrl_iface VENDOR"""
1265 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR " + cmd
):
1266 raise Exception ( "Invalid VENDOR command accepted: " + cmd
)
1268 def test_wpas_ctrl_mgmt_tx ( dev
, apdev
):
1269 """wpa_supplicant ctrl_iface MGMT_TX"""
1271 "00:11:22:33:44:55 foo" ,
1272 "00:11:22:33:44:55 11:22:33:44:55:66" ,
1273 "00:11:22:33:44:55 11:22:33:44:55:66 freq=0 no_cck=0 wait_time=0 action=123" ,
1274 "00:11:22:33:44:55 11:22:33:44:55:66 action=12qq" ]
1276 if "FAIL" not in dev
[ 0 ]. request ( "MGMT_TX " + cmd
):
1277 raise Exception ( "Invalid MGMT_TX command accepted: " + cmd
)
1279 if "OK" not in dev
[ 0 ]. request ( "MGMT_TX_DONE" ):
1280 raise Exception ( "MGMT_TX_DONE failed" )
1282 def test_wpas_ctrl_driver_event ( dev
, apdev
):
1283 """wpa_supplicant ctrl_iface DRIVER_EVENT"""
1284 if "FAIL" not in dev
[ 0 ]. request ( "DRIVER_EVENT foo" ):
1285 raise Exception ( "Invalid DRIVER_EVENT accepted" )
1287 def test_wpas_ctrl_eapol_rx ( dev
, apdev
):
1288 """wpa_supplicant ctrl_iface EAPOL_RX"""
1290 "00:11:22:33:44:55 123" ,
1291 "00:11:22:33:44:55 12qq" ]
1293 if "FAIL" not in dev
[ 0 ]. request ( "EAPOL_RX " + cmd
):
1294 raise Exception ( "Invalid EAPOL_RX command accepted: " + cmd
)
1296 def test_wpas_ctrl_data_test ( dev
, apdev
):
1297 """wpa_supplicant ctrl_iface DATA_TEST"""
1298 dev
[ 0 ]. request ( "DATA_TEST_CONFIG 0" )
1299 if "FAIL" not in dev
[ 0 ]. request ( "DATA_TEST_TX 00:11:22:33:44:55 00:11:22:33:44:55 0" ):
1300 raise Exception ( "DATA_TEST_TX accepted when not in test mode" )
1303 if "OK" not in dev
[ 0 ]. request ( "DATA_TEST_CONFIG 1" ):
1304 raise Exception ( "DATA_TEST_CONFIG failed" )
1305 if "OK" not in dev
[ 0 ]. request ( "DATA_TEST_CONFIG 1" ):
1306 raise Exception ( "DATA_TEST_CONFIG failed" )
1308 "00:11:22:33:44:55 foo" ,
1309 "00:11:22:33:44:55 00:11:22:33:44:55 -1" ,
1310 "00:11:22:33:44:55 00:11:22:33:44:55 256" ]
1312 if "FAIL" not in dev
[ 0 ]. request ( "DATA_TEST_TX " + cmd
):
1313 raise Exception ( "Invalid DATA_TEST_TX command accepted: " + cmd
)
1314 if "OK" not in dev
[ 0 ]. request ( "DATA_TEST_TX 00:11:22:33:44:55 00:11:22:33:44:55 0" ):
1315 raise Exception ( "DATA_TEST_TX failed" )
1317 dev
[ 0 ]. request ( "DATA_TEST_CONFIG 0" )
1321 "00112233445566778899aabbccdde" ,
1322 "00112233445566778899aabbccdq" ]
1324 if "FAIL" not in dev
[ 0 ]. request ( "DATA_TEST_FRAME " + cmd
):
1325 raise Exception ( "Invalid DATA_TEST_FRAME command accepted: " + cmd
)
1327 if "OK" not in dev
[ 0 ]. request ( "DATA_TEST_FRAME 00112233445566778899aabbccddee" ):
1328 raise Exception ( "DATA_TEST_FRAME failed" )
1330 def test_wpas_ctrl_vendor_elem ( dev
, apdev
):
1331 """wpa_supplicant ctrl_iface VENDOR_ELEM"""
1332 if "OK" not in dev
[ 0 ]. request ( "VENDOR_ELEM_ADD 1 " ):
1333 raise Exception ( "VENDOR_ELEM_ADD failed" )
1340 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR_ELEM_ADD " + cmd
):
1341 raise Exception ( "Invalid VENDOR_ELEM_ADD command accepted: " + cmd
)
1346 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR_ELEM_GET " + cmd
):
1347 raise Exception ( "Invalid VENDOR_ELEM_GET command accepted: " + cmd
)
1349 dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE 1 *" )
1359 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE " + cmd
):
1360 raise Exception ( "Invalid VENDOR_ELEM_REMOVE command accepted: " + cmd
)
1362 dev
[ 0 ]. request ( "VENDOR_ELEM_ADD 1 000100" )
1363 if "OK" not in dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE 1 " ):
1364 raise Exception ( "VENDOR_ELEM_REMOVE failed" )
1373 if "FAIL" not in dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE " + cmd
):
1374 raise Exception ( "Invalid VENDOR_ELEM_REMOVE command accepted: " + cmd
)
1375 if "OK" not in dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE 1 000100" ):
1376 raise Exception ( "VENDOR_ELEM_REMOVE failed" )
1378 def test_wpas_ctrl_misc ( dev
, apdev
):
1379 """wpa_supplicant ctrl_iface and miscellaneous commands"""
1380 if "OK" not in dev
[ 0 ]. request ( "RELOG" ):
1381 raise Exception ( "RELOG failed" )
1382 if dev
[ 0 ]. request ( "IFNAME" ) != dev
[ 0 ]. ifname
:
1383 raise Exception ( "IFNAME returned unexpected response" )
1384 if "FAIL" not in dev
[ 0 ]. request ( "REATTACH" ):
1385 raise Exception ( "REATTACH accepted while disabled" )
1386 if "OK" not in dev
[ 2 ]. request ( "RECONFIGURE" ):
1387 raise Exception ( "RECONFIGURE failed" )
1388 if "FAIL" in dev
[ 0 ]. request ( "INTERFACE_LIST" ):
1389 raise Exception ( "INTERFACE_LIST failed" )
1390 if "UNKNOWN COMMAND" not in dev
[ 0 ]. request ( "FOO" ):
1391 raise Exception ( "Unknown command accepted" )
1393 if "FAIL" not in dev
[ 0 ]. global_request ( "INTERFACE_REMOVE foo" ):
1394 raise Exception ( "Invalid INTERFACE_REMOVE accepted" )
1395 if "FAIL" not in dev
[ 0 ]. global_request ( "SET foo" ):
1396 raise Exception ( "Invalid global SET accepted" )
1398 def test_wpas_ctrl_dump ( dev
, apdev
):
1399 """wpa_supplicant ctrl_iface and DUMP/GET global parameters"""
1400 vals
= dev
[ 0 ]. get_config ()
1401 logger
. info ( "Config values from DUMP: " + str ( vals
))
1403 res
= dev
[ 0 ]. request ( "GET " + field
)
1406 if res
!= vals
[ field
]:
1407 print "'{}' != '{}'" . format ( res
, vals
[ field
])
1408 raise Exception ( "Mismatch in config field " + field
)
1409 if "beacon_int" not in vals
:
1410 raise Exception ( "Missing config field" )
1412 def test_wpas_ctrl_interface_add ( dev
, apdev
):
1413 """wpa_supplicant INTERFACE_ADD/REMOVE with vif creation/removal"""
1414 hapd
= hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], { "ssid" : "open" })
1415 dev
[ 0 ]. connect ( "open" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1416 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1418 ifname
= "test-" + dev
[ 0 ]. ifname
1419 dev
[ 0 ]. interface_add ( ifname
, create
= True )
1420 wpas
= WpaSupplicant ( ifname
= ifname
)
1421 wpas
. connect ( "open" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1422 hwsim_utils
. test_connectivity ( wpas
, hapd
)
1423 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1424 dev
[ 0 ]. global_request ( "INTERFACE_REMOVE " + ifname
)
1425 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1427 def test_wpas_ctrl_interface_add_many ( dev
, apdev
):
1428 """wpa_supplicant INTERFACE_ADD/REMOVE with vif creation/removal (many)"""
1430 _test_wpas_ctrl_interface_add_many ( dev
, apdev
)
1433 ifname
= "test %d- " % i
+ dev
[ 0 ]. ifname
1434 dev
[ 0 ]. global_request ( "INTERFACE_REMOVE " + ifname
)
1436 def _test_wpas_ctrl_interface_add_many ( dev
, apdev
):
1437 hapd
= hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], { "ssid" : "open" })
1438 dev
[ 0 ]. connect ( "open" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1439 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1440 dev
[ 0 ]. dump_monitor ()
1444 ifname
= "test %d- " % i
+ dev
[ 0 ]. ifname
1445 dev
[ 0 ]. interface_add ( ifname
, create
= True )
1446 wpas
= WpaSupplicant ( ifname
= ifname
)
1447 wpas
. connect ( "open" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1450 dev
[ 0 ]. dump_monitor ()
1453 hwsim_utils
. test_connectivity ( wpas
, hapd
)
1455 dev
[ 0 ]. dump_monitor ()
1457 def test_wpas_ctrl_interface_add2 ( dev
, apdev
):
1458 """wpa_supplicant INTERFACE_ADD/REMOVE with vif without creation/removal"""
1459 ifname
= "test-ext-" + dev
[ 0 ]. ifname
1461 _test_wpas_ctrl_interface_add2 ( dev
, apdev
, ifname
)
1463 subprocess
. call ([ 'iw' , 'dev' , ifname
, 'del' ])
1465 def _test_wpas_ctrl_interface_add2 ( dev
, apdev
, ifname
):
1466 hapd
= hostapd
. add_ap ( apdev
[ 0 ][ 'ifname' ], { "ssid" : "open" })
1467 dev
[ 0 ]. connect ( "open" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1468 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1470 subprocess
. call ([ 'iw' , 'dev' , dev
[ 0 ]. ifname
, 'interface' , 'add' , ifname
,
1472 dev
[ 0 ]. interface_add ( ifname
, set_ifname
= False , all_params
= True )
1473 wpas
= WpaSupplicant ( ifname
= ifname
)
1474 wpas
. connect ( "open" , key_mgmt
= "NONE" , scan_freq
= "2412" )
1475 hwsim_utils
. test_connectivity ( wpas
, hapd
)
1476 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1478 dev
[ 0 ]. global_request ( "INTERFACE_REMOVE " + ifname
)
1479 hwsim_utils
. test_connectivity ( dev
[ 0 ], hapd
)
1481 def test_wpas_ctrl_wait ( dev
, apdev
, test_params
):
1482 """wpa_supplicant control interface wait for client"""
1483 logfile
= os
. path
. join ( test_params
[ 'logdir' ], 'wpas_ctrl_wait.log-wpas' )
1484 pidfile
= os
. path
. join ( test_params
[ 'logdir' ], 'wpas_ctrl_wait.pid-wpas' )
1485 conffile
= os
. path
. join ( test_params
[ 'logdir' ], 'wpas_ctrl_wait.conf' )
1486 with
open ( conffile
, 'w' ) as f
:
1487 f
. write ( "ctrl_interface=DIR=/var/run/wpa_supplicant \n " )
1489 prg
= os
. path
. join ( test_params
[ 'logdir' ],
1490 'alt-wpa_supplicant/wpa_supplicant/wpa_supplicant' )
1491 if not os
. path
. exists ( prg
):
1492 prg
= '../../wpa_supplicant/wpa_supplicant'
1494 cmd
= subprocess
. Popen ( arg
, stdout
= subprocess
. PIPE
)
1495 out
= cmd
. communicate ()[ 0 ]
1497 tracing
= "Linux tracing" in out
1499 with
HWSimRadio () as ( radio
, iface
):
1500 arg
= [ prg
, '-BdddW' , '-P' , pidfile
, '-f' , logfile
,
1501 '-Dnl80211' , '-c' , conffile
, '-i' , iface
]
1504 logger
. info ( "Start wpa_supplicant: " + str ( arg
))
1505 subprocess
. call ( arg
)
1506 wpas
= WpaSupplicant ( ifname
= iface
)
1507 if "PONG" not in wpas
. request ( "PING" ):
1508 raise Exception ( "Could not PING wpa_supplicant" )
1509 if not os
. path
. exists ( pidfile
):
1510 raise Exception ( "PID file not created" )
1511 if "OK" not in wpas
. request ( "TERMINATE" ):
1512 raise Exception ( "Could not TERMINATE" )
1513 ev
= wpas
. wait_event ([ "CTRL-EVENT-TERMINATING" ], timeout
= 2 )
1515 raise Exception ( "No termination event received" )
1517 if not os
. path
. exists ( pidfile
):
1520 if os
. path
. exists ( pidfile
):
1521 raise Exception ( "PID file not removed" )
1523 def test_wpas_ctrl_oom ( dev
):
1524 """Various wpa_supplicant ctrl_iface OOM cases"""
1526 _test_wpas_ctrl_oom ( dev
)
1528 dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE 1 *" )
1529 dev
[ 0 ]. request ( "VENDOR_ELEM_REMOVE 2 *" )
1530 dev
[ 0 ]. request ( "SET bssid_filter " )
1532 def _test_wpas_ctrl_oom ( dev
):
1533 dev
[ 0 ]. request ( 'VENDOR_ELEM_ADD 2 000100' )
1534 tests
= [ ( 'DRIVER_EVENT AVOID_FREQUENCIES 2412' , 'FAIL' ,
1535 1 , 'freq_range_list_parse' ),
1536 ( 'P2P_SET disallow_freq 2412' , 'FAIL' ,
1537 1 , 'freq_range_list_parse' ),
1538 ( 'SCAN freq=2412' , 'FAIL' ,
1539 1 , 'freq_range_list_parse' ),
1540 ( 'INTERWORKING_SELECT freq=2412' , 'FAIL' ,
1541 1 , 'freq_range_list_parse' ),
1542 ( 'SCAN ssid 112233' , 'FAIL' ,
1543 1 , 'wpas_ctrl_scan' ),
1544 ( 'MGMT_TX 00:00:00:00:00:00 00:00:00:00:00:00 action=00' , 'FAIL' ,
1545 1 , 'wpas_ctrl_iface_mgmt_tx' ),
1546 ( 'EAPOL_RX 00:00:00:00:00:00 00' , 'FAIL' ,
1547 1 , 'wpas_ctrl_iface_eapol_rx' ),
1548 ( 'DATA_TEST_FRAME 00112233445566778899aabbccddee' , 'FAIL' ,
1549 1 , 'wpas_ctrl_iface_data_test_frame' ),
1550 ( 'DATA_TEST_FRAME 00112233445566778899aabbccddee' , 'FAIL' ,
1551 1 , 'l2_packet_init;wpas_ctrl_iface_data_test_frame' ),
1552 ( 'VENDOR_ELEM_ADD 1 000100' , 'FAIL' ,
1553 1 , 'wpas_ctrl_vendor_elem_add' ),
1554 ( 'VENDOR_ELEM_ADD 2 000100' , 'FAIL' ,
1555 2 , 'wpas_ctrl_vendor_elem_add' ),
1556 ( 'VENDOR_ELEM_REMOVE 2 000100' , 'FAIL' ,
1557 1 , 'wpas_ctrl_vendor_elem_remove' ),
1558 ( 'SET bssid_filter 00:11:22:33:44:55' , 'FAIL' ,
1559 1 , 'set_bssid_filter' ),
1560 ( 'SET disallow_aps bssid 00:11:22:33:44:55' , 'FAIL' ,
1561 1 , 'set_disallow_aps' ),
1562 ( 'SET disallow_aps ssid 11' , 'FAIL' ,
1563 1 , 'set_disallow_aps' ),
1564 ( 'SET blob foo 0011' , 'FAIL' ,
1565 1 , 'wpas_ctrl_set_blob' ),
1566 ( 'SET blob foo 0011' , 'FAIL' ,
1567 2 , 'wpas_ctrl_set_blob' ),
1568 ( 'SET blob foo 0011' , 'FAIL' ,
1569 3 , 'wpas_ctrl_set_blob' ),
1570 ( 'WPS_NFC_TAG_READ 00' , 'FAIL' ,
1571 1 , 'wpa_supplicant_ctrl_iface_wps_nfc_tag_read' ),
1572 ( 'WPS_NFC_TOKEN NDEF' , 'FAIL' ,
1573 1 , 'wpa_supplicant_ctrl_iface_wps_nfc_token' ),
1574 ( 'WPS_NFC_TOKEN NDEF' , 'FAIL' ,
1575 2 , 'wpa_supplicant_ctrl_iface_wps_nfc_token' ),
1576 ( 'WPS_NFC_TOKEN NDEF' , 'FAIL' ,
1577 3 , 'wpa_supplicant_ctrl_iface_wps_nfc_token' ),
1578 ( 'WPS_NFC_TOKEN NDEF' , 'FAIL' ,
1579 4 , 'wpa_supplicant_ctrl_iface_wps_nfc_token' ),
1580 ( 'WPS_NFC_TOKEN NDEF' , 'FAIL' ,
1581 5 , 'wpa_supplicant_ctrl_iface_wps_nfc_token' ),
1582 ( 'NFC_REPORT_HANDOVER ROLE TYPE 00 00' , 'FAIL' ,
1583 1 , 'wpas_ctrl_nfc_report_handover' ),
1584 ( 'NFC_REPORT_HANDOVER ROLE TYPE 00 00' , 'FAIL' ,
1585 2 , 'wpas_ctrl_nfc_report_handover' ),
1586 ( 'NFC_GET_HANDOVER_REQ NDEF WPS-CR' , 'FAIL' ,
1587 1 , 'wps_build_nfc_handover_req' ),
1588 ( 'NFC_GET_HANDOVER_REQ NDEF WPS-CR' , 'FAIL' ,
1589 1 , 'ndef_build_record' ),
1590 ( 'NFC_GET_HANDOVER_REQ NDEF P2P-CR' , None ,
1591 1 , 'wpas_p2p_nfc_handover' ),
1592 ( 'NFC_GET_HANDOVER_REQ NDEF P2P-CR' , 'FAIL' ,
1593 2 , 'wpas_p2p_nfc_handover' ),
1594 ( 'NFC_GET_HANDOVER_REQ NDEF P2P-CR' , None ,
1595 1 , 'wps_build_nfc_handover_req_p2p' ),
1596 ( 'NFC_GET_HANDOVER_REQ NDEF P2P-CR' , 'FAIL' ,
1597 1 , 'ndef_build_record' ),
1598 ( 'NFC_GET_HANDOVER_SEL NDEF P2P-CR-TAG' , None ,
1599 1 , 'wpas_ctrl_nfc_get_handover_sel_p2p' ),
1600 ( 'NFC_GET_HANDOVER_SEL NDEF P2P-CR' , None ,
1601 1 , 'wpas_ctrl_nfc_get_handover_sel_p2p' ),
1602 ( 'NFC_GET_HANDOVER_SEL NDEF P2P-CR-TAG' , 'FAIL' ,
1603 2 , 'wpas_ctrl_nfc_get_handover_sel_p2p' ),
1604 ( 'NFC_GET_HANDOVER_SEL NDEF P2P-CR' , 'FAIL' ,
1605 2 , 'wpas_ctrl_nfc_get_handover_sel_p2p' ),
1606 ( 'NFC_GET_HANDOVER_SEL NDEF P2P-CR-TAG' , 'FAIL' ,
1607 3 , 'wpas_ctrl_nfc_get_handover_sel_p2p' ),
1608 ( 'NFC_GET_HANDOVER_SEL NDEF P2P-CR' , 'FAIL' ,
1609 3 , 'wpas_ctrl_nfc_get_handover_sel_p2p' ),
1610 ( 'NFC_GET_HANDOVER_SEL NDEF P2P-CR-TAG' , 'FAIL' ,
1611 4 , 'wpas_ctrl_nfc_get_handover_sel_p2p' ),
1612 ( 'NFC_GET_HANDOVER_SEL NDEF P2P-CR' , 'FAIL' ,
1613 4 , 'wpas_ctrl_nfc_get_handover_sel_p2p' ),
1614 ( 'P2P_ASP_PROVISION_RESP 00:11:22:33:44:55 id=1' , 'FAIL' ,
1615 1 , 'p2p_parse_asp_provision_cmd' ),
1616 ( 'P2P_SERV_DISC_REQ 00:11:22:33:44:55 02000001' , 'FAIL' ,
1617 1 , 'p2p_ctrl_serv_disc_req' ),
1618 ( 'P2P_SERV_DISC_RESP 2412 00:11:22:33:44:55 1 00' , 'FAIL' ,
1619 1 , 'p2p_ctrl_serv_disc_resp' ),
1620 ( 'P2P_SERVICE_ADD bonjour 0b5f6166706f766572746370c00c000c01 074578616d706c65c027' ,
1622 1 , 'p2p_ctrl_service_add_bonjour' ),
1623 ( 'P2P_SERVICE_ADD bonjour 0b5f6166706f766572746370c00c000c01 074578616d706c65c027' ,
1625 2 , 'p2p_ctrl_service_add_bonjour' ),
1626 ( 'P2P_SERVICE_ADD bonjour 0b5f6166706f766572746370c00c000c01 074578616d706c65c027' ,
1628 3 , 'p2p_ctrl_service_add_bonjour' ),
1629 ( 'P2P_SERVICE_DEL bonjour 0b5f6166706f766572746370c00c000c01' ,
1631 1 , 'p2p_ctrl_service_del_bonjour' ),
1632 ( 'GAS_REQUEST 00:11:22:33:44:55 00' , 'FAIL' ,
1634 ( 'GAS_REQUEST 00:11:22:33:44:55 00 11' , 'FAIL' ,
1636 ( 'HS20_GET_NAI_HOME_REALM_LIST 00:11:22:33:44:55 realm=example.com' ,
1638 1 , 'hs20_nai_home_realm_list' ),
1639 ( 'HS20_GET_NAI_HOME_REALM_LIST 00:11:22:33:44:55 00' ,
1641 1 , 'hs20_get_nai_home_realm_list' ),
1642 ( 'WNM_SLEEP enter tfs_req=11' , 'FAIL' ,
1643 1 , 'wpas_ctrl_iface_wnm_sleep' ),
1644 ( 'WNM_SLEEP enter tfs_req=11' , 'FAIL' ,
1645 2 , 'wpas_ctrl_iface_wnm_sleep' ),
1646 ( 'WNM_SLEEP enter tfs_req=11' , 'FAIL' ,
1647 3 , 'wpas_ctrl_iface_wnm_sleep' ),
1648 ( 'WNM_SLEEP enter tfs_req=11' , 'FAIL' ,
1649 4 , 'wpas_ctrl_iface_wnm_sleep' ),
1650 ( 'WNM_SLEEP enter tfs_req=11' , 'FAIL' ,
1651 5 , 'wpas_ctrl_iface_wnm_sleep' ),
1652 ( 'WNM_SLEEP enter' , 'FAIL' ,
1653 3 , 'wpas_ctrl_iface_wnm_sleep' ),
1654 ( 'VENDOR 1 1 00' , 'FAIL' ,
1655 1 , 'wpa_supplicant_vendor_cmd' ),
1656 ( 'VENDOR 1 1 00' , 'FAIL' ,
1657 2 , 'wpa_supplicant_vendor_cmd' ),
1658 ( 'RADIO_WORK add test' , 'FAIL' ,
1659 1 , 'wpas_ctrl_radio_work_add' ),
1660 ( 'RADIO_WORK add test' , 'FAIL' ,
1661 2 , 'wpas_ctrl_radio_work_add' ),
1662 ( 'AUTOSCAN periodic:1' , 'FAIL' ,
1663 1 , 'wpa_supplicant_ctrl_iface_autoscan' ),
1665 1 , 'wpa_supplicant_ctrl_iface_process' ) ]
1666 for cmd
, exp
, count
, func
in tests
:
1667 with
alloc_fail ( dev
[ 0 ], count
, func
):
1668 res
= dev
[ 0 ]. request ( cmd
)
1669 if exp
and exp
not in res
:
1670 raise Exception ( "Unexpected success for ' %s ' during OOM" % cmd
)
1672 tests
= [ ( 'FOO' , None ,
1673 1 , 'wpa_supplicant_global_ctrl_iface_process' ),
1674 ( 'IFNAME=notfound PING' , 'FAIL \n ' ,
1675 1 , 'wpas_global_ctrl_iface_ifname' ) ]
1676 for cmd
, exp
, count
, func
in tests
:
1677 with
alloc_fail ( dev
[ 0 ], count
, func
):
1678 res
= dev
[ 0 ]. global_request ( cmd
)
1679 if exp
and exp
not in res
:
1680 raise Exception ( "Unexpected success for ' %s ' during OOM" % cmd
)
1682 def test_wpas_ctrl_socket_full ( dev
, apdev
, test_params
):
1683 """wpa_supplicant control socket and full send buffer"""
1684 if not dev
[ 0 ]. ping ():
1685 raise Exception ( "Could not ping wpa_supplicant at the beginning of the test" )
1690 s
= socket
. socket ( socket
. AF_UNIX
, socket
. SOCK_DGRAM
)
1691 local
= "/tmp/wpa_ctrl_test_ %d-%d " % ( os
. getpid (), counter
)
1694 s
. connect ( "/var/run/wpa_supplicant/wlan0" )
1696 logger
. debug ( "Command %d " % i
)
1699 except Exception , e
:
1700 logger
. info ( "Could not send command %d : %s " % ( i
, str ( e
)))
1702 # Close without receiving response
1705 if not dev
[ 0 ]. ping ():
1706 raise Exception ( "Could not ping wpa_supplicant in the middle of the test" )
1709 s2
= socket
. socket ( socket
. AF_UNIX
, socket
. SOCK_DGRAM
)
1710 local2
= "/tmp/wpa_ctrl_test_ %d-%d " % ( os
. getpid (), counter
)
1713 s2
. connect ( "/var/run/wpa_supplicant/wlan0" )
1715 logger
. debug ( "Command %d [2]" % i
)
1718 except Exception , e
:
1719 logger
. info ( "Could not send command %d [2]: %s " % ( i
, str ( e
)))
1721 # Close without receiving response
1728 logger
. debug ( "Command %d [3]" % i
)
1731 except Exception , e
:
1732 logger
. info ( "Could not send command %d [3]: %s " % ( i
, str ( e
)))
1734 # Close without receiving response
1740 if not dev
[ 0 ]. ping ():
1741 raise Exception ( "Could not ping wpa_supplicant in the middle of the test [2]" )
1744 s
= socket
. socket ( socket
. AF_UNIX
, socket
. SOCK_DGRAM
)
1745 local
= "/tmp/wpa_ctrl_test_ %d-%d " % ( os
. getpid (), counter
)
1748 s
. connect ( "/var/run/wpa_supplicant/wlan0" )
1752 raise Exception ( "Could not attach a test socket" )
1755 dev
[ 0 ]. scan ( freq
= 2412 )
1761 dev
[ 0 ]. scan ( freq
= 2412 )
1763 if not dev
[ 0 ]. ping ():
1764 raise Exception ( "Could not ping wpa_supplicant at the end of the test" )
1767 def test_wpas_ctrl_event_burst ( dev
, apdev
):
1768 """wpa_supplicant control socket and event burst"""
1769 if "OK" not in dev
[ 0 ]. request ( "EVENT_TEST 1000" ):
1770 raise Exception ( "Could not request event messages" )
1774 for i
in range ( 100 ):
1775 ( i
, g
) = dev
[ 0 ]. dump_monitor ()
1778 logger
. info ( "Received i= %d g= %d " % ( i
, g
))
1779 if total_i
>= 1000 and total_g
>= 1000 :
1784 raise Exception ( "Some per-interface events not seen: %d " % total_i
)
1786 raise Exception ( "Some global events not seen: %d " % total_g
)
1788 if not dev
[ 0 ]. ping ():
1789 raise Exception ( "Could not ping wpa_supplicant at the end of the test" )