| #!/usr/bin/env python3 |
| # |
| # Copyright 2020 - The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| import time |
| |
| from acts import asserts |
| from acts import utils |
| from acts import signals |
| from acts.controllers.openwrt_lib.openwrt_constants import OpenWrtWifiSecurity |
| from acts.test_decorators import test_tracker_info |
| import acts_contrib.test_utils.wifi.wifi_test_utils as wutils |
| from acts_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest |
| |
| |
| WifiEnums = wutils.WifiEnums |
| |
| |
| class WifiWpaPersonalTest(WifiBaseTest): |
| """Test for WPA Personal. |
| |
| Test Bed Requirement: |
| * One Android device without sim card. |
| * One OpenWrt Wi-Fi AP. |
| """ |
| |
| def setup_class(self): |
| super().setup_class() |
| self.dut = self.android_devices[0] |
| |
| if "OpenWrtAP" in self.user_params: |
| self.openwrt = self.access_points[0] |
| self.configure_openwrt_ap_and_start(wpa1_network=True) |
| |
| req_params = ["OpenWrtAP", "roaming_attn"] |
| opt_params = [] |
| self.unpack_userparams(req_params, opt_params) |
| self.wpa_psk_2g = self.wpa1_networks[0]["2g"] |
| self.wpa_psk_5g = self.wpa1_networks[0]["5g"] |
| |
| def setup_test(self): |
| super().setup_test() |
| for ad in self.android_devices: |
| ad.droid.wakeLockAcquireBright() |
| ad.droid.wakeUpNow() |
| wutils.wifi_toggle_state(ad, True) |
| |
| def teardown_test(self): |
| super().teardown_test() |
| for ad in self.android_devices: |
| ad.droid.wakeLockRelease() |
| ad.droid.goToSleepNow() |
| wutils.reset_wifi(self.dut) |
| utils.force_airplane_mode(self.dut, False) |
| |
| def teardown_class(self): |
| super().teardown_class() |
| |
| def on_fail(self, test_name, begin_time): |
| super().on_fail(test_name, begin_time) |
| self.dut.cat_adb_log(test_name, begin_time) |
| self.dut.take_bug_report(test_name, begin_time) |
| |
| def verify_wpa_network_encryption(self, encryption): |
| result = wutils.get_wlan0_link(self.dut) |
| if encryption == "psk+ccmp": |
| asserts.assert_true( |
| result["pairwise_cipher"] == "CCMP" and |
| result["group_cipher"] == "CCMP", |
| "DUT does not connect to {} encryption network".format(encryption)) |
| elif encryption == "psk+tkip": |
| asserts.assert_true( |
| result["pairwise_cipher"] == "TKIP" and |
| result["group_cipher"] == "TKIP", |
| "DUT does not connect to {} encryption network".format(encryption)) |
| elif encryption == "psk+tkip+ccmp": |
| asserts.assert_true( |
| result["pairwise_cipher"] == "CCMP" and |
| result["group_cipher"] == "TKIP", |
| "DUT does not connect to {} encryption network".format(encryption)) |
| |
| ### Tests ### |
| |
| @test_tracker_info(uuid="0c68a772-b70c-47d6-88ab-1b069c1d8005") |
| def test_connect_to_wpa_psk_ccmp_2g(self): |
| """Test connection between DUT and WPA PSK CCMP 2G. |
| |
| Steps: |
| Change AP's security type to "WPA" and cipher to "CCMP". |
| Connect to 2g network. |
| """ |
| self.openwrt.log.info("Enable WPA-PSK CCMP on OpenWrt AP") |
| self.openwrt.set_wpa_encryption(OpenWrtWifiSecurity.WPA_PSK_CCMP) |
| wutils.start_wifi_connection_scan_and_ensure_network_found( |
| self.dut, self.wpa_psk_2g[WifiEnums.SSID_KEY]) |
| wutils.connect_to_wifi_network(self.dut, self.wpa_psk_2g) |
| self.verify_wpa_network_encryption(OpenWrtWifiSecurity.WPA_PSK_CCMP) |
| |
| @test_tracker_info(uuid="4722dffc-2960-4459-9729-0f8114af2321") |
| def test_connect_to_wpa_psk_ccmp_5g(self): |
| """Test connection between DUT and WPA PSK CCMP 5G. |
| |
| Steps: |
| Change AP's security type to "WPA" and cipher to "CCMP". |
| Connect to 5g network. |
| """ |
| self.openwrt.log.info("Enable WPA-PSK CCMP on OpenWrt AP") |
| self.openwrt.set_wpa_encryption(OpenWrtWifiSecurity.WPA_PSK_CCMP) |
| wutils.start_wifi_connection_scan_and_ensure_network_found( |
| self.dut, self.wpa_psk_5g[WifiEnums.SSID_KEY]) |
| wutils.connect_to_wifi_network(self.dut, self.wpa_psk_5g) |
| self.verify_wpa_network_encryption(OpenWrtWifiSecurity.WPA_PSK_CCMP) |
| |
| @test_tracker_info(uuid="4759503e-ef9c-430b-9306-b96a347ca3de") |
| def test_connect_to_wpa_psk_tkip_2g(self): |
| """Test connection between DUT and WPA PSK TKIP 2G. |
| |
| Steps: |
| Change AP's security type to "WPA" and cipher to "TKIP". |
| Connect to 2g network. |
| """ |
| self.openwrt.log.info("Enable WPA-TKIP on OpenWrt AP") |
| self.openwrt.set_wpa_encryption(OpenWrtWifiSecurity.WPA_PSK_TKIP) |
| wutils.start_wifi_connection_scan_and_ensure_network_found( |
| self.dut, self.wpa_psk_2g[WifiEnums.SSID_KEY]) |
| wutils.connect_to_wifi_network(self.dut, self.wpa_psk_2g) |
| self.verify_wpa_network_encryption(OpenWrtWifiSecurity.WPA_PSK_TKIP) |
| |
| @test_tracker_info(uuid="9c836ca6-af14-4d6b-a98e-227fb29e84ee") |
| def test_connect_to_wpa_psk_tkip_5g(self): |
| """Test connection between DUT and WPA PSK TKIP 5G. |
| |
| Steps: |
| Change AP's security type to "WPA" and cipher to "TKIP". |
| Connect to 5g network. |
| """ |
| self.openwrt.log.info("Enable WPA-PSK TKIP on OpenWrt AP") |
| self.openwrt.set_wpa_encryption(OpenWrtWifiSecurity.WPA_PSK_TKIP) |
| wutils.start_wifi_connection_scan_and_ensure_network_found( |
| self.dut, self.wpa_psk_5g[WifiEnums.SSID_KEY]) |
| wutils.connect_to_wifi_network(self.dut, self.wpa_psk_5g) |
| |
| @test_tracker_info(uuid="c03b362b-cd03-4e34-a99a-ef80a9db6db9") |
| def test_connect_to_wpa_psk_tkip_and_ccmp_2g(self): |
| """Test connection between DUT and WPA PSK CCMP+TKIP 2G. |
| |
| Steps: |
| Change AP's security type to "WPA" and cipher to "CCMP and TKIP". |
| Connect to 2g network. |
| """ |
| self.openwrt.log.info("Enable WPA-PSK CCMP and TKIP on OpenWrt AP") |
| self.openwrt.set_wpa_encryption(OpenWrtWifiSecurity.WPA_PSK_TKIP_AND_CCMP) |
| wutils.start_wifi_connection_scan_and_ensure_network_found( |
| self.dut, self.wpa_psk_2g[WifiEnums.SSID_KEY]) |
| wutils.connect_to_wifi_network(self.dut, self.wpa_psk_2g) |
| self.verify_wpa_network_encryption( |
| OpenWrtWifiSecurity.WPA_PSK_TKIP_AND_CCMP) |
| |
| @test_tracker_info(uuid="203d7e7f-536d-4feb-9aa2-648f1f9a685d") |
| def test_connect_to_wpa_psk_tkip_and_ccmp_5g(self): |
| """Test connection between DUT and WPA PSK CCMP+TKIP 5G. |
| |
| Steps: |
| Change AP's security type to "WPA" and cipher to "CCMP and TKIP". |
| Connect to 5g network. |
| """ |
| self.openwrt.log.info("Enable WPA-PSK CCMP and TKIP on OpenWrt AP") |
| self.openwrt.set_wpa_encryption(OpenWrtWifiSecurity.WPA_PSK_TKIP_AND_CCMP) |
| wutils.start_wifi_connection_scan_and_ensure_network_found( |
| self.dut, self.wpa_psk_5g[WifiEnums.SSID_KEY]) |
| wutils.connect_to_wifi_network(self.dut, self.wpa_psk_5g) |
| self.verify_wpa_network_encryption( |
| OpenWrtWifiSecurity.WPA_PSK_TKIP_AND_CCMP) |
| |
| @test_tracker_info(uuid="20a41f61-4fda-4fe9-82ee-482ecd8c82eb") |
| def test_connect_to_wpa_psk_ccmp_2g_after_airplane_mode(self): |
| """Test Wi-Fi reconnection after enabling Airplane Mode. |
| |
| Steps: |
| DUT connect to 2GHz Wi-Fi network. |
| DUT turns ON Airplane Mode. |
| DUT turns ON Wi-Fi. |
| DUT verify internet connection with HTTP ping. |
| DUT turns OFF Airplane Mode. |
| DUT verify internet connection with HTTP ping. |
| """ |
| self.openwrt.log.info("Enable WPA-PSK CCMP on OpenWrt AP") |
| self.openwrt.set_wpa_encryption(OpenWrtWifiSecurity.WPA_PSK_CCMP) |
| wutils.start_wifi_connection_scan_and_ensure_network_found( |
| self.dut, self.wpa_psk_2g[WifiEnums.SSID_KEY]) |
| wutils.connect_to_wifi_network(self.dut, self.wpa_psk_2g) |
| self.verify_wpa_network_encryption(OpenWrtWifiSecurity.WPA_PSK_CCMP) |
| # Turn ON DUT"s Airplane Mode. |
| self.dut.log.info("Toggle Airplane Mode ON") |
| utils.force_airplane_mode(self.dut, True) |
| self.dut.log.info("Toggle Wi-Fi ON") |
| # Turn ON DUT"s Wi-Fi |
| wutils.wifi_toggle_state(self.dut, True) |
| wutils.wait_for_connect(self.dut, |
| self.wpa_psk_2g[WifiEnums.SSID_KEY]) |
| wutils.validate_connection(self.dut) |
| utils.force_airplane_mode(self.dut, False) |
| wutils.validate_connection(self.dut) |
| |
| @test_tracker_info(uuid="df89c92b-a30c-4485-ab45-daef5240c027") |
| def test_connect_to_wpa_psk_ccmp_2g_after_wifi_off(self): |
| """Test Wi-Fi reconnection after Turn OFF Wi-Fi. |
| |
| Steps: |
| DUT connect to 2GHz Wi-Fi network. |
| DUT turns OFF Wi-Fi. |
| DUT turns ON Wi-Fi. |
| DUT verify internet connection with HTTP ping. |
| """ |
| self.openwrt.log.info("Enable WPA-PSK CCMP on OpenWrt AP") |
| self.openwrt.set_wpa_encryption(OpenWrtWifiSecurity.WPA_PSK_CCMP) |
| wutils.start_wifi_connection_scan_and_ensure_network_found( |
| self.dut, self.wpa_psk_2g[WifiEnums.SSID_KEY]) |
| wutils.connect_to_wifi_network(self.dut, self.wpa_psk_2g) |
| self.verify_wpa_network_encryption(OpenWrtWifiSecurity.WPA_PSK_CCMP) |
| self.dut.log.info("Toggle Wi-Fi OFF") |
| # Turn OFF DUT"s Wi-Fi then Turn if ON. |
| wutils.wifi_toggle_state(self.dut, False) |
| wutils.wifi_toggle_state(self.dut, True) |
| wutils.wait_for_connect(self.dut, |
| self.wpa_psk_2g[WifiEnums.SSID_KEY]) |
| wutils.validate_connection(self.dut) |
| |
| @test_tracker_info(uuid="c591e687-340c-42e6-8d85-58a1f930b6b1") |
| def test_connect_to_wpa_psk_ccmp_2g_after_suspend_resume(self): |
| """Test Wi-Fi reconnection after Suspend. |
| |
| Steps: |
| DUT connect to 2GHz Wi-Fi network. |
| DUT suspend and resume. |
| DUT verify internet connection with HTTP ping. |
| """ |
| self.openwrt.log.info("Enable WPA-PSK CCMP on OpenWrt AP") |
| self.openwrt.set_wpa_encryption(OpenWrtWifiSecurity.WPA_PSK_CCMP) |
| wutils.start_wifi_connection_scan_and_ensure_network_found( |
| self.dut, self.wpa_psk_2g[WifiEnums.SSID_KEY]) |
| wutils.connect_to_wifi_network(self.dut, self.wpa_psk_2g) |
| self.verify_wpa_network_encryption(OpenWrtWifiSecurity.WPA_PSK_CCMP) |
| self.dut.log.info("Suspend the DUT and wait for 10 seconds") |
| # Suspend and Resume the DUT. |
| self.dut.go_to_sleep() |
| time.sleep(10) |
| self.dut.log.info("Resume the DUT") |
| self.dut.wakeup_screen() |
| wutils.validate_connection(self.dut) |
| |
| @test_tracker_info(uuid="d3e34869-f2ae-4614-983d-19be238d8499") |
| def test_connect_to_wpa_psk_ccmp_2g_after_reboot(self): |
| """Test Wi-Fi reconnection after reboot. |
| |
| Steps: |
| DUT connect to 2GHz Wi-Fi network. |
| DUT reboot. |
| DUT verify internet connection with HTTP ping. |
| """ |
| self.openwrt.log.info("Enable WPA-PSK CCMP on OpenWrt AP") |
| self.openwrt.set_wpa_encryption(OpenWrtWifiSecurity.WPA_PSK_CCMP) |
| wutils.start_wifi_connection_scan_and_ensure_network_found( |
| self.dut, self.wpa_psk_2g[WifiEnums.SSID_KEY]) |
| wutils.connect_to_wifi_network(self.dut, self.wpa_psk_2g) |
| self.verify_wpa_network_encryption(OpenWrtWifiSecurity.WPA_PSK_CCMP) |
| # Reboot the DUT. |
| self.dut.log.info("Reboot the DUT") |
| self.dut.reboot() |
| self.dut.wait_for_boot_completion() |
| wutils.wait_for_connect(self.dut, |
| self.wpa_psk_2g[WifiEnums.SSID_KEY]) |
| wutils.validate_connection(self.dut) |
| |
| @test_tracker_info(uuid="ebd8dd7f-dc36-4e99-b18c-5f725a2f88b2") |
| def test_connect_to_wpa_psk_ccmp_2g_after_incorrect_password(self): |
| """Test Wi-Fi reconnection after incorrect password. |
| |
| Steps: |
| DUT connect to 2GHz Wi-Fi network. |
| DUT try to connect to the Wi-Fi network with incorrect password. |
| Connection fail as expected. |
| DUT connect to the Wi-Fi network with correct password. |
| DUT verify internet connection with HTTP ping. |
| """ |
| self.openwrt.log.info("Enable WPA-PSK CCMP on OpenWrt AP") |
| self.openwrt.set_wpa_encryption(OpenWrtWifiSecurity.WPA_PSK_CCMP) |
| wutils.start_wifi_connection_scan_and_ensure_network_found( |
| self.dut, self.wpa_psk_2g[WifiEnums.SSID_KEY]) |
| self.wpa_psk_2g_fail = self.wpa_psk_2g.copy() |
| self.wpa_psk_2g_fail["password"] = "incorrect_password" |
| # Try to connect a Wi-Fi network with incorrect passwlrd. |
| try: |
| self.dut.log.info("Connect to Wi-Fi with wrong password") |
| wutils.wifi_connect(self.dut, self.wpa_psk_2g_fail, num_of_tries=1) |
| except: |
| self.dut.log.info("Connect to Wi-Fi with correct password") |
| wutils.wifi_connect(self.dut, self.wpa_psk_2g) |
| else: |
| raise signals.TestFailure("DUT connect to Wi-Fi with wrong password") |
| self.verify_wpa_network_encryption(OpenWrtWifiSecurity.WPA_PSK_CCMP) |
| wutils.validate_connection(self.dut) |
| |
| @test_tracker_info(uuid="d20fc634-8dcc-4336-9640-2a6907ca1894") |
| def test_connect_to_wpa_psk_ccmp_2g_after_out_of_range(self): |
| """Test Wi-Fi reconnection after out of range. |
| |
| Steps: |
| DUT connect to 2GHz Wi-Fi network. |
| DUT out of Wi-Fi range. |
| Make Wi-Fi network is not visible by DUT. |
| DUT back in Wi-Fi range. |
| Wi-Fi network is visible by DUT. |
| DUT connect to the Wi-Fi network. |
| DUT verify internet connection with HTTP ping. |
| """ |
| self.openwrt.log.info("Enable WPA-PSK CCMP on OpenWrt AP") |
| self.openwrt.set_wpa_encryption(OpenWrtWifiSecurity.WPA_PSK_CCMP) |
| wutils.start_wifi_connection_scan_and_ensure_network_found( |
| self.dut, self.wpa_psk_2g[WifiEnums.SSID_KEY]) |
| wutils.connect_to_wifi_network(self.dut, self.wpa_psk_2g) |
| # Make the DUT out of range. |
| wutils.set_attns(self.attenuators, |
| "atten1_off_atten2_off", |
| self.roaming_attn) |
| wutils.start_wifi_connection_scan_and_ensure_network_not_found( |
| self.dut, |
| self.wpa_psk_2g[WifiEnums.SSID_KEY]) |
| # Make the DUT back in range. |
| wutils.set_attns(self.attenuators, |
| "atten1_on_atten2_on", |
| self.roaming_attn) |
| wutils.start_wifi_connection_scan_and_ensure_network_found( |
| self.dut, self.wpa_psk_2g[WifiEnums.SSID_KEY]) |
| wutils.connect_to_wifi_network(self.dut, self.wpa_psk_2g) |