Add additional wifi test cases
This CL includes below changes:
- Support to create wep and wpa networks by WifiBaseTest
- Add test cases for wep/wpa networks
- Add 5G network for wifi scan test
Bug: 79666070
Test: Manual
Change-Id: I61de9b8156222b8fdc6b6f3eaf60d7257fe26aee
diff --git a/acts/framework/acts/test_utils/wifi/WifiBaseTest.py b/acts/framework/acts/test_utils/wifi/WifiBaseTest.py
index d89ad97..219c878 100755
--- a/acts/framework/acts/test_utils/wifi/WifiBaseTest.py
+++ b/acts/framework/acts/test_utils/wifi/WifiBaseTest.py
@@ -44,12 +44,13 @@
for attenuator in self.attenuators:
attenuator.set_atten(0)
- def get_wpa2_network(
+ def get_psk_network(
self,
mirror_ap,
reference_networks,
hidden=False,
same_ssid=False,
+ security_mode=hostapd_constants.WPA2_STRING,
ssid_length_2g=hostapd_constants.AP_SSID_LENGTH_2G,
ssid_length_5g=hostapd_constants.AP_SSID_LENGTH_5G,
passphrase_length_2g=hostapd_constants.AP_PASSPHRASE_LENGTH_2G,
@@ -73,8 +74,8 @@
"""
network_dict_2g = {}
network_dict_5g = {}
- ref_5g_security = hostapd_constants.WPA2_STRING
- ref_2g_security = hostapd_constants.WPA2_STRING
+ ref_5g_security = security_mode
+ ref_2g_security = security_mode
if same_ssid:
ref_2g_ssid = 'xg_%s' % utils.rand_ascii_str(ssid_length_2g)
@@ -168,6 +169,76 @@
break
return {"2g": network_dict_2g, "5g": network_dict_5g}
+ def get_wep_network(
+ self,
+ mirror_ap,
+ networks,
+ hidden=False,
+ same_ssid=False,
+ ssid_length_2g=hostapd_constants.AP_SSID_LENGTH_2G,
+ ssid_length_5g=hostapd_constants.AP_SSID_LENGTH_5G,
+ passphrase_length_2g=hostapd_constants.AP_PASSPHRASE_LENGTH_2G,
+ passphrase_length_5g=hostapd_constants.AP_PASSPHRASE_LENGTH_5G):
+ """Generates SSID and passphrase for a WEP network using random
+ generator.
+
+ Args:
+ mirror_ap: Boolean, determines if both APs use the same hostapd
+ config or different configs.
+ networks: List of WEP networks.
+ same_ssid: Boolean, determines if both bands on AP use the same
+ SSID.
+ ssid_length_2gecond AP Int, number of characters to use for 2G SSID.
+ ssid_length_5g: Int, number of characters to use for 5G SSID.
+ passphrase_length_2g: Int, length of password for 2G network.
+ passphrase_length_5g: Int, length of password for 5G network.
+
+ Returns: A dict of 2G and 5G network lists for hostapd configuration.
+
+ """
+ network_dict_2g = {}
+ network_dict_5g = {}
+ ref_5g_security = hostapd_constants.WEP_STRING
+ ref_2g_security = hostapd_constants.WEP_STRING
+
+ if same_ssid:
+ ref_2g_ssid = 'xg_%s' % utils.rand_ascii_str(ssid_length_2g)
+ ref_5g_ssid = ref_2g_ssid
+
+ ref_2g_passphrase = utils.rand_hex_str(passphrase_length_2g)
+ ref_5g_passphrase = ref_2g_passphrase
+
+ else:
+ ref_2g_ssid = '2g_%s' % utils.rand_ascii_str(ssid_length_2g)
+ ref_2g_passphrase = utils.rand_hex_str(passphrase_length_2g)
+
+ ref_5g_ssid = '5g_%s' % utils.rand_ascii_str(ssid_length_5g)
+ ref_5g_passphrase = utils.rand_hex_str(passphrase_length_5g)
+
+ network_dict_2g = {
+ "SSID": ref_2g_ssid,
+ "security": ref_2g_security,
+ "wepKeys": [ref_2g_passphrase] * 4,
+ "hiddenSSID": hidden
+ }
+
+ network_dict_5g = {
+ "SSID": ref_5g_ssid,
+ "security": ref_5g_security,
+ "wepKeys": [ref_2g_passphrase] * 4,
+ "hiddenSSID": hidden
+ }
+
+ ap = 0
+ for ap in range(MAX_AP_COUNT):
+ networks.append({
+ "2g": copy.copy(network_dict_2g),
+ "5g": copy.copy(network_dict_5g)
+ })
+ if not mirror_ap:
+ break
+ return {"2g": network_dict_2g, "5g": network_dict_5g}
+
def update_bssid(self, ap_instance, ap, network, band):
"""Get bssid and update network dictionary.
@@ -184,7 +255,10 @@
# TODO:(bamahadev) Change all occurances of reference_networks
# to wpa_networks.
self.reference_networks[ap_instance][band]["bssid"] = bssid
-
+ if network["security"] == hostapd_constants.WPA_STRING:
+ self.wpa_networks[ap_instance][band]["bssid"] = bssid
+ if network["security"] == hostapd_constants.WEP_STRING:
+ self.wep_networks[ap_instance][band]["bssid"] = bssid
if network["security"] == 'none':
self.open_network[ap_instance][band]["bssid"] = bssid
@@ -227,6 +301,8 @@
hidden=False,
same_ssid=False,
mirror_ap=True,
+ wpa_network=False,
+ wep_network=False,
ap_count=1):
asserts.assert_true(
len(self.user_params["AccessPoint"]) == 2,
@@ -247,6 +323,10 @@
self.user_params["reference_networks"] = []
self.user_params["open_network"] = []
+ if wpa_network:
+ self.user_params["wpa_networks"] = []
+ if wep_network:
+ self.user_params["wep_networks"] = []
for count in range(config_count):
@@ -259,7 +339,7 @@
network_list_2g.append({"channel": channel_2g})
network_list_5g.append({"channel": channel_5g})
- networks_dict = self.get_wpa2_network(
+ networks_dict = self.get_psk_network(
mirror_ap,
self.user_params["reference_networks"],
hidden=hidden,
@@ -285,6 +365,29 @@
network_list_2g.append(networks_dict["2g"])
network_list_5g.append(networks_dict["5g"])
+ if wpa_network:
+ networks_dict = self.get_psk_network(
+ mirror_ap,
+ self.user_params["wpa_networks"],
+ hidden=hidden,
+ same_ssid=same_ssid,
+ security_mode=hostapd_constants.WPA_STRING)
+ self.wpa_networks = self.user_params["wpa_networks"]
+
+ network_list_2g.append(networks_dict["2g"])
+ network_list_5g.append(networks_dict["5g"])
+
+ if wep_network:
+ networks_dict = self.get_wep_network(
+ mirror_ap,
+ self.user_params["wep_networks"],
+ hidden=hidden,
+ same_ssid=same_ssid)
+ self.wep_networks = self.user_params["wep_networks"]
+
+ network_list_2g.append(networks_dict["2g"])
+ network_list_5g.append(networks_dict["5g"])
+
orig_network_list_5g = copy.copy(network_list_5g)
orig_network_list_2g = copy.copy(network_list_2g)
@@ -323,7 +426,16 @@
security=hostapd_security.Security(
security_mode=network["security"],
password=network["password"])))
- elif "password" not in network:
+ elif "wepKeys" in network:
+ bss_settings.append(
+ hostapd_bss_settings.BssSettings(
+ name=network["SSID"],
+ ssid=network["SSID"],
+ hidden=network["hiddenSSID"],
+ security=hostapd_security.Security(
+ security_mode=network["security"],
+ password=network["wepKeys"][0])))
+ else:
bss_settings.append(
hostapd_bss_settings.BssSettings(
name=network["SSID"],
@@ -340,6 +452,16 @@
password=hostapd_config_settings["password"]),
bss_settings=bss_settings,
profile_name='whirlwind')
+ elif "wepKeys" in hostapd_config_settings:
+ config = hostapd_ap_preset.create_ap_preset(
+ channel=ap_settings["channel"],
+ ssid=hostapd_config_settings["SSID"],
+ hidden=hostapd_config_settings["hiddenSSID"],
+ security=hostapd_security.Security(
+ security_mode=hostapd_config_settings["security"],
+ password=hostapd_config_settings["wepKeys"][0]),
+ bss_settings=bss_settings,
+ profile_name='whirlwind')
else:
config = hostapd_ap_preset.create_ap_preset(
channel=ap_settings["channel"],
diff --git a/acts/framework/acts/utils.py b/acts/framework/acts/utils.py
index 19ac98c..f671f33 100755
--- a/acts/framework/acts/utils.py
+++ b/acts/framework/acts/utils.py
@@ -326,6 +326,19 @@
return ''.join(letters)
+def rand_hex_str(length):
+ """Generates a random string of specified length, composed of hex digits
+
+ Args:
+ length: The number of characters in the string.
+
+ Returns:
+ The random string generated.
+ """
+ letters = [random.choice(string.hexdigits) for i in range(length)]
+ return ''.join(letters)
+
+
# Thead/Process related functions.
def concurrent_exec(func, param_list):
"""Executes a function with different parameters pseudo-concurrently.
diff --git a/acts/tests/google/wifi/WifiManagerTest.py b/acts/tests/google/wifi/WifiManagerTest.py
index 5a5dfeb..9fc7961 100755
--- a/acts/tests/google/wifi/WifiManagerTest.py
+++ b/acts/tests/google/wifi/WifiManagerTest.py
@@ -53,13 +53,14 @@
wutils.wifi_test_device_init(self.dut)
req_params = []
opt_param = [
- "open_network", "reference_networks", "iperf_server_address"
+ "open_network", "reference_networks", "iperf_server_address",
+ "wpa_networks", "wep_networks"
]
self.unpack_userparams(
req_param_names=req_params, opt_param_names=opt_param)
if "AccessPoint" in self.user_params:
- self.legacy_configure_ap_and_start()
+ self.legacy_configure_ap_and_start(wpa_network=True, wep_network=True)
asserts.assert_true(
len(self.reference_networks) > 0,
@@ -69,7 +70,8 @@
self.iperf_server = self.iperf_servers[0]
self.wpapsk_2g = self.reference_networks[0]["2g"]
self.wpapsk_5g = self.reference_networks[0]["5g"]
- self.open_network = self.open_network[0]["2g"]
+ self.open_network_2g = self.open_network[0]["2g"]
+ self.open_network_5g = self.open_network[0]["5g"]
if hasattr(self, 'iperf_server'):
self.iperf_server.start()
@@ -526,9 +528,12 @@
@test_tracker_info(uuid="71556e06-7fb1-4e2b-9338-b01f1f8e286e")
def test_scan(self):
"""Test wifi connection scan can start and find expected networks."""
- ssid = self.open_network[WifiEnums.SSID_KEY]
+ ssid = self.open_network_2g[WifiEnums.SSID_KEY]
wutils.start_wifi_connection_scan_and_ensure_network_found(
- self.dut, ssid);
+ self.dut, ssid)
+ ssid = self.open_network_5g[WifiEnums.SSID_KEY]
+ wutils.start_wifi_connection_scan_and_ensure_network_found(
+ self.dut, ssid)
@test_tracker_info(uuid="3ea09efb-6921-429e-afb1-705ef5a09afa")
def test_scan_with_wifi_off_and_location_scan_on(self):
@@ -537,9 +542,12 @@
wutils.wifi_toggle_state(self.dut, False)
"""Test wifi connection scan can start and find expected networks."""
- ssid = self.open_network[WifiEnums.SSID_KEY]
+ ssid = self.open_network_2g[WifiEnums.SSID_KEY]
wutils.start_wifi_connection_scan_and_ensure_network_found(
- self.dut, ssid);
+ self.dut, ssid)
+ ssid = self.open_network_5g[WifiEnums.SSID_KEY]
+ wutils.start_wifi_connection_scan_and_ensure_network_found(
+ self.dut, ssid)
@test_tracker_info(uuid="770caebe-bcb1-43ac-95b6-5dd52dd90e80")
def test_scan_with_wifi_off_and_location_scan_off(self):
@@ -559,8 +567,8 @@
@test_tracker_info(uuid="a4ad9930-a8fa-4868-81ed-a79c7483e502")
def test_add_network(self):
"""Test wifi connection scan."""
- ssid = self.open_network[WifiEnums.SSID_KEY]
- nId = self.dut.droid.wifiAddNetwork(self.open_network)
+ ssid = self.open_network_2g[WifiEnums.SSID_KEY]
+ nId = self.dut.droid.wifiAddNetwork(self.open_network_2g)
asserts.assert_true(nId > -1, "Failed to add network.")
configured_networks = self.dut.droid.wifiGetConfiguredNetworks()
self.log.debug(
@@ -571,8 +579,8 @@
@test_tracker_info(uuid="aca85551-10ba-4007-90d9-08bcdeb16a60")
def test_forget_network(self):
- ssid = self.open_network[WifiEnums.SSID_KEY]
- nId = self.dut.droid.wifiAddNetwork(self.open_network)
+ ssid = self.open_network_2g[WifiEnums.SSID_KEY]
+ nId = self.dut.droid.wifiAddNetwork(self.open_network_2g)
asserts.assert_true(nId > -1, "Failed to add network.")
configured_networks = self.dut.droid.wifiGetConfiguredNetworks()
self.log.debug(
@@ -837,5 +845,45 @@
Connect to a wifi network, then the same as test_energy_info.
"""
- wutils.wifi_connect(self.dut, self.open_network)
+ wutils.wifi_connect(self.dut, self.open_network_2g)
self.get_energy_info()
+
+ @test_tracker_info(uuid="2622c253-defc-4a35-93a6-ca9d29a8238c")
+ def test_connect_to_wep_2g(self):
+ """Verify DUT can connect to 2GHz WEP network
+
+ Steps:
+ 1. Ensure the 2GHz WEP network is visible in scan result.
+ 2. Connect to the network and validate internet connection.
+ """
+ wutils.connect_to_wifi_network(self.dut, self.wep_networks[0]["2g"])
+
+ @test_tracker_info(uuid="1f2d17a2-e92d-43af-966b-3421c0db8620")
+ def test_connect_to_wep_5g(self):
+ """Verify DUT can connect to 5GHz WEP network
+
+ Steps:
+ 1. Ensure the 5GHz WEP network is visible in scan result.
+ 2. Connect to the network and validate internet connection.
+ """
+ wutils.connect_to_wifi_network(self.dut, self.wep_networks[0]["5g"])
+
+ @test_tracker_info(uuid="4a957952-289d-4657-9882-e1475274a7ff")
+ def test_connect_to_wpa_2g(self):
+ """Verify DUT can connect to 2GHz WPA-PSK network
+
+ Steps:
+ 1. Ensure the 2GHz WPA-PSK network is visible in scan result.
+ 2. Connect to the network and validate internet connection.
+ """
+ wutils.connect_to_wifi_network(self.dut, self.wpa_networks[0]["2g"])
+
+ @test_tracker_info(uuid="612c3c31-a4c5-4014-9a2d-3f4bcc20c0d7")
+ def test_connect_to_wpa_5g(self):
+ """Verify DUT can connect to 5GHz WPA-PSK network
+
+ Steps:
+ 1. Ensure the 5GHz WPA-PSK network is visible in scan result.
+ 2. Connect to the network and validate internet connection.
+ """
+ wutils.connect_to_wifi_network(self.dut, self.wpa_networks[0]["5g"])