Added new test cases for WPA3 Enterprise for 6GHz (#1025)

* Added new test cases for WPA3 Enterprise for 6GHz

Signed-off-by: bhargavi-mamidipaka <bhargavi.mamidipaka@candelatech.com>

* Corrected SSID index referencce in WPA3 Enterprise profile data

* Add logger statements to print applied ssid info

* Update sub-suite name from 'EAP TLS' to 'EAP TTLS'

* Remove ow_regression_lf marker for dvlan tesetcases

---------

Signed-off-by: bhargavi-mamidipaka <bhargavi.mamidipaka@candelatech.com>
This commit is contained in:
bhargavi-ct
2025-02-03 20:10:06 +05:30
committed by GitHub
parent a9b205ff87
commit f82ea9202f
6 changed files with 378 additions and 3 deletions

View File

@@ -493,7 +493,7 @@ class tip_2x:
ret_val[self.device_under_tests_info[i]["identifier"]] = self.get_applied_ssid_info(idx=i,
profile_object=profile_object)
logging.info(f"ret_val:{ret_val}")
temp_data = ret_val.copy()
for dut in temp_data:
ret_val[dut] = dict.fromkeys(["ssid_data", "radio_data"])
@@ -512,6 +512,7 @@ class tip_2x:
a["bssid"] = temp_data[dut][j][4]
ret_val[dut]["ssid_data"][j] = a
temp = ret_val[dut]["radio_data"].copy()
logging.info(f"temp:{temp}")
for j in temp:
a = dict.fromkeys(["channel", "bandwidth", "frequency"])
if temp[j] != None:
@@ -646,8 +647,10 @@ class tip_2x:
logging.error("Profile object is None, Unable to fetch ssid info from AP")
return None
ssid_info_sdk = profile_object.get_ssid_info()
logging.info(f"ssid_info_sdk:{ssid_info_sdk}")
ap_wifi_data = self.dut_library_object.get_iwinfo(idx=idx)
channel_info = self.get_dut_channel_data(idx=idx)
logging.info(f"channel_info:{channel_info}")
o = ap_wifi_data.split()
iwinfo_bssid_data = {}
print(o)

View File

@@ -15,7 +15,8 @@ setup_params_enterprise = {
{"ssid_name": "tls_ssid_wpa2_eap_5g", "appliedRadios": ["5G"], "security_key": "something"}],
"wpa3_enterprise": [
{"ssid_name": "tls_ssid_wpa3_eap_2g", "appliedRadios": ["2G"], "security_key": "something"},
{"ssid_name": "tls_ssid_wpa3_eap_5g", "appliedRadios": ["5G"], "security_key": "something"}]},
{"ssid_name": "tls_ssid_wpa3_eap_5g", "appliedRadios": ["5G"], "security_key": "something"},
{"ssid_name": "tls_ssid_wpa3_eap_6g", "appliedRadios": ["6G"], "security_key": "something"}]},
"rf": {},
"radius": True
@@ -399,3 +400,73 @@ class TestBridgeModeEnterpriseTLSSuiteTwo(object):
dut_data=setup_configuration)
assert passes == "PASS", result
setup_params_enterprise_6G = {
"mode": "BRIDGE",
"ssid_modes": {
"wpa3_enterprise": [
{"ssid_name": "tls_ssid_wpa3_eap_2g", "appliedRadios": ["2G"], "security_key": "something"},
{"ssid_name": "tls_ssid_wpa3_eap_6g", "appliedRadios": ["6G"], "security_key": "something"}
]
},
"rf": {
"6G": {
"band": "6G",
"channel-mode": "EHT",
"channel-width": 80,
}
},
"radius": True
}
@allure.parent_suite("Client Connectivity Tests")
@allure.feature("Client Connectivity")
@allure.suite(suite_name="BRIDGE Mode")
@allure.sub_suite(sub_suite_name="EAP TLS Client Connectivity : Suite-B")
@pytest.mark.parametrize(
'setup_configuration',
[setup_params_enterprise_6G],
indirect=True,
scope="class"
)
@pytest.mark.uc_sanity
@pytest.mark.usefixtures("setup_configuration")
@pytest.mark.wpa3_enterprise
@pytest.mark.twog
class TestBridgeModeEnterpriseTLSSuiteC(object):
""" SuiteB Enterprise Test Cases
pytest -m "client_connectivity_tests and bridge and enterprise and tls"
"""
@pytest.mark.wpa3_enterprise
@pytest.mark.sixg
@allure.title("Bridge Mode Client Connectivity Test with WPA3-Enterprise-TLS in 6GHz Band")
@allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14369", name="WIFI-14369")
def test_tls_wpa3_enterprise_6g(self, get_test_library, get_dut_logs_per_test_case,
get_test_device_logs,
get_target_object,
num_stations, setup_configuration, check_connectivity, radius_info):
"""
To verify that a client created on 6G radio connects to AP in Bridge mode with WPA3 enterprise TLS security
Unique Marker: pytest -m "client_connectivity_tests and enterprise and wpa3_enterprise and ow_sanity_lf and tls and bridge and sixg"
"""
profile_data = {"ssid_name": "tls_ssid_wpa3_eap_6g", "appliedRadios": ["6G"], "security_key": "something"}
ssid_name = profile_data["ssid_name"]
security = "wpa3"
mode = "BRIDGE"
band = "sixg"
tls_passwd = radius_info["password"]
eap = "TLS"
key_mgmt = "WPA-EAP-SHA256"
identity = radius_info['user']
pk_passwd = radius_info['pk_password']
passes, result = get_test_library.enterprise_client_connectivity_test(ssid=ssid_name, security=security,
mode=mode, band=band, eap=eap,
ttls_passwd=tls_passwd,
identity=identity, num_sta=num_stations,
key_mgmt=key_mgmt, pk_passwd=pk_passwd,
dut_data=setup_configuration)
assert passes == "PASS", result

View File

@@ -21,7 +21,8 @@ setup_params_enterprise = {
{"ssid_name": "ssid_wpa2_eap_5g", "appliedRadios": ["5G"]}],
"wpa3_enterprise": [
{"ssid_name": "ssid_wpa3_eap_2g", "appliedRadios": ["2G"]},
{"ssid_name": "ssid_wpa3_eap_5g", "appliedRadios": ["5G"]}]},
{"ssid_name": "ssid_wpa3_eap_5g", "appliedRadios": ["5G"]},
{"ssid_name": "ttls_ssid_wpa3_eap_6g", "appliedRadios": ["6G"]}]},
"rf": {},
"radius": True
@@ -345,3 +346,68 @@ class TestNATModeEnterpriseTTLSSuiteTwo(object):
dut_data=setup_configuration)
assert passes == "PASS", result
setup_params_enterprise_6G = {
"mode": "NAT",
"ssid_modes": {
"wpa3_enterprise": [
{"ssid_name": "ssid_wpa3_eap_2g", "appliedRadios": ["2G"]},
{"ssid_name": "ttls_ssid_wpa3_eap_6g", "appliedRadios": ["6G"]}
]
},
"rf": {
"6G": {
"band": "6G",
"channel-mode": "EHT",
"channel-width": 80,
}
},
"radius": True
}
@allure.parent_suite("Client Connectivity Tests")
@allure.feature("Client Connectivity")
@allure.suite(suite_name="NAT Mode")
@allure.sub_suite(sub_suite_name="EAP TTLS Client Connectivity : Suite-B")
@pytest.mark.parametrize(
'setup_configuration',
[setup_params_enterprise_6G],
indirect=True,
scope="class"
)
@pytest.mark.usefixtures("setup_configuration")
@pytest.mark.wpa3_enterprise
@pytest.mark.twog
class TestNATModeEnterpriseTTLSSuiteC(object):
""" SuiteC Enterprise Test Cases
pytest -m "client_connectivity_tests and nat and enterprise and ttls and suiteC"
"""
@pytest.mark.wpa3_enterprise
@pytest.mark.sixg
@allure.title("Test for wpa3 enterprise 6 GHz")
@allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14370", name="WIFI-14370")
def test_wpa3_enterprise_6g(self, get_test_library, get_dut_logs_per_test_case,
get_test_device_logs,
get_target_object,
num_stations, setup_configuration, check_connectivity, radius_info):
""" wpa3 enterprise 6g
pytest -m "client_connectivity_tests and nat and enterprise and ttls and wpa3_enterprise and sixg"
"""
profile_data = {"ssid_name": "ttls_ssid_wpa3_eap_6g", "appliedRadios": ["6G"]}
ssid_name = profile_data["ssid_name"]
security = "wpa3"
mode = "NAT-WAN"
band = "sixg"
ttls_passwd = radius_info["password"]
eap = "TTLS"
identity = radius_info['user']
passes, result = get_test_library.enterprise_client_connectivity_test(ssid=ssid_name, security=security,
mode=mode, band=band, eap=eap,
ttls_passwd=ttls_passwd,
identity=identity, num_sta=num_stations,
dut_data=setup_configuration,
key_mgmt="WPA-EAP-SHA256")
assert passes == "PASS", result

View File

@@ -0,0 +1,118 @@
"""
Dynamic_Vlan: VLAN Mode
pytest -m "dynamic_vlan_tests and wpa3_enterprise and vlan"
"""
import allure
import pytest
import importlib
import logging
lf_library = importlib.import_module("configuration")
DYNAMIC_VLAN_RADIUS_SERVER_DATA = lf_library.DYNAMIC_VLAN_RADIUS_SERVER_DATA
DYNAMIC_VLAN_RADIUS_ACCOUNTING_DATA = lf_library.DYNAMIC_VLAN_RADIUS_ACCOUNTING_DATA
pytestmark = [pytest.mark.dynamic_vlan_tests,
pytest.mark.vlan]
setup_params_general = {
"mode": "VLAN",
"ssid_modes": {
"wpa3_enterprise": [
{"ssid_name": "ssid_wpa3e_2g", "appliedRadios": ["2G"],
"security_key": "something",
"radius_auth_data": DYNAMIC_VLAN_RADIUS_SERVER_DATA,
"radius_acc_data": DYNAMIC_VLAN_RADIUS_ACCOUNTING_DATA,
"vlan": 100
},
{"ssid_name": "ssid_wpa3e_6g", "appliedRadios": ["6G"],
"security_key": "something",
"radius_auth_data": DYNAMIC_VLAN_RADIUS_SERVER_DATA,
"radius_acc_data": DYNAMIC_VLAN_RADIUS_ACCOUNTING_DATA,
"vlan": 100
}]},
"rf": {
"6G": {
"band": "6G",
"channel-mode": "EHT",
"channel-width": 80,
}
},
"radius": True
}
@allure.parent_suite("Dynamic VLAN Test")
@allure.suite("WPA3 Enterprise Security")
@allure.sub_suite("6 GHz Band")
@allure.feature("Dynamic VLAN Test")
@pytest.mark.parametrize(
'setup_configuration',
[setup_params_general],
indirect=True,
scope="class"
)
@pytest.mark.usefixtures("setup_configuration")
@pytest.mark.wpa3_enterprise
@pytest.mark.twog
class TestDynamicVlanOverSsid6GWpa3(object):
@pytest.mark.dynamic_precedence_over_ssid
@pytest.mark.wpa3_enterprise
@pytest.mark.sixg
@allure.testcase(name="test_dynamic_precedence_over_ssid_vlan",
url="https://telecominfraproject.atlassian.net/browse/WIFI-14367")
@allure.title("Test for dynamic precedence over ssid")
def test_dynamic_precedence_over_ssid_vlan_6g_wpa3(self, get_test_library, get_dut_logs_per_test_case,
get_test_device_logs, num_stations, setup_configuration, check_connectivity):
"""
pytest -m "dynamic_precedence_over_ssid and wpa3_enterprise and vlan and sixg"
"""
profile_data = setup_params_general["ssid_modes"]["wpa3_enterprise"]
ssid_name = profile_data[1]["ssid_name"]
security = "wpa3"
extra_secu = []
mode = "VLAN"
band = "sixg"
vlan = [100,200]
ttls_passwd = "passwordB"
eap = "TTLS"
identity = "userB"
val = ""
port_resources = list(get_test_library.lanforge_data['wan_ports'].keys())[0].split('.')
passes, result = get_test_library.enterprise_client_connectivity_test(ssid=ssid_name, security=security,
extra_securities=extra_secu, vlan_id=vlan,
mode=mode, band=band, eap=eap,
ttls_passwd=ttls_passwd, ieee80211w=0,
identity=identity, num_sta=1, key_mgmt="WPA-EAP-SHA256",
dut_data=setup_configuration, d_vlan=True)
station_ip = get_test_library.station_data[list(get_test_library.station_data.keys())[0]]['ip']
eth_ssid_vlan_ip = get_test_library.json_get("/port/" + port_resources[0] + "/" + port_resources[1] +
"/" + port_resources[2] + "." + str(vlan[0]))["interface"]["ip"]
eth_radius_vlan_ip = get_test_library.json_get("/port/" + port_resources[0] + "/" + port_resources[1] +
"/" + port_resources[2] + "." + str(vlan[1]))["interface"]["ip"]
eth_ip = get_test_library.json_get("/port/" + port_resources[0] + "/" + port_resources[1] +
"/" + port_resources[2])["interface"]["ip"]
sta_ip_1 = station_ip.split('.')
eth_vlan_ip_1 = eth_radius_vlan_ip.split('.')
logging.info(f"station ip...{sta_ip_1}\neth.{vlan[0]}...{eth_ssid_vlan_ip}\neth.{vlan[1]}...{eth_radius_vlan_ip}"
f"\neth_upstream_ip...{eth_ip}")
if sta_ip_1[0] == "0":
assert False, result
elif eth_vlan_ip_1[0] == "0":
assert False, result
for i, j in zip(sta_ip_1[0:2], eth_vlan_ip_1[0:2]):
if i != j:
val = False
else:
val = True
if val:
assert True, result
elif not val:
assert False, result
assert passes == "PASS", result

View File

@@ -0,0 +1,117 @@
"""
Dynamic_Vlan: VLAN Mode
pytest -m "dynamic_vlan_tests and wpa3_enterprise and vlan"
"""
import allure
import pytest
import time
import importlib
import logging
lf_library = importlib.import_module("configuration")
DYNAMIC_VLAN_RADIUS_SERVER_DATA = lf_library.DYNAMIC_VLAN_RADIUS_SERVER_DATA
DYNAMIC_VLAN_RADIUS_ACCOUNTING_DATA = lf_library.DYNAMIC_VLAN_RADIUS_ACCOUNTING_DATA
pytestmark = [pytest.mark.dynamic_vlan_tests,
pytest.mark.vlan]
setup_params_general = {
"mode": "VLAN",
"ssid_modes": {
"wpa3_enterprise": [
{"ssid_name": "ssid_wpa3e_2g", "appliedRadios": ["2G"],
"security_key": "something",
"radius_auth_data": DYNAMIC_VLAN_RADIUS_SERVER_DATA,
"radius_acc_data": DYNAMIC_VLAN_RADIUS_ACCOUNTING_DATA,
"vlan": 100
},
{"ssid_name": "ssid_wpa3e_6g", "appliedRadios": ["6G"],
"security_key": "something",
"radius_auth_data": DYNAMIC_VLAN_RADIUS_SERVER_DATA,
"radius_acc_data": DYNAMIC_VLAN_RADIUS_ACCOUNTING_DATA,
"vlan": 100
}]},
"rf": {
"6G": {
"band": "6G",
"channel-mode": "EHT",
"channel-width": 80,
}
},
"radius": True
}
@allure.parent_suite("Dynamic VLAN Test")
@allure.suite("WPA3 Enterprise Security")
@allure.sub_suite("6 GHz Band")
@allure.feature("Dynamic VLAN Test")
@pytest.mark.parametrize(
'setup_configuration',
[setup_params_general],
indirect=True,
scope="class"
)
@pytest.mark.usefixtures("setup_configuration")
@pytest.mark.wpa3_enterprise
@pytest.mark.twog
class TestDynamicVlan6GWpa3(object):
@pytest.mark.absence_of_radius_vlan_identifier
@pytest.mark.wpa3_enterprise
@pytest.mark.sixg
@allure.testcase(name="test_ssid_vlan_in_the_absence_of_radius_vlan_identifier",
url="https://telecominfraproject.atlassian.net/browse/WIFI-14368")
@allure.title("Test for ssid vlan in the absence of radius vlan identifier")
def test_ssid_vlan_in_the_absence_of_radius_vlan_identifier_6g_wpa3(self, get_test_library,
get_dut_logs_per_test_case,
get_test_device_logs, num_stations,
setup_configuration, check_connectivity):
"""
pytest -m "absence_of_radius_vlan_identifier and wpa3_enterprise and vlan and sixg"
"""
profile_data = setup_params_general["ssid_modes"]["wpa3_enterprise"]
ssid_name = profile_data[1]["ssid_name"]
security = "wpa3"
extra_secu = []
band = "sixg"
mode = "VLAN"
vlan = [100]
ttls_passwd = "passwordvlannotsentuser"
eap = "TTLS"
identity = "vlannotsentuser"
val = ""
port_resources = list(get_test_library.lanforge_data['wan_ports'].keys())[0].split('.')
passes, result = get_test_library.enterprise_client_connectivity_test(ssid=ssid_name, security=security,
extra_securities=extra_secu, vlan_id=vlan,
mode=mode, band=band, eap=eap,
ttls_passwd=ttls_passwd, ieee80211w=0,
identity=identity, num_sta=1,
key_mgmt="WPA-EAP-SHA256",
dut_data=setup_configuration)
station_ip = get_test_library.station_data[list(get_test_library.station_data.keys())[0]]['ip']
eth_vlan_ip = get_test_library.json_get("/port/" + port_resources[0] + "/" + port_resources[1] +
"/" + port_resources[2] + "." + str(vlan[0]))["interface"]["ip"]
eth_ip = get_test_library.json_get("/port/" + port_resources[0] + "/" + port_resources[1] +
"/" + port_resources[2])["interface"]["ip"]
sta_ip_1 = station_ip.split('.')
eth_vlan_ip_1 = eth_vlan_ip.split('.')
logging.info(f"station ip...{sta_ip_1}\neth.{vlan[0]}...{eth_vlan_ip}\neth_upstream_ip...{eth_ip}")
if sta_ip_1[0] == "0":
assert False, result
elif eth_vlan_ip[0] == "0":
assert False, result
for i, j in zip(sta_ip_1[0:2], eth_vlan_ip_1[0:2]):
if i != j:
val = False
elif i == j:
val = True
if val:
assert True, result
elif not val:
assert False, result