218 lines
9.1 KiB
Python
218 lines
9.1 KiB
Python
|
|
# !/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)
|