1# 2# Copyright 2017 - The Android Open Source Project 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15 16import time 17from acts import asserts 18from acts import utils 19from acts import signals 20from acts.keys import Config 21from acts.test_decorators import test_tracker_info 22from acts_contrib.test_utils.net import connectivity_const as cconsts 23from acts_contrib.test_utils.wifi import wifi_test_utils as wutils 24from acts_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest 25from acts_contrib.test_utils.wifi.aware import aware_test_utils as autils 26from acts.controllers.openwrt_lib.openwrt_constants import OpenWrtWifiSetting 27import os 28 29WifiEnums = wutils.WifiEnums 30 31 32class WifiRoamingTest(WifiBaseTest): 33 34 def setup_class(self): 35 """Configure the required networks for testing roaming.""" 36 super().setup_class() 37 38 self.dut = self.android_devices[0] 39 self.dut_client = self.android_devices[1] 40 req_params = ["roaming_attn", "sae_roaming_unspported_list"] 41 self.unpack_userparams(req_param_names=req_params,) 42 self.country_code = wutils.WifiEnums.CountryCode.US 43 if hasattr(self, "country_code_file"): 44 if isinstance(self.country_code_file, list): 45 self.country_code_file = self.country_code_file[0] 46 if not os.path.isfile(self.country_code_file): 47 self.country_code_file = os.path.join( 48 self.user_params[Config.key_config_path.value], 49 self.country_code_file) 50 self.country_code = utils.load_config( 51 self.country_code_file)["country"] 52 53 if "AccessPoint" in self.user_params: 54 self.legacy_configure_ap_and_start(ap_count=2) 55 56 def teardown_class(self): 57 self.dut.ed.clear_all_events() 58 if "AccessPoint" in self.user_params: 59 del self.user_params["reference_networks"] 60 del self.user_params["open_network"] 61 62 def setup_test(self): 63 super().setup_test() 64 self.dut.ed.clear_all_events() 65 self.dut.droid.wakeLockAcquireBright() 66 self.dut.droid.wakeUpNow() 67 asserts.skip_if("sae" in self.test_name and 68 self.dut.model in self.sae_roaming_unspported_list, 69 "%s doesn't support wpa3 roaming." % self.dut.model) 70 71 def teardown_test(self): 72 super().teardown_test() 73 self.dut.droid.wakeLockRelease() 74 self.dut.droid.goToSleepNow() 75 wutils.reset_wifi(self.dut) 76 wutils.set_attns(self.attenuators, "default") 77 for ad in self.android_devices: 78 wutils.set_wifi_country_code(ad, self.country_code) 79 if "OpenWrtAP" in self.user_params: 80 for ap in self.access_points: 81 ap.close() 82 83 ### Helper Methods ### 84 85 def register_network_callback_for_internet(self): 86 self.dut.log.debug("Registering network callback for wifi internet" 87 "connectivity") 88 network_request = { 89 cconsts.NETWORK_CAP_TRANSPORT_TYPE_KEY : 90 cconsts.NETWORK_CAP_TRANSPORT_WIFI, 91 cconsts.NETWORK_CAP_CAPABILITY_KEY : 92 [cconsts.NETWORK_CAP_CAPABILITY_INTERNET] 93 } 94 key = self.dut.droid.connectivityRegisterNetworkCallback(network_request) 95 return key 96 97 def generate_wifi_info(self, network): 98 return { 99 WifiEnums.SSID_KEY : network[WifiEnums.SSID_KEY], 100 # We need to use "BSSID" in WifiInfo map, also need to use lower 101 # chars for bssid. 102 WifiEnums.BSSID_KEY : network["bssid"].lower() 103 } 104 105 def roaming_from_AP1_and_AP2(self, AP1_network, AP2_network): 106 """Test roaming between two APs. 107 108 Args: 109 AP1_network: AP-1's network information. 110 AP2_network: AP-2's network information. 111 112 Steps: 113 1. Make AP1 visible, AP2 not visible. 114 2. Connect to AP1's ssid. 115 3. Make AP1 not visible, AP2 visible. 116 4. Expect DUT to roam to AP2. 117 5. Validate connection information and ping. 118 """ 119 network_cb_key = None 120 if self.dut.droid.isSdkAtLeastS(): 121 network_cb_key = self.register_network_callback_for_internet() 122 wutils.set_attns(self.attenuators, "AP1_on_AP2_off", self.roaming_attn) 123 wifi_config = AP1_network.copy() 124 wifi_config.pop("bssid") 125 wutils.connect_to_wifi_network(self.dut, wifi_config) 126 if network_cb_key is not None: 127 self.dut.log.info("Waiting for onAvailable and " 128 "onCapabilitiesChanged after connection") 129 # Ensure that the connection completed and we got the ON_AVAILABLE 130 # callback. 131 autils.wait_for_event_with_keys( 132 self.dut, 133 cconsts.EVENT_NETWORK_CALLBACK, 134 20, 135 (cconsts.NETWORK_CB_KEY_ID, network_cb_key), 136 (cconsts.NETWORK_CB_KEY_EVENT, cconsts.NETWORK_CB_AVAILABLE)) 137 autils.wait_for_event_with_keys( 138 self.dut, cconsts.EVENT_NETWORK_CALLBACK, 10, 139 (cconsts.NETWORK_CB_KEY_ID, network_cb_key), 140 (cconsts.NETWORK_CB_KEY_EVENT, 141 cconsts.NETWORK_CB_CAPABILITIES_CHANGED), 142 (cconsts.NETWORK_CB_KEY_TRANSPORT_INFO, 143 self.generate_wifi_info(AP1_network))) 144 self.log.info("Roaming from %s to %s", AP1_network, AP2_network) 145 wutils.trigger_roaming_and_validate( 146 self.dut, self.attenuators, "AP1_off_AP2_on", AP2_network, 147 self.roaming_attn) 148 if network_cb_key is not None: 149 self.dut.log.info("Waiting for onCapabilitiesChanged after" 150 " roaming") 151 # Ensure that the roaming complete triggered a capabilities change 152 # with the new bssid. 153 autils.wait_for_event_with_keys( 154 self.dut, cconsts.EVENT_NETWORK_CALLBACK, 10, 155 (cconsts.NETWORK_CB_KEY_ID, network_cb_key), 156 (cconsts.NETWORK_CB_KEY_EVENT, 157 cconsts.NETWORK_CB_CAPABILITIES_CHANGED), 158 (cconsts.NETWORK_CB_KEY_TRANSPORT_INFO, 159 self.generate_wifi_info(AP2_network))) 160 161 ### Test Cases ### 162 163 @test_tracker_info(uuid="db8a46f9-713f-4b98-8d9f-d36319905b0a") 164 def test_roaming_between_AP1_to_AP2_open_2g(self): 165 if "OpenWrtAP" in self.user_params: 166 self.configure_openwrt_ap_and_start(open_network=True, 167 ap_count=2, 168 mirror_ap=True) 169 self.log.info("BSSID map: %s" % self.bssid_map) 170 ap1_network = self.open_network[0]["2g"] 171 ap2_network = self.open_network[1]["2g"] 172 if "OpenWrtAP" in self.user_params: 173 ap1_network["bssid"] = self.bssid_map[0]["2g"][ap1_network["SSID"]] 174 ap2_network["bssid"] = self.bssid_map[1]["2g"][ap2_network["SSID"]] 175 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 176 177 @test_tracker_info(uuid="0db67d9b-6ea9-4f40-acf2-155c4ecf9dc5") 178 def test_roaming_between_AP1_to_AP2_open_5g(self): 179 if "OpenWrtAP" in self.user_params: 180 self.configure_openwrt_ap_and_start(open_network=True, 181 ap_count=2, 182 mirror_ap=True) 183 ap1_network = self.open_network[0]["5g"] 184 ap2_network = self.open_network[1]["5g"] 185 if "OpenWrtAP" in self.user_params: 186 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 187 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 188 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 189 190 @test_tracker_info(uuid="eabc7319-d962-4bef-b679-725e9ff00420") 191 def test_roaming_between_AP1_to_AP2_psk_2g(self): 192 if "OpenWrtAP" in self.user_params: 193 self.configure_openwrt_ap_and_start(wpa_network=True, 194 ap_count=2, 195 mirror_ap=True) 196 ap1_network = self.reference_networks[0]["2g"] 197 ap2_network = self.reference_networks[1]["2g"] 198 if "OpenWrtAP" in self.user_params: 199 ap1_network["bssid"] = self.bssid_map[0]["2g"][ap1_network["SSID"]] 200 ap2_network["bssid"] = self.bssid_map[1]["2g"][ap2_network["SSID"]] 201 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 202 203 @test_tracker_info(uuid="1cf9c681-4ff0-45c1-9719-f01629f6a7f7") 204 def test_roaming_between_AP1_to_AP2_psk_5g(self): 205 if "OpenWrtAP" in self.user_params: 206 self.configure_openwrt_ap_and_start(wpa_network=True, 207 ap_count=2, 208 mirror_ap=True) 209 ap1_network = self.reference_networks[0]["5g"] 210 ap2_network = self.reference_networks[1]["5g"] 211 if "OpenWrtAP" in self.user_params: 212 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 213 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 214 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 215 216 @test_tracker_info(uuid="a28f7d2e-fae4-4e66-b633-7ee59f8b46e0") 217 def test_roaming_between_AP1_to_AP2_owe_2g(self): 218 if "OpenWrtAP" in self.user_params: 219 self.configure_openwrt_ap_and_start(owe_network=True, 220 ap_count=2, 221 mirror_ap=True) 222 ap1_network = self.owe_networks[0]["2g"] 223 ap2_network = self.owe_networks[1]["2g"] 224 if "OpenWrtAP" in self.user_params: 225 ap1_network["bssid"] = self.bssid_map[0]["2g"][ap1_network["SSID"]] 226 ap2_network["bssid"] = self.bssid_map[1]["2g"][ap2_network["SSID"]] 227 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 228 229 @test_tracker_info(uuid="3c39110a-9336-4abd-b885-acbba85dc10d") 230 def test_roaming_between_AP1_to_AP2_owe_5g(self): 231 if "OpenWrtAP" in self.user_params: 232 self.configure_openwrt_ap_and_start(owe_network=True, 233 ap_count=2, 234 mirror_ap=True) 235 ap1_network = self.owe_networks[0]["5g"] 236 ap2_network = self.owe_networks[1]["5g"] 237 if "OpenWrtAP" in self.user_params: 238 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 239 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 240 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 241 242 @test_tracker_info(uuid="68b2baf6-162a-44f2-a00d-4973e5ac9471") 243 def test_roaming_between_AP1_to_AP2_sae_2g(self): 244 if "OpenWrtAP" in self.user_params: 245 self.configure_openwrt_ap_and_start(sae_network=True, 246 ap_count=2, 247 mirror_ap=True) 248 ap1_network = self.sae_networks[0]["2g"] 249 ap2_network = self.sae_networks[1]["2g"] 250 if "OpenWrtAP" in self.user_params: 251 ap1_network["bssid"] = self.bssid_map[0]["2g"][ap1_network["SSID"]] 252 ap2_network["bssid"] = self.bssid_map[1]["2g"][ap2_network["SSID"]] 253 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 254 255 @test_tracker_info(uuid="20e24ed3-0cd1-46dd-bd26-2183ffb443e6") 256 def test_roaming_between_AP1_to_AP2_sae_5g(self): 257 if "OpenWrtAP" in self.user_params: 258 self.configure_openwrt_ap_and_start(sae_network=True, 259 ap_count=2, 260 mirror_ap=True) 261 ap1_network = self.sae_networks[0]["5g"] 262 ap2_network = self.sae_networks[1]["5g"] 263 if "OpenWrtAP" in self.user_params: 264 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 265 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 266 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 267 268 @test_tracker_info(uuid="521269cb-5d2c-46e6-bc01-a03bd148ce28") 269 def test_soft_2g_ap_channel_when_roam_to_chan_13(self): 270 """Verify softAp 2G channel when after roaming to network on channel 13. 271 272 Steps: 273 1. Configure 2 APs - 1 on channel 6, the other on channel 13. 274 2. Connect DUT to AP on channel 6. 275 3. Start softAp on DUT on 2G band. 276 4. Verify softAp is started on channel 6. 277 5. Roam to AP2 with channel 13. 278 6. Verify SoftAp on DUT changed to channel 13. 279 """ 280 for ad in self.android_devices: 281 wutils.set_wifi_country_code( 282 ad, wutils.WifiEnums.CountryCode.AUSTRALIA) 283 if "OpenWrtAP" in self.user_params: 284 self.configure_openwrt_ap_and_start(open_network=True, 285 ap_count=2, 286 channel_2g_ap2=13, 287 mirror_ap=True) 288 ap1_network = self.open_network[0]["2g"] 289 ap2_network = self.open_network[1]["2g"] 290 if "OpenWrtAP" in self.user_params: 291 ap1_network["bssid"] = self.bssid_map[0]["2g"][ap1_network["SSID"]] 292 ap2_network["bssid"] = self.bssid_map[1]["2g"][ap2_network["SSID"]] 293 wutils.set_attns(self.attenuators, "AP1_on_AP2_off", self.roaming_attn) 294 wutils.connect_to_wifi_network(self.dut, ap1_network) 295 296 # start softap on 2G and verify the channel is 6. 297 sap_config = { 298 WifiEnums.SSID_KEY: "hotspot_%s" % utils.rand_ascii_str(6), 299 WifiEnums.PWD_KEY: "pass_%s" % utils.rand_ascii_str(6), 300 WifiEnums.AP_BAND_KEY: WifiEnums.WIFI_CONFIG_SOFTAP_BAND_2G} 301 asserts.assert_true( 302 self.dut.droid.wifiSetWifiApConfiguration(sap_config), 303 "Failed to set WifiAp Configuration") 304 wutils.start_wifi_tethering_saved_config(self.dut) 305 softap_conf = self.dut.droid.wifiGetApConfiguration() 306 self.log.info("softap conf: %s" % softap_conf) 307 wutils.connect_to_wifi_network(self.dut_client, sap_config) 308 conn_info = self.dut_client.droid.wifiGetConnectionInfo() 309 self.log.info("Wifi connection info on dut_client: %s" % conn_info) 310 softap_channel = wutils.WifiEnums.freq_to_channel[conn_info["frequency"]] 311 asserts.assert_true(softap_channel == 6, 312 "Dut client did not connect to softAp on channel 6") 313 314 # trigger roaming to AP2 with channel 13 315 self.log.info("Roaming from %s to %s", ap1_network, ap2_network) 316 wutils.trigger_roaming_and_validate( 317 self.dut, self.attenuators, "AP1_off_AP2_on", ap2_network, 318 self.roaming_attn) 319 320 # verify softap is now moved to channel 13 321 conn_info = self.dut_client.droid.wifiGetConnectionInfo() 322 self.log.info("Wifi connection info on dut_client: %s" % conn_info) 323 softap_channel = wutils.WifiEnums.freq_to_channel[conn_info["frequency"]] 324 asserts.assert_true(softap_channel == 13, 325 "Dut client did not connect to softAp on channel 13") 326 327 @test_tracker_info(uuid="3114d625-5cdd-4205-bb46-5a9d057dc80d") 328 def test_roaming_fail_psk_2g(self): 329 """Verify roaming fail with mismatch passwords. 330 331 Steps: 332 DUT connect to AP1. 333 Change AP2's password. 334 DUT try roaming from AP1 to AP2 with mismatched password. 335 Change AP2's password back to original one. 336 DUT try roaming from AP1 to AP2 with matched passwords. 337 """ 338 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 339 if "OpenWrtAP" in self.user_params: 340 self.configure_openwrt_ap_and_start(wpa_network=True, 341 ap_count=2, 342 mirror_ap=True) 343 self.openwrt1 = self.access_points[0] 344 self.openwrt2 = self.access_points[1] 345 ap1_network = self.reference_networks[0]["2g"] 346 ap2_network = self.reference_networks[1]["2g"] 347 # Get APs' BSSIDs. 348 ap1_bssid = self.bssid_map[0]["2g"][ap1_network["SSID"]] 349 ap2_bssid = self.bssid_map[1]["2g"][ap2_network["SSID"]] 350 # Make AP's configs. 351 ap1_network["bssid"] = ap1_bssid 352 ap2_network["bssid"] = ap2_bssid 353 354 # Change AP2 2G to password. 355 self.openwrt2.set_password(pwd_2g=utils.rand_ascii_str(8)) 356 357 try: 358 # DUT roaming from AP1 to AP2 with mismatched passwords. 359 self.dut.log.info("Roaming via mismatched passwords to AP2 [{}]" 360 .format(ap2_bssid)) 361 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 362 except: 363 self.dut.log.info("Failed roaming to AP2") 364 self.dut.log.info("Roaming via matched passwords to AP2 [{}]" 365 .format(ap1_bssid)) 366 wutils.set_attns_steps(self.attenuators, "AP1_on_AP2_off", 367 self.roaming_attn) 368 self.openwrt2.set_password(pwd_2g=ap2_network["password"]) 369 self.dut.log.info("Toggling wifi OFF.") 370 wutils.wifi_toggle_state(self.dut, False) 371 self.dut.log.info("Toggling wifi ON.") 372 wutils.wifi_toggle_state(self.dut, True) 373 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 374 else: 375 raise signals.TestFailure("DUT unexpectedly connect to Wi-Fi.") 376 377 # Use Google OnHub as Wi-Fi AP to test when OpenWrt is no available. 378 elif "AccessPoint" in self.user_params: 379 network = {'SSID':'test_roaming_fail', 'password':'roam123456@'} 380 # AP2 network with incorrect password. 381 network_fail = {'SSID':'test_roaming_fail', 'password':'roam123456@#$%^'} 382 # Setup AP1 with the correct password. 383 wutils.ap_setup(self, 0, self.access_points[0], network) 384 network_bssid = self.access_points[0].get_bssid_from_ssid( 385 network["SSID"], '2g') 386 # Setup AP2 with the incorrect password. 387 wutils.ap_setup(self, 1, self.access_points[1], network_fail) 388 network_fail_bssid = self.access_points[1].get_bssid_from_ssid( 389 network_fail["SSID"], '2g') 390 network['bssid'] = network_bssid 391 network_fail['bssid'] = network_fail_bssid 392 try: 393 # Initiate roaming with AP2 configured with incorrect password. 394 self.roaming_from_AP1_and_AP2(network, network_fail) 395 except: 396 self.log.info("Roaming failed to AP2 with incorrect password.") 397 # Re-configure AP2 after roaming failed, with correct password. 398 self.log.info("Re-configuring AP2 with correct password.") 399 wutils.ap_setup(self, 1, self.access_points[1], network) 400 self.roaming_from_AP1_and_AP2(network, network_fail) 401 402 @test_tracker_info(uuid="b6d73094-22bc-4460-9d55-ce34a0a6a8c9") 403 def test_roaming_fail_different_bssid(self): 404 """Verify devices is disconnect with difference bssid after roaming 405 406 Steps: 407 1. Configure 2 APs 408 2. Connect DUT to AP 1 409 3. Roam to AP2 410 4. Verify the bssid is difference and the device can't connect 411 5. Verify device is disconnect after roaming. 412 """ 413 if "OpenWrtAP" in self.user_params: 414 self.configure_openwrt_ap_and_start(wpa_network=True, 415 ap_count=2, 416 mirror_ap=True) 417 ap1_network = self.reference_networks[0]["2g"] 418 ap2_network = self.reference_networks[1]["2g"] 419 if "OpenWrtAP" in self.user_params: 420 ap1_network["bssid"] = self.bssid_map[0]["2g"][ap1_network["SSID"]] 421 ap2_network["bssid"] = self.bssid_map[1]["2g"][ap2_network["SSID"]] 422 wutils.set_attns(self.attenuators, "AP1_on_AP2_off") 423 wutils.connect_to_wifi_network(self.dut, ap1_network) 424 425 # Initiate roaming with AP2 426 wutils.set_attns(self.attenuators, "AP1_off_AP2_on") 427 time.sleep(10) 428 try: 429 wutils.verify_wifi_connection_info(self.dut, ap2_network) 430 except: 431 self.log.info("Roaming failed to AP2 with incorrect BSSID") 432 wutils.wait_for_disconnect(self.dut) 433 self.log.info("Device is disconnect") 434 435 @test_tracker_info(uuid="641b35c1-7bf8-4d85-a813-1bc30d7bd0d4") 436 def test_roaming_between_psk_2g_to_psk_5g(self): 437 """Verify psk when after roaming from 2.4 Ghz to 5 Ghz with OpenWrtAP 438 439 Steps: 440 1. Configure 2 APs 441 2. Configure AP2 5Ghz and AP1 2.4Ghz WiFi to same SSID and password 442 3. Connect DUT to AP1 2.4Ghz WiFi 443 4. Roam to AP2 5Ghz WiFi 444 5. Verify the DUT can connect from 2.4Ghz to 5Ghz 445 """ 446 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 447 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 448 self.configure_openwrt_ap_and_start(wpa_network=True, 449 ap_count=2) 450 self.openwrt1 = self.access_points[0] 451 self.openwrt2 = self.access_points[1] 452 ap1_network = self.reference_networks[0]["2g"] 453 ap2_network = self.reference_networks[1]["5g"] 454 # Get & Setup APs' BSSIDs. 455 ap1_network["bssid"] = self.bssid_map[0]["2g"][ap1_network["SSID"]] 456 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 457 458 # Change 2 APs to same password and SSID 459 self.openwrt1.set_ssid(ssid_2g="testSSID") 460 self.openwrt2.set_ssid(ssid_5g="testSSID") 461 self.openwrt2.set_password(pwd_5g=ap1_network["password"]) 462 ap1_network["SSID"] = "testSSID" 463 ap2_network["SSID"] = "testSSID" 464 ap2_network["password"] = ap1_network["password"] 465 466 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 467 468 @test_tracker_info(uuid="fa1fe3bb-abb9-4d75-88bd-cd88c04073c6") 469 def test_roaming_between_psk_withoutPMF_5g(self): 470 """Verify psk without PMF when after roaming with OpenWrtAP 471 472 Steps: 473 1. Configure 2 APs without PMF 474 2. Connect DUT to AP1 475 3. Roam to AP2 476 4. Verify the DUT can connect after roaming 477 """ 478 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 479 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 480 self.configure_openwrt_ap_and_start(wpa_network=True, 481 ap_count=2, 482 mirror_ap=True, 483 ieee80211w=0) 484 ap1_network = self.reference_networks[0]["5g"] 485 ap2_network = self.reference_networks[1]["5g"] 486 # Get & Setup APs' BSSIDs. 487 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 488 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 489 490 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 491 492 @test_tracker_info(uuid="496e048a-3da5-45c4-aa0f-c5bd127eb06f") 493 def test_roaming_between_psk_withPMF_5g(self): 494 """Verify psk with PMF when after roaming with OpenWrtAP 495 496 Steps: 497 1. Configure 2 APs with PMF 498 2. Connect DUT to AP1 499 3. Roam to AP2 500 4. Verify the DUT can connect after roaming 501 """ 502 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 503 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 504 self.configure_openwrt_ap_and_start(wpa_network=True, 505 ap_count=2, 506 mirror_ap=True, 507 ieee80211w=2) 508 ap1_network = self.reference_networks[0]["5g"] 509 ap2_network = self.reference_networks[1]["5g"] 510 # Get & Setup APs' BSSIDs. 511 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 512 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 513 514 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 515 516 @test_tracker_info(uuid="524c97c5-4bca-46b0-97f9-aad749768cd8") 517 def test_roaming_between_psk_wPMF_to_psk_woPMF_5g(self): 518 """Verify psk with/without PMF when after roaming with OpenWrtAP 519 520 Steps: 521 1. Configure 2 APs without PMF 522 2. Configure AP1 with PMF 523 3. Connect DUT to AP1 524 4. Roam to AP2 525 5. Verify the DUT can connect after roaming 526 """ 527 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 528 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 529 self.configure_openwrt_ap_and_start(wpa_network=True, 530 ap_count=2, 531 mirror_ap=True, 532 ieee80211w=0) 533 self.openwrt1 = self.access_points[0] 534 self.openwrt2 = self.access_points[1] 535 ap1_network = self.reference_networks[0]["5g"] 536 ap2_network = self.reference_networks[1]["5g"] 537 # Get & Setup APs' BSSIDs. 538 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 539 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 540 541 # Configure AP1 to enable PMF. 542 self.configure_openwrt_ap_and_start(wpa_network=True, 543 ieee80211w=2) 544 ap1_network = self.reference_networks[0]["5g"] 545 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 546 547 # Change AP2 password and SSID same as AP1. 548 self.openwrt2.set_password(pwd_5g=ap1_network["password"]) 549 self.openwrt2.set_ssid(ssid_5g=ap1_network["SSID"]) 550 ap2_network["SSID"] = ap1_network["SSID"] 551 ap2_network["password"] = ap1_network["password"] 552 553 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 554 555 @test_tracker_info(uuid="714ceac1-d8af-4679-9385-2c9c6d885634") 556 def test_roaming_between_psk_woPMF_to_psk_wPMF_5g(self): 557 """Verify psk without/with PMF when after roaming with OpenWrtAP 558 559 Steps: 560 1. Configure 2 APs with PMF 561 2. Configure AP1 without PMF 562 3. Connect DUT to AP1 563 4. Roam to AP2 564 5. Verify the DUT can connect after roaming 565 """ 566 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 567 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 568 self.configure_openwrt_ap_and_start(wpa_network=True, 569 ap_count=2, 570 mirror_ap=True, 571 ieee80211w=2) 572 self.openwrt1 = self.access_points[0] 573 self.openwrt2 = self.access_points[1] 574 ap1_network = self.reference_networks[0]["5g"] 575 ap2_network = self.reference_networks[1]["5g"] 576 # Get & Setup APs' BSSIDs. 577 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 578 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 579 580 # Configure AP1 to disable PMF. 581 self.configure_openwrt_ap_and_start(wpa_network=True, 582 ieee80211w=0) 583 ap1_network = self.reference_networks[0]["5g"] 584 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 585 586 # Change AP2 password and SSID same as AP1. 587 self.openwrt2.set_password(pwd_5g=ap1_network["password"]) 588 self.openwrt2.set_ssid(ssid_5g=ap1_network["SSID"]) 589 ap2_network["SSID"] = ap1_network["SSID"] 590 ap2_network["password"] = ap1_network["password"] 591 592 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 593 594 @test_tracker_info(uuid="4b201d7b-38ec-49c2-95c3-81cba51ba11d") 595 def test_roaming_between_psk_capablePMF_5g(self): 596 """Verify psk capable PMF when after roaming with OpenWrtAP 597 598 Steps: 599 1. Configure 2 APs with capable PMF 600 2. Connect DUT to AP1 601 3. Roam to AP2 602 4. Verify the DUT can connect after roaming 603 """ 604 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 605 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 606 self.configure_openwrt_ap_and_start(wpa_network=True, 607 ap_count=2, 608 mirror_ap=True, 609 ieee80211w=1) 610 ap1_network = self.reference_networks[0]["5g"] 611 ap2_network = self.reference_networks[1]["5g"] 612 # Get & Setup APs' BSSIDs. 613 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 614 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 615 616 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 617 618 @test_tracker_info(uuid="588a9279-1f84-44d2-acbb-051c5ba0bcb1") 619 def test_roaming_between_psk_capPMF_to_psk_woPMF_5g(self): 620 """Verify psk capable/without PMF when after roaming with OpenWrtAP 621 622 Steps: 623 1. Configure 2 APs without PMF 624 2. Configure AP1 with capable PMF 625 3. Connect DUT to AP1 626 4. Roam to AP2 627 5. Verify the DUT can connect after roaming 628 """ 629 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 630 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 631 self.configure_openwrt_ap_and_start(wpa_network=True, 632 ap_count=2, 633 mirror_ap=True, 634 ieee80211w=0) 635 self.openwrt1 = self.access_points[0] 636 self.openwrt2 = self.access_points[1] 637 ap1_network = self.reference_networks[0]["5g"] 638 ap2_network = self.reference_networks[1]["5g"] 639 # Get & Setup APs' BSSIDs. 640 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 641 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 642 643 # Configure AP1 to enable capable PMF. 644 self.configure_openwrt_ap_and_start(wpa_network=True, 645 ieee80211w=1) 646 ap1_network = self.reference_networks[0]["5g"] 647 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 648 649 # Change AP2 password and SSID same as AP1. 650 self.openwrt2.set_password(pwd_5g=ap1_network["password"]) 651 self.openwrt2.set_ssid(ssid_5g=ap1_network["SSID"]) 652 ap2_network["SSID"] = ap1_network["SSID"] 653 ap2_network["password"] = ap1_network["password"] 654 655 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 656 657 @test_tracker_info(uuid="d239b56d-515c-4589-b63a-ebce62c321af") 658 def test_roaming_between_psk_capPMF_to_psk_wPMF_5g(self): 659 """Verify psk capable/with PMF when after roaming with OpenWrtAP 660 661 Steps: 662 1. Configure 2 APs with PMF 663 2. Configure AP1 with capable PMF 664 3. Connect DUT to AP1 665 4. Roam to AP2 666 5. Verify the DUT can connect after roaming 667 """ 668 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 669 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 670 self.configure_openwrt_ap_and_start(wpa_network=True, 671 ap_count=2, 672 mirror_ap=True, 673 ieee80211w=2) 674 self.openwrt1 = self.access_points[0] 675 self.openwrt2 = self.access_points[1] 676 ap1_network = self.reference_networks[0]["5g"] 677 ap2_network = self.reference_networks[1]["5g"] 678 # Get & Setup APs' BSSIDs. 679 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 680 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 681 682 # Configure AP1 to enable capable PMF. 683 self.configure_openwrt_ap_and_start(wpa_network=True, 684 ieee80211w=1) 685 ap1_network = self.reference_networks[0]["5g"] 686 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 687 688 # Change AP2 password and SSID same as AP1. 689 self.openwrt2.set_password(pwd_5g=ap1_network["password"]) 690 self.openwrt2.set_ssid(ssid_5g=ap1_network["SSID"]) 691 ap2_network["SSID"] = ap1_network["SSID"] 692 ap2_network["password"] = ap1_network["password"] 693 694 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 695 696 @test_tracker_info(uuid="57ec9401-b336-40cb-bc46-c2b4cfc22516") 697 def test_roaming_between_psk_wPMF_to_psk_capPMF_5g(self): 698 """Verify psk with/capable PMF when after roaming with OpenWrtAP 699 700 Steps: 701 1. Configure 2 APs with capable PMF 702 2. Configure AP1 with PMF 703 3. Connect DUT to AP1 704 4. Roam to AP2 705 5. Verify the DUT can connect after roaming 706 """ 707 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 708 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 709 self.configure_openwrt_ap_and_start(wpa_network=True, 710 ap_count=2, 711 mirror_ap=True, 712 ieee80211w=1) 713 self.openwrt1 = self.access_points[0] 714 self.openwrt2 = self.access_points[1] 715 ap1_network = self.reference_networks[0]["5g"] 716 ap2_network = self.reference_networks[1]["5g"] 717 # Get & Setup APs' BSSIDs. 718 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 719 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 720 721 # Configure AP1 to enable PMF. 722 self.configure_openwrt_ap_and_start(wpa_network=True, 723 ieee80211w=2) 724 ap1_network = self.reference_networks[0]["5g"] 725 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 726 727 # Change AP2 password and SSID same as AP1. 728 self.openwrt2.set_password(pwd_5g=ap1_network["password"]) 729 self.openwrt2.set_ssid(ssid_5g=ap1_network["SSID"]) 730 ap2_network["SSID"] = ap1_network["SSID"] 731 ap2_network["password"] = ap1_network["password"] 732 733 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 734 735 @test_tracker_info(uuid="a32d24f0-36cc-41f0-90b4-db74973db29f") 736 def test_roaming_between_psk_woPMF_to_psk_capPMF_5g(self): 737 """Verify psk without/capable PMF when after roaming with OpenWrtAP 738 739 Steps: 740 1. Configure 2 APs with capable PMF 741 2. Configure AP1 without PMF 742 3. Connect DUT to AP1 743 4. Roam to AP2 744 5. Verify the DUT can connect after roaming 745 """ 746 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 747 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 748 self.configure_openwrt_ap_and_start(wpa_network=True, 749 ap_count=2, 750 mirror_ap=True, 751 ieee80211w=1) 752 self.openwrt1 = self.access_points[0] 753 self.openwrt2 = self.access_points[1] 754 ap1_network = self.reference_networks[0]["5g"] 755 ap2_network = self.reference_networks[1]["5g"] 756 # Get & Setup APs' BSSIDs. 757 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 758 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 759 760 # Configure AP1 to disable PMF. 761 self.configure_openwrt_ap_and_start(wpa_network=True, 762 ieee80211w=0) 763 ap1_network = self.reference_networks[0]["5g"] 764 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 765 766 # Change AP2 password and SSID same as AP1. 767 self.openwrt2.set_password(pwd_5g=ap1_network["password"]) 768 self.openwrt2.set_ssid(ssid_5g=ap1_network["SSID"]) 769 ap2_network["SSID"] = ap1_network["SSID"] 770 ap2_network["password"] = ap1_network["password"] 771 772 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 773 774 @test_tracker_info(uuid="44f45dc9-e85c-419d-bbab-d02e9548a377") 775 def test_roaming_between_psk_to_saemixed_woPMF_5g(self): 776 """Verify psk to saemixed without PMF when after roaming with OpenWrtAP 777 778 Steps: 779 1. Configure 2 APs security type to saemixed without PMF 780 2. Configure AP1 security type to psk 781 3. Connect DUT to AP1 782 4. Roam to AP2 783 5. Verify the DUT can connect after roaming 784 """ 785 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 786 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 787 self.configure_openwrt_ap_and_start(saemixed_network=True, 788 ap_count=2, 789 mirror_ap=True, 790 ieee80211w=0) 791 self.openwrt1 = self.access_points[0] 792 self.openwrt2 = self.access_points[1] 793 ap1_network = self.saemixed_networks[0]["5g"] 794 ap2_network = self.saemixed_networks[1]["5g"] 795 # Get & Setup APs' BSSIDs. 796 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 797 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 798 799 # Configure AP1 security type. 800 self.configure_openwrt_ap_and_start(wpa_network=True) 801 ap1_network = self.reference_networks[0]["5g"] 802 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 803 804 # Change AP2 password and SSID same as AP1. 805 self.openwrt2.set_password(pwd_5g=ap1_network["password"]) 806 self.openwrt2.set_ssid(ssid_5g=ap1_network["SSID"]) 807 ap2_network["SSID"] = ap1_network["SSID"] 808 ap2_network["password"] = ap1_network["password"] 809 810 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 811 812 @test_tracker_info(uuid="9827f3b3-51cd-406b-ba2b-3ef4a9df7378") 813 def test_roaming_between_psk_to_saemixed_wPMF_5g(self): 814 """Verify psk to saemixed with PMF when after roaming with OpenWrtAP 815 816 Steps: 817 1. Configure 2 APs security type to saemixed with PMF 818 2. Configure AP1 security type to psk 819 3. Connect DUT to AP1 820 4. Roam to AP2 821 5. Verify the DUT can connect after roaming 822 """ 823 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 824 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 825 self.configure_openwrt_ap_and_start(saemixed_network=True, 826 ap_count=2, 827 mirror_ap=True, 828 ieee80211w=2) 829 self.openwrt1 = self.access_points[0] 830 self.openwrt2 = self.access_points[1] 831 ap1_network = self.saemixed_networks[0]["5g"] 832 ap2_network = self.saemixed_networks[1]["5g"] 833 # Get & Setup APs' BSSIDs. 834 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 835 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 836 837 # Configure AP1 security type. 838 self.configure_openwrt_ap_and_start(wpa_network=True) 839 ap1_network = self.reference_networks[0]["5g"] 840 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 841 842 # Change AP2 password and SSID same as AP1. 843 self.openwrt2.set_password(pwd_5g=ap1_network["password"]) 844 self.openwrt2.set_ssid(ssid_5g=ap1_network["SSID"]) 845 ap2_network["SSID"] = ap1_network["SSID"] 846 ap2_network["password"] = ap1_network["password"] 847 848 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 849 850 @test_tracker_info(uuid="037602b1-2ce8-4dbb-b46a-00e0a582d976") 851 def test_roaming_between_saemixed_withoutPMF_5g(self): 852 """Verify saemixed without PMF when after roaming with OpenWrtAP 853 854 Steps: 855 1. Configure 2 APs to saemixed without PMF 856 2. Connect DUT to AP1 857 3. Roam to AP2 858 4. Verify the DUT can connect after roaming 859 """ 860 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 861 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 862 self.configure_openwrt_ap_and_start(saemixed_network=True, 863 ap_count=2, 864 mirror_ap=True, 865 ieee80211w=0) 866 ap1_network = self.saemixed_networks[0]["5g"] 867 ap2_network = self.saemixed_networks[1]["5g"] 868 # Get & Setup APs' BSSIDs. 869 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 870 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 871 872 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 873 874 @test_tracker_info(uuid="94514f72-9e90-4d73-bba5-65b95e721cd8") 875 def test_roaming_between_saemixed_withPMF_5g(self): 876 """Verify saemixed with PMF when after roaming with OpenWrtAP 877 878 Steps: 879 1. Configure 2 APs to saemixed with PMF 880 2. Connect DUT to AP1 881 3. Roam to AP2 882 4. Verify the DUT can connect after roaming 883 """ 884 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 885 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 886 self.configure_openwrt_ap_and_start(saemixed_network=True, 887 ap_count=2, 888 mirror_ap=True, 889 ieee80211w=2) 890 ap1_network = self.saemixed_networks[0]["5g"] 891 ap2_network = self.saemixed_networks[1]["5g"] 892 # Get & Setup APs' BSSIDs. 893 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 894 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 895 896 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 897 898 @test_tracker_info(uuid="05834382-5c3f-48d9-a6e6-8794ebf176f8") 899 def test_roaming_between_saemixed_woPMF_to_saemixed_wPMF_5g(self): 900 """Verify saemixed without/with PMF when after roaming with OpenWrtAP 901 902 Steps: 903 1. Configure 2 APs to saemixed with PMF 904 2. Configure AP1 to saemixed without PMF 905 3. Connect DUT to AP1 906 4. Roam to AP2 907 5. Verify the DUT can connect after roaming 908 """ 909 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 910 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 911 self.configure_openwrt_ap_and_start(saemixed_network=True, 912 ap_count=2, 913 mirror_ap=True, 914 ieee80211w=2) 915 self.openwrt1 = self.access_points[0] 916 self.openwrt2 = self.access_points[1] 917 ap1_network = self.saemixed_networks[0]["5g"] 918 ap2_network = self.saemixed_networks[1]["5g"] 919 # Get & Setup APs' BSSIDs. 920 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 921 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 922 923 # Configure AP1 to disable PMF. 924 self.configure_openwrt_ap_and_start(saemixed_network=True, 925 ieee80211w=0) 926 ap1_network = self.saemixed_networks[0]["5g"] 927 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 928 929 # Change AP2 password and SSID same as AP1. 930 self.openwrt2.set_password(pwd_5g=ap1_network["password"]) 931 self.openwrt2.set_ssid(ssid_5g=ap1_network["SSID"]) 932 ap2_network["SSID"] = ap1_network["SSID"] 933 ap2_network["password"] = ap1_network["password"] 934 935 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 936 937 @test_tracker_info(uuid="4d7cba89-40f1-4a2a-891d-4bb757f73442") 938 def test_roaming_between_saemixed_wPMF_to_saemixed_woPMF_5g(self): 939 """Verify saemixed with/without PMF when after roaming with OpenWrtAP 940 941 Steps: 942 1. Configure 2 APs to saemixed without PMF 943 2. Configure AP1 to saemixed with PMF 944 3. Connect DUT to AP1 945 4. Roam to AP2 946 5. Verify the DUT can connect after roaming 947 """ 948 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 949 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 950 self.configure_openwrt_ap_and_start(saemixed_network=True, 951 ap_count=2, 952 mirror_ap=True, 953 ieee80211w=0) 954 self.openwrt1 = self.access_points[0] 955 self.openwrt2 = self.access_points[1] 956 ap1_network = self.saemixed_networks[0]["5g"] 957 ap2_network = self.saemixed_networks[1]["5g"] 958 # Get & Setup APs' BSSIDs. 959 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 960 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 961 962 # Configure AP1 to enable PMF. 963 self.configure_openwrt_ap_and_start(saemixed_network=True, 964 ieee80211w=2) 965 ap1_network = self.saemixed_networks[0]["5g"] 966 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 967 968 # Change AP2 password and SSID same as AP1. 969 self.openwrt2.set_password(pwd_5g=ap1_network["password"]) 970 self.openwrt2.set_ssid(ssid_5g=ap1_network["SSID"]) 971 ap2_network["SSID"] = ap1_network["SSID"] 972 ap2_network["password"] = ap1_network["password"] 973 974 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 975 976 @test_tracker_info(uuid="57caaf0a-5251-4191-b4d1-de31d7c12295") 977 def test_roaming_between_sae_to_saemixed_woPMF_5g(self): 978 """Verify sae to saemixed without PMF when after roaming with OpenWrtAP 979 980 Steps: 981 1. Configure 2 APs security type to saemixed without PMF 982 2. Configure AP1 security type to sae 983 3. Connect DUT to AP1 984 4. Roam to AP2 985 5. Verify the DUT can connect after roaming 986 """ 987 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 988 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 989 self.configure_openwrt_ap_and_start(saemixed_network=True, 990 ap_count=2, 991 mirror_ap=True, 992 ieee80211w=0) 993 self.openwrt1 = self.access_points[0] 994 self.openwrt2 = self.access_points[1] 995 ap1_network = self.saemixed_networks[0]["5g"] 996 ap2_network = self.saemixed_networks[1]["5g"] 997 # Get & Setup APs' BSSIDs. 998 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 999 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 1000 1001 # Configure AP1 security type. 1002 self.configure_openwrt_ap_and_start(sae_network=True) 1003 ap1_network = self.sae_networks[0]["5g"] 1004 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 1005 1006 # Change AP2 password and SSID same as AP1. 1007 self.openwrt2.set_password(pwd_5g=ap1_network["password"]) 1008 self.openwrt2.set_ssid(ssid_5g=ap1_network["SSID"]) 1009 ap2_network["SSID"] = ap1_network["SSID"] 1010 ap2_network["password"] = ap1_network["password"] 1011 1012 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 1013 1014 @test_tracker_info(uuid="0f5ca9d9-ef40-4a95-bf55-4c78358a9a3e") 1015 def test_roaming_between_sae_to_saemixed_wPMF_5g(self): 1016 """Verify sae to saemixed with PMF when after roaming with OpenWrtAP 1017 1018 Steps: 1019 1. Configure 2 APs security type to saemixed with PMF 1020 2. Configure AP1 security type to sae 1021 3. Connect DUT to AP1 1022 4. Roam to AP2 1023 5. Verify the DUT can connect after roaming 1024 """ 1025 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 1026 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 1027 self.configure_openwrt_ap_and_start(saemixed_network=True, 1028 ap_count=2, 1029 mirror_ap=True, 1030 ieee80211w=2) 1031 self.openwrt1 = self.access_points[0] 1032 self.openwrt2 = self.access_points[1] 1033 ap1_network = self.saemixed_networks[0]["5g"] 1034 ap2_network = self.saemixed_networks[1]["5g"] 1035 # Get & Setup APs' BSSIDs. 1036 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 1037 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 1038 1039 # Configure AP1 security type. 1040 self.configure_openwrt_ap_and_start(sae_network=True) 1041 ap1_network = self.sae_networks[0]["5g"] 1042 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 1043 1044 # Change AP2 password and SSID same as AP1. 1045 self.openwrt2.set_password(pwd_5g=ap1_network["password"]) 1046 self.openwrt2.set_ssid(ssid_5g=ap1_network["SSID"]) 1047 ap2_network["SSID"] = ap1_network["SSID"] 1048 ap2_network["password"] = ap1_network["password"] 1049 1050 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 1051 1052 @test_tracker_info(uuid="e875233f-d242-4ddd-b357-8e3e215af050") 1053 def test_roaming_between_psk_to_sae_5g(self): 1054 """Verify fail with diff security type after roaming with OpenWrtAP 1055 1056 This test will pass after design change but this is not seamless roaming. 1057 Steps: 1058 1. Configure 2 APs security type to sae 1059 2. Configure AP1 security type to psk 1060 3. Connect DUT to AP1 1061 4. Roam to AP2 1062 5. Verify the DUT connect to AP2 after roaming 1063 """ 1064 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 1065 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 1066 self.configure_openwrt_ap_and_start(sae_network=True, 1067 ap_count=2, 1068 mirror_ap=True) 1069 self.openwrt1 = self.access_points[0] 1070 self.openwrt2 = self.access_points[1] 1071 ap1_network = self.sae_networks[0]["5g"] 1072 ap2_network = self.sae_networks[1]["5g"] 1073 # Get & Setup APs' BSSIDs. 1074 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 1075 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 1076 1077 # Configure AP1 security type. 1078 self.configure_openwrt_ap_and_start(wpa_network=True) 1079 ap1_network = self.reference_networks[0]["5g"] 1080 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 1081 1082 # Change AP2 password and SSID same as AP1. 1083 self.openwrt2.set_password(pwd_5g=ap1_network["password"]) 1084 self.openwrt2.set_ssid(ssid_5g=ap1_network["SSID"]) 1085 ap2_network["SSID"] = ap1_network["SSID"] 1086 ap2_network["password"] = ap1_network["password"] 1087 1088 # DUT roaming from AP1 to AP2 with diff security type. 1089 # Expect device disconnect from AP1 and connect to AP2 due to 1090 # saved network contain AP2. 1091 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 1092 1093 @test_tracker_info(uuid="76098016-56a4-4b92-8c13-7333a21c9a1b") 1094 def test_roaming_between_psk_to_saemixed_2g(self): 1095 """Verify psk to saemixed with 11n when after roaming with OpenWrtAP 1096 1097 Steps: 1098 1. Configure 2 APs security type to saemixed with 11n mode 1099 2. Configure AP1 security type to psk with 11n mode 1100 3. Connect DUT to AP1 1101 4. Roam to AP2 1102 5. Verify the DUT can connect after roaming 1103 """ 1104 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 1105 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 1106 self.configure_openwrt_ap_and_start(saemixed_network=True, 1107 ap_count=2, 1108 mirror_ap=True) 1109 self.openwrt1 = self.access_points[0] 1110 self.openwrt2 = self.access_points[1] 1111 ap1_network = self.saemixed_networks[0]["2g"] 1112 ap2_network = self.saemixed_networks[1]["2g"] 1113 # Get & Setup APs' BSSIDs. 1114 ap1_network["bssid"] = self.bssid_map[0]["2g"][ap1_network["SSID"]] 1115 ap2_network["bssid"] = self.bssid_map[1]["2g"][ap2_network["SSID"]] 1116 1117 # Configure AP1 security type. 1118 self.configure_openwrt_ap_and_start(wpa_network=True) 1119 ap1_network = self.reference_networks[0]["2g"] 1120 ap1_network["bssid"] = self.bssid_map[0]["2g"][ap1_network["SSID"]] 1121 1122 # Change AP2 password and SSID same as AP1. 1123 self.openwrt2.set_password(pwd_2g=ap1_network["password"]) 1124 self.openwrt2.set_ssid(ssid_2g=ap1_network["SSID"]) 1125 ap2_network["SSID"] = ap1_network["SSID"] 1126 ap2_network["password"] = ap1_network["password"] 1127 1128 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 1129 1130 @test_tracker_info(uuid="2caf668d-6b05-4ba5-ac6b-1ec989fdf9ff") 1131 def test_roaming_between_psk1_to_saemixed_2g(self): 1132 """Verify psk1 to saemixed with 11n when after roaming with OpenWrtAP 1133 1134 Steps: 1135 1. Configure 2 APs security type to saemixed with 11n mode 1136 2. Configure AP1 security type to psk1 with 11n mode 1137 3. Connect DUT to AP1 1138 4. Roam to AP2 1139 5. Verify the DUT can connect after roaming 1140 """ 1141 # Use OpenWrt as Wi-Fi AP when it's available in testbed. 1142 asserts.skip_if("OpenWrtAP" not in self.user_params, "OpenWrtAP not in user_params") 1143 self.configure_openwrt_ap_and_start(saemixed_network=True, 1144 ap_count=2, 1145 mirror_ap=True) 1146 self.openwrt1 = self.access_points[0] 1147 self.openwrt2 = self.access_points[1] 1148 ap1_network = self.saemixed_networks[0]["2g"] 1149 ap2_network = self.saemixed_networks[1]["2g"] 1150 # Get & Setup APs' BSSIDs. 1151 ap1_network["bssid"] = self.bssid_map[0]["2g"][ap1_network["SSID"]] 1152 ap2_network["bssid"] = self.bssid_map[1]["2g"][ap2_network["SSID"]] 1153 1154 # Configure AP1 security type. 1155 self.configure_openwrt_ap_and_start(wpa1_network=True) 1156 ap1_network = self.wpa1_networks[0]["2g"] 1157 ap1_network["bssid"] = self.bssid_map[0]["2g"][ap1_network["SSID"]] 1158 1159 # Change AP2 password and SSID same as AP1. 1160 self.openwrt2.set_password(pwd_2g=ap1_network["password"]) 1161 self.openwrt2.set_ssid(ssid_2g=ap1_network["SSID"]) 1162 ap2_network["SSID"] = ap1_network["SSID"] 1163 ap2_network["password"] = ap1_network["password"] 1164 1165 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 1166 1167 @test_tracker_info(uuid="cc8781ec-12fb-47a4-86d4-80d13231c75d") 1168 def test_connect_to_wpa2_psk_2g_80211r(self): 1169 """Test WPA2-PSK 802.11r 2G connectivity ant roaming.""" 1170 if "OpenWrtAP" in self.user_params: 1171 self.openwrt1 = self.access_points[0] 1172 self.openwrt2 = self.access_points[1] 1173 self.configure_openwrt_ap_and_start(wpa_network=True, 1174 ap_count=2, 1175 mirror_ap=True) 1176 ap1_network = self.reference_networks[0]["2g"] 1177 ap2_network = self.reference_networks[1]["2g"] 1178 ap1_network["bssid"] = self.bssid_map[0]["2g"][ap1_network["SSID"]] 1179 ap2_network["bssid"] = self.bssid_map[1]["2g"][ap2_network["SSID"]] 1180 1181 md = self.openwrt1.generate_mobility_domain() 1182 self.openwrt1.enable_80211r(OpenWrtWifiSetting.IFACE_2G, md) 1183 self.openwrt2.enable_80211r(OpenWrtWifiSetting.IFACE_2G, md) 1184 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 1185 1186 @test_tracker_info(uuid="8b0ee65e-bba2-4786-a8b9-8990316d123d") 1187 def test_connect_to_wpa2_psk_5g_80211r(self): 1188 """Test WPA2-PSK 802.11r 5G connectivity and roaming.""" 1189 if "OpenWrtAP" in self.user_params: 1190 self.openwrt1 = self.access_points[0] 1191 self.openwrt2 = self.access_points[1] 1192 self.configure_openwrt_ap_and_start(wpa_network=True, 1193 ap_count=2, 1194 mirror_ap=True) 1195 ap1_network = self.reference_networks[0]["5g"] 1196 ap2_network = self.reference_networks[1]["5g"] 1197 ap1_network["bssid"] = self.bssid_map[0]["5g"][ap1_network["SSID"]] 1198 ap2_network["bssid"] = self.bssid_map[1]["5g"][ap2_network["SSID"]] 1199 1200 md = self.openwrt1.generate_mobility_domain() 1201 self.openwrt1.enable_80211r(OpenWrtWifiSetting.IFACE_5G, md) 1202 self.openwrt2.enable_80211r(OpenWrtWifiSetting.IFACE_5G, md) 1203 self.roaming_from_AP1_and_AP2(ap1_network, ap2_network) 1204