# !/usr/bin/env python3.4 # # Copyright 2017 - 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. from acts.libs.ota import ota_updater import acts.signals as signals 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 import acts.utils as utils from WifiAutoUpdateTest import WifiAutoUpdateTest WifiEnums = wutils.WifiEnums SSID = WifiEnums.SSID_KEY PWD = WifiEnums.PWD_KEY NETID = WifiEnums.NETID_KEY # Default timeout used for reboot, toggle WiFi and Airplane mode, # for the system to settle down after the operation. EAP = WifiEnums.Eap Ent = WifiEnums.Enterprise WPA3_SECURITY = "SUITE_B_192" class WifiWpa3AutoUpdateTest(WifiAutoUpdateTest): """Tests for APIs in Android's WifiManager class. Test Bed Requirement: * One Android device * Several Wi-Fi networks visible to the device, including an open Wi-Fi network. """ def __init__(self, configs): super().__init__(configs) self.tests = ("test_check_wpa3_wifi_state_after_au", "test_verify_wpa3_networks_after_au", "test_wpa3_configstore_after_au", "test_all_wpa3_networks_connectable_after_au", "test_check_wpa3_wifi_toggling_after_au", "test_wpa3_connection_to_new_networks", "test_reset_wpa3_wifi_after_au") def setup_class(self): super(WifiBaseTest, self).setup_class() ota_updater.initialize(self.user_params, self.android_devices) self.dut = self.android_devices[0] self.dut_client = self.android_devices[1] wutils.wifi_test_device_init(self.dut) wutils.wifi_toggle_state(self.dut, True) # configure APs req_params = [ "ec2_ca_cert", "ec2_client_cert", "ec2_client_key", "rsa3072_ca_cert", "rsa3072_client_cert", "rsa3072_client_key", "wpa3_ec2_network", "wpa3_rsa3072_network", "rsa2048_client_cert", "rsa2048_client_key", "rsa3072_client_cert_expired", "rsa3072_client_cert_corrupted", "rsa3072_client_cert_unsigned", "rsa3072_client_key_unsigned", "wpa3_sae_gcmp_128", "wpa3_sae_gcmp_256", "owe_networks", "sae_networks" ] self.unpack_userparams(req_param_names=req_params) self.owe_2g = self.owe_networks[0]["2g"] self.owe_5g = self.owe_networks[0]["5g"] self.wpa3_personal_2g = self.sae_networks[0]["2g"] self.wpa3_personal_5g = self.sae_networks[0]["5g"] self.config_rsa3072_tls = { Ent.EAP: int(EAP.TLS), Ent.CA_CERT: self.rsa3072_ca_cert, WifiEnums.SSID_KEY: self.wpa3_rsa3072_network[WifiEnums.SSID_KEY], Ent.CLIENT_CERT: self.rsa3072_client_cert, Ent.PRIVATE_KEY_ID: self.rsa3072_client_key, WifiEnums.SECURITY: WPA3_SECURITY, "identity": self.wpa3_rsa3072_network["identity"], "domain_suffix_match": self.wpa3_rsa3072_network["domain"] } # saved & connected networks, network suggestions # and new networks self.saved_networks = [self.wpa3_sae_gcmp_256] self.network_suggestions = [self.owe_2g] self.connected_networks = [ self.config_rsa3072_tls, self.wpa3_personal_5g ] self.new_networks = [self.wpa3_personal_2g] # add pre ota upgrade configuration self.wifi_config_list = [] self.pre_default_mac = {} self.pre_random_mac = {} self.pst_default_mac = {} self.pst_random_mac = {} self.add_pre_update_configuration() # Run OTA below, if ota fails then abort all tests. try: ota_updater.update(self.dut) except Exception as e: raise signals.TestAbortClass( "Failed up apply OTA update. Aborting tests: %s" % e) ### Tests @test_tracker_info(uuid="4d17a21c-3db6-4336-84ac-f3317e4a7fca") @WifiBaseTest.wifi_test_wrap def test_check_wpa3_wifi_state_after_au(self): """Check if the state of WiFi is enabled after Auto-update.""" if not self.dut.droid.wifiCheckState(): raise signals.TestFailure("WiFi is disabled after Auto-update!!!") @test_tracker_info(uuid="4dd106b0-6390-47d2-9b6d-00f21a0535f1") @WifiBaseTest.wifi_test_wrap def test_verify_wpa3_networks_after_au(self): """Check if the previously added networks are intact. Steps: Number of networs should be the same and match each network. """ self.check_networks_after_autoupdate(self.wifi_config_list) @test_tracker_info(uuid="4e5107d1-17cc-4c4d-aee5-38052dec5ddd") @WifiBaseTest.wifi_test_wrap def test_wpa3_configstore_after_au(self): """Verify DUT automatically connects to wifi networks after ota. Steps: 1. Connect to two wifi networks pre ota. 2. Verify DUT automatically connects to 1 after ota. 3. Re-connect to the other wifi network. """ wifi_info = self.dut.droid.wifiGetConnectionInfo() self.pst_default_mac[wifi_info[SSID]] = self.get_sta_mac_address() self.pst_random_mac[wifi_info[SSID]] = \ self.dut.droid.wifigetRandomizedMacAddress(wifi_info) reconnect_to = self.get_enabled_network(self.wifi_config_list[1], self.wifi_config_list[2]) wutils.start_wifi_connection_scan_and_ensure_network_found( self.dut, reconnect_to[SSID]) if reconnect_to[SSID] == self.connected_networks[0][SSID]: wutils.wifi_connect(self.dut, self.connected_networks[0], num_of_tries=6) else: wutils.wifi_connect(self.dut, self.connected_networks[1], num_of_tries=6) connect_data = self.dut.droid.wifiGetConnectionInfo() connect_ssid = connect_data[SSID] self.log.info("Expected SSID = %s" % reconnect_to[SSID]) self.log.info("Connected SSID = %s" % connect_ssid) if connect_ssid != reconnect_to[SSID]: raise signals.TestFailure( "Device failed to reconnect to the correct" " network after reboot.") self.pst_default_mac[wifi_info[SSID]] = self.get_sta_mac_address() self.pst_random_mac[wifi_info[SSID]] = \ self.dut.droid.wifigetRandomizedMacAddress(wifi_info) for network in self.connected_networks: wutils.wifi_forget_network(self.dut, network[SSID]) @test_tracker_info(uuid="f1b59dde-b019-46c4-84b8-cf20f4afa08a") @WifiBaseTest.wifi_test_wrap def test_wpa3_connection_to_new_networks(self): """Check if we can connect to new networks after Auto-update. Steps: 1. Connect to a wpa3 network. 2. Forget ntworks added in 1. """ for network in self.new_networks: wutils.connect_to_wifi_network(self.dut, network) for network in self.new_networks: wutils.wifi_forget_network(self.dut, network[SSID]) @test_tracker_info(uuid="542a39c3-eea0-445c-89ae-8c74c6afb0bf") @WifiBaseTest.wifi_test_wrap def test_all_wpa3_networks_connectable_after_au(self): """Check if previously added networks are connectable. Steps: 1. Connect to previously added wpa3 network using network id. """ network = self.wifi_config_list[0] if not wutils.connect_to_wifi_network_with_id(self.dut, network[NETID], network[SSID]): raise signals.TestFailure("Failed to connect to %s after OTA" % network[SSID]) wutils.wifi_forget_network(self.dut, network[SSID]) @test_tracker_info(uuid="68a34667-aca2-4630-b2fa-c25f1d234a92") @WifiBaseTest.wifi_test_wrap def test_check_wpa3_wifi_toggling_after_au(self): """Check if WiFi can be toggled ON/OFF after auto-update.""" self.log.debug("Going from on to off.") wutils.wifi_toggle_state(self.dut, False) self.log.debug("Going from off to on.") wutils.wifi_toggle_state(self.dut, True) @test_tracker_info(uuid="39ba98de-cb49-4475-a218-7470122af885") @WifiBaseTest.wifi_test_wrap def test_reset_wpa3_wifi_after_au(self): """"Check if WiFi can be reset after auto-update.""" wutils.reset_wifi(self.dut)