Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 1 | # |
tturney | 1bdf77d | 2015-12-28 17:46:13 -0800 | [diff] [blame] | 2 | # Copyright 2016 - The Android Open Source Project |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 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 | |
| 16 | import pprint |
Ang Li | 8e76718 | 2015-12-09 17:29:24 -0800 | [diff] [blame] | 17 | import random |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 18 | import time |
| 19 | |
Ang Li | c2d4521 | 2016-03-10 18:38:53 -0800 | [diff] [blame] | 20 | from acts import asserts |
Ang Li | 8154905 | 2016-06-09 18:51:14 -0700 | [diff] [blame] | 21 | from acts import signals |
Girish Moturu | 43faec8 | 2017-06-12 10:46:51 +0530 | [diff] [blame] | 22 | from acts.test_decorators import test_tracker_info |
Ang Li | 8154905 | 2016-06-09 18:51:14 -0700 | [diff] [blame] | 23 | from acts.test_utils.wifi import wifi_test_utils as wutils |
Girish Moturu | f1ce420 | 2018-10-20 21:33:00 -0700 | [diff] [blame] | 24 | from acts.test_utils.wifi.WifiBaseTest import WifiBaseTest |
Ang Li | c2d4521 | 2016-03-10 18:38:53 -0800 | [diff] [blame] | 25 | |
Ang Li | e8ed2b3 | 2015-12-11 12:30:20 -0800 | [diff] [blame] | 26 | WifiEnums = wutils.WifiEnums |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 27 | |
| 28 | # EAP Macros |
| 29 | EAP = WifiEnums.Eap |
| 30 | EapPhase2 = WifiEnums.EapPhase2 |
| 31 | |
| 32 | # Enterprise Config Macros |
| 33 | Ent = WifiEnums.Enterprise |
| 34 | |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 35 | |
Girish Moturu | f1ce420 | 2018-10-20 21:33:00 -0700 | [diff] [blame] | 36 | class WifiEnterpriseRoamingTest(WifiBaseTest): |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 37 | def setup_class(self): |
Xianyuan Jia | 168103b | 2019-09-06 12:22:52 -0700 | [diff] [blame] | 38 | super().setup_class() |
| 39 | |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 40 | self.dut = self.android_devices[0] |
Ang Li | 8e76718 | 2015-12-09 17:29:24 -0800 | [diff] [blame] | 41 | wutils.wifi_test_device_init(self.dut) |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 42 | req_params = ( |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 43 | "attn_vals", |
| 44 | # Expected time within which roaming should finish, in seconds. |
| 45 | "roam_interval", |
| 46 | "ca_cert", |
| 47 | "client_cert", |
| 48 | "client_key", |
| 49 | "eap_identity", |
| 50 | "eap_password", |
Girish Moturu | f1ce420 | 2018-10-20 21:33:00 -0700 | [diff] [blame] | 51 | "device_password", |
| 52 | "radius_conf_2g", |
| 53 | "radius_conf_5g") |
Ang Li | 5cd6d3c | 2016-02-01 11:29:14 -0800 | [diff] [blame] | 54 | self.unpack_userparams(req_params) |
Girish Moturu | f1ce420 | 2018-10-20 21:33:00 -0700 | [diff] [blame] | 55 | if "AccessPoint" in self.user_params: |
| 56 | self.legacy_configure_ap_and_start( |
| 57 | mirror_ap=True, |
| 58 | ent_network=True, |
| 59 | ap_count=2, |
| 60 | radius_conf_2g=self.radius_conf_2g, |
| 61 | radius_conf_5g=self.radius_conf_5g,) |
| 62 | self.ent_network_2g_a = self.ent_networks[0]["2g"] |
| 63 | self.ent_network_2g_b = self.ent_networks[1]["2g"] |
| 64 | self.bssid_2g_a = self.ent_network_2g_a[WifiEnums.BSSID_KEY.lower()] |
| 65 | self.bssid_2g_b = self.ent_network_2g_b[WifiEnums.BSSID_KEY.lower()] |
| 66 | self.ent_roaming_ssid = self.ent_network_2g_a[WifiEnums.SSID_KEY] |
| 67 | self.bssid_a = self.bssid_2g_a |
| 68 | self.bssid_b = self.bssid_2g_b |
| 69 | |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 70 | self.config_peap = { |
Girish Moturu | 150d32f | 2017-02-14 12:27:07 -0800 | [diff] [blame] | 71 | Ent.EAP: int(EAP.PEAP), |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 72 | Ent.CA_CERT: self.ca_cert, |
| 73 | Ent.IDENTITY: self.eap_identity, |
| 74 | Ent.PASSWORD: self.eap_password, |
Girish Moturu | 150d32f | 2017-02-14 12:27:07 -0800 | [diff] [blame] | 75 | Ent.PHASE2: int(EapPhase2.MSCHAPV2), |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 76 | WifiEnums.SSID_KEY: self.ent_roaming_ssid |
| 77 | } |
| 78 | self.config_tls = { |
Girish Moturu | 150d32f | 2017-02-14 12:27:07 -0800 | [diff] [blame] | 79 | Ent.EAP: int(EAP.TLS), |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 80 | Ent.CA_CERT: self.ca_cert, |
| 81 | WifiEnums.SSID_KEY: self.ent_roaming_ssid, |
| 82 | Ent.CLIENT_CERT: self.client_cert, |
| 83 | Ent.PRIVATE_KEY_ID: self.client_key, |
| 84 | Ent.IDENTITY: self.eap_identity, |
| 85 | } |
| 86 | self.config_ttls = { |
Girish Moturu | 150d32f | 2017-02-14 12:27:07 -0800 | [diff] [blame] | 87 | Ent.EAP: int(EAP.TTLS), |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 88 | Ent.CA_CERT: self.ca_cert, |
| 89 | Ent.IDENTITY: self.eap_identity, |
| 90 | Ent.PASSWORD: self.eap_password, |
Girish Moturu | 150d32f | 2017-02-14 12:27:07 -0800 | [diff] [blame] | 91 | Ent.PHASE2: int(EapPhase2.MSCHAPV2), |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 92 | WifiEnums.SSID_KEY: self.ent_roaming_ssid |
| 93 | } |
| 94 | self.config_sim = { |
Girish Moturu | 150d32f | 2017-02-14 12:27:07 -0800 | [diff] [blame] | 95 | Ent.EAP: int(EAP.SIM), |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 96 | WifiEnums.SSID_KEY: self.ent_roaming_ssid, |
| 97 | } |
| 98 | self.attn_a = self.attenuators[0] |
Girish Moturu | f1ce420 | 2018-10-20 21:33:00 -0700 | [diff] [blame] | 99 | self.attn_b = self.attenuators[2] |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 100 | # Set screen lock password so ConfigStore is unlocked. |
Ang Li | a9d188f | 2016-02-17 18:03:01 -0800 | [diff] [blame] | 101 | self.dut.droid.setDevicePassword(self.device_password) |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 102 | self.set_attns("default") |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 103 | |
| 104 | def teardown_class(self): |
Ang Li | 8e76718 | 2015-12-09 17:29:24 -0800 | [diff] [blame] | 105 | wutils.reset_wifi(self.dut) |
Hsiu-Chang Chen | 3492edd | 2019-03-27 10:28:58 +0800 | [diff] [blame] | 106 | self.dut.droid.disableDevicePassword(self.device_password) |
Ang Li | a9d188f | 2016-02-17 18:03:01 -0800 | [diff] [blame] | 107 | self.dut.ed.clear_all_events() |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 108 | self.set_attns("default") |
| 109 | |
| 110 | def setup_test(self): |
Ang Li | a9d188f | 2016-02-17 18:03:01 -0800 | [diff] [blame] | 111 | self.dut.droid.wifiStartTrackingStateChange() |
| 112 | self.dut.droid.wakeLockAcquireBright() |
| 113 | self.dut.droid.wakeUpNow() |
Ang Li | 8e76718 | 2015-12-09 17:29:24 -0800 | [diff] [blame] | 114 | wutils.reset_wifi(self.dut) |
Ang Li | a9d188f | 2016-02-17 18:03:01 -0800 | [diff] [blame] | 115 | self.dut.ed.clear_all_events() |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 116 | |
| 117 | def teardown_test(self): |
Ang Li | a9d188f | 2016-02-17 18:03:01 -0800 | [diff] [blame] | 118 | self.dut.droid.wakeLockRelease() |
| 119 | self.dut.droid.goToSleepNow() |
| 120 | self.dut.droid.wifiStopTrackingStateChange() |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 121 | self.set_attns("default") |
| 122 | |
Ang Li | 20377aa | 2016-02-26 13:19:51 -0800 | [diff] [blame] | 123 | def on_fail(self, test_name, begin_time): |
Hsiu-Chang Chen | 0f7d7ae | 2019-06-04 14:26:04 +0800 | [diff] [blame] | 124 | self.dut.take_bug_report(test_name, begin_time) |
Ang Li | 20377aa | 2016-02-26 13:19:51 -0800 | [diff] [blame] | 125 | self.dut.cat_adb_log(test_name, begin_time) |
| 126 | |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 127 | def set_attns(self, attn_val_name): |
| 128 | """Sets attenuation values on attenuators used in this test. |
| 129 | |
| 130 | Args: |
| 131 | attn_val_name: Name of the attenuation value pair to use. |
| 132 | """ |
Ang Li | 8154905 | 2016-06-09 18:51:14 -0700 | [diff] [blame] | 133 | self.log.info("Set attenuation values to %s", |
| 134 | self.attn_vals[attn_val_name]) |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 135 | try: |
| 136 | self.attn_a.set_atten(self.attn_vals[attn_val_name][0]) |
| 137 | self.attn_b.set_atten(self.attn_vals[attn_val_name][1]) |
| 138 | except: |
Ang Li | 8154905 | 2016-06-09 18:51:14 -0700 | [diff] [blame] | 139 | self.log.exception("Failed to set attenuation values %s.", |
| 140 | attn_val_name) |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 141 | raise |
| 142 | |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 143 | def trigger_roaming_and_validate(self, attn_val_name, expected_con): |
| 144 | """Sets attenuators to trigger roaming and validate the DUT connected |
| 145 | to the BSSID expected. |
| 146 | |
| 147 | Args: |
| 148 | attn_val_name: Name of the attenuation value pair to use. |
| 149 | expected_con: The expected info of the network to we expect the DUT |
| 150 | to roam to. |
| 151 | """ |
| 152 | self.set_attns(attn_val_name) |
Ang Li | 8154905 | 2016-06-09 18:51:14 -0700 | [diff] [blame] | 153 | self.log.info("Wait %ss for roaming to finish.", self.roam_interval) |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 154 | time.sleep(self.roam_interval) |
| 155 | try: |
Ang Li | a9d188f | 2016-02-17 18:03:01 -0800 | [diff] [blame] | 156 | self.dut.droid.wakeLockAcquireBright() |
| 157 | self.dut.droid.wakeUpNow() |
Ang Li | 8e76718 | 2015-12-09 17:29:24 -0800 | [diff] [blame] | 158 | wutils.verify_wifi_connection_info(self.dut, expected_con) |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 159 | expected_bssid = expected_con[WifiEnums.BSSID_KEY] |
Ang Li | 8154905 | 2016-06-09 18:51:14 -0700 | [diff] [blame] | 160 | self.log.info("Roamed to %s successfully", expected_bssid) |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 161 | finally: |
Ang Li | a9d188f | 2016-02-17 18:03:01 -0800 | [diff] [blame] | 162 | self.dut.droid.wifiLockRelease() |
| 163 | self.dut.droid.goToSleepNow() |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 164 | |
| 165 | def roaming_between_a_and_b_logic(self, config): |
| 166 | """Test roaming between two enterprise APs. |
| 167 | |
| 168 | Steps: |
| 169 | 1. Make bssid_a visible, bssid_b not visible. |
| 170 | 2. Connect to ent_roaming_ssid. Expect DUT to connect to bssid_a. |
| 171 | 3. Make bssid_a not visible, bssid_b visible. |
| 172 | 4. Expect DUT to roam to bssid_b. |
| 173 | 5. Make bssid_a visible, bssid_b not visible. |
| 174 | 6. Expect DUT to roam back to bssid_a. |
| 175 | """ |
| 176 | expected_con_to_a = { |
| 177 | WifiEnums.SSID_KEY: self.ent_roaming_ssid, |
| 178 | WifiEnums.BSSID_KEY: self.bssid_a, |
| 179 | } |
| 180 | expected_con_to_b = { |
| 181 | WifiEnums.SSID_KEY: self.ent_roaming_ssid, |
| 182 | WifiEnums.BSSID_KEY: self.bssid_b, |
| 183 | } |
| 184 | self.set_attns("a_on_b_off") |
Bindu Mahadev | 66179ef | 2017-01-25 14:39:07 -0800 | [diff] [blame] | 185 | wutils.wifi_connect(self.dut, config) |
Ang Li | 8e76718 | 2015-12-09 17:29:24 -0800 | [diff] [blame] | 186 | wutils.verify_wifi_connection_info(self.dut, expected_con_to_a) |
Ang Li | 8154905 | 2016-06-09 18:51:14 -0700 | [diff] [blame] | 187 | self.log.info("Roaming from %s to %s", self.bssid_a, self.bssid_b) |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 188 | self.trigger_roaming_and_validate("b_on_a_off", expected_con_to_b) |
Ang Li | 8154905 | 2016-06-09 18:51:14 -0700 | [diff] [blame] | 189 | self.log.info("Roaming from %s to %s", self.bssid_b, self.bssid_a) |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 190 | self.trigger_roaming_and_validate("a_on_b_off", expected_con_to_a) |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 191 | |
| 192 | """ Tests Begin """ |
Ang Li | 8154905 | 2016-06-09 18:51:14 -0700 | [diff] [blame] | 193 | |
Girish Moturu | f14d45c | 2017-06-27 13:00:08 +0530 | [diff] [blame] | 194 | @test_tracker_info(uuid="b15e4b3f-841d-428d-87ac-272f29f06e14") |
| 195 | def test_roaming_with_config_tls(self): |
| 196 | self.roaming_between_a_and_b_logic(self.config_tls) |
| 197 | |
| 198 | @test_tracker_info(uuid="d349cfec-b4af-48b2-88b7-744f5de25d43") |
| 199 | def test_roaming_with_config_ttls_none(self): |
| 200 | config = dict(self.config_ttls) |
| 201 | config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.NONE.value |
| 202 | self.roaming_between_a_and_b_logic(config) |
| 203 | |
| 204 | @test_tracker_info(uuid="89b8161c-754e-4138-831d-5fe40f521ce4") |
| 205 | def test_roaming_with_config_ttls_pap(self): |
| 206 | config = dict(self.config_ttls) |
| 207 | config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.PAP.value |
| 208 | self.roaming_between_a_and_b_logic(config) |
| 209 | |
| 210 | @test_tracker_info(uuid="d4925470-924b-4d03-8437-83e26b5f2df3") |
| 211 | def test_roaming_with_config_ttls_mschap(self): |
| 212 | config = dict(self.config_ttls) |
| 213 | config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAP.value |
| 214 | self.roaming_between_a_and_b_logic(config) |
| 215 | |
| 216 | @test_tracker_info(uuid="206b1327-dd9c-4742-8717-e7bf2a04eed6") |
| 217 | def test_roaming_with_config_ttls_mschapv2(self): |
| 218 | config = dict(self.config_ttls) |
| 219 | config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAPV2.value |
| 220 | self.roaming_between_a_and_b_logic(config) |
| 221 | |
| 222 | @test_tracker_info(uuid="c2c0168b-2933-4954-af62-fb41f42dc45a") |
| 223 | def test_roaming_with_config_ttls_gtc(self): |
| 224 | config = dict(self.config_ttls) |
| 225 | config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.GTC.value |
| 226 | self.roaming_between_a_and_b_logic(config) |
| 227 | |
| 228 | @test_tracker_info(uuid="481c4102-8f5b-4fcd-95cc-5e3285f47985") |
| 229 | def test_roaming_with_config_peap_mschapv2(self): |
| 230 | config = dict(self.config_peap) |
| 231 | config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAPV2.value |
| 232 | self.roaming_between_a_and_b_logic(config) |
| 233 | |
| 234 | @test_tracker_info(uuid="404155d4-33a7-42b3-b369-5f2d63d19f16") |
| 235 | def test_roaming_with_config_peap_gtc(self): |
| 236 | config = dict(self.config_peap) |
| 237 | config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.GTC.value |
| 238 | self.roaming_between_a_and_b_logic(config) |
Ang Li | 8154905 | 2016-06-09 18:51:14 -0700 | [diff] [blame] | 239 | |
Ang Li | 73697b3 | 2015-12-03 00:41:53 +0000 | [diff] [blame] | 240 | """ Tests End """ |