diff --git a/py-scripts/tip-cicd-sanity/Nightly_Sanity.py b/py-scripts/tip-cicd-sanity/Nightly_Sanity.py index 5015ba8b..8d07b6df 100755 --- a/py-scripts/tip-cicd-sanity/Nightly_Sanity.py +++ b/py-scripts/tip-cicd-sanity/Nightly_Sanity.py @@ -266,7 +266,13 @@ test_cases = [ 5251, 5252, 5253, - 5540 + 5540, + 5541, + 5542, + 5543, + 5544, + 5545, + 5546 ] ##AP models for jfrog @@ -467,7 +473,6 @@ for key in equipment_id_dict: with open(report_path + today + '/report_data.json', 'w') as report_json_file: json.dump(report_data, report_json_file) - time.sleep(60) # Upgrade AP firmware upgrade_fw = CloudSDK.update_firmware(equipment_id, latest_firmware_id, cloudSDK_url, bearer) @@ -485,6 +490,8 @@ for key in equipment_id_dict: logger.warning('Firmware upgrade API failed to send') continue + time.sleep(300) + # Check if upgrade success is displayed on CloudSDK cloud_ap_fw = CloudSDK.ap_firmware(customer_id, equipment_id, cloudSDK_url, bearer) print('Current AP Firmware from CloudSDK:', cloud_ap_fw) @@ -603,6 +610,48 @@ for key in equipment_id_dict: ### Wait for Profile Push time.sleep(180) + ###Check if VIF Config and VIF State reflect AP Profile from CloudSDK + ## VIF Config + try: + ssid_config = profile_info_dict[key]["ssid_list"] + print("SSIDs in AP Profile:", ssid_config) + + ssid_list = ap_ssh.get_vif_config(ap_ip, ap_username, ap_password) + print("SSIDs in AP VIF Config:", ssid_list) + + if set(ssid_list) == set(ssid_config): + print("SSIDs in Wifi_VIF_Config Match AP Profile Config") + client.update_testrail(case_id="5541", run_id=rid, status_id=1, msg='SSIDs in VIF Config matches AP Profile Config') + report_data['tests'][key][5541] = "passed" + else: + print("SSIDs in Wifi_VIF_Config do not match desired AP Profile Config") + client.update_testrail(case_id="5541", run_id=rid, status_id=5, msg='SSIDs in VIF Config do not match AP Profile Config') + report_data['tests'][key][5541] = "failed" + except: + ssid_list = "ERROR" + print("Error accessing VIF Config from AP CLI") + client.update_testrail(case_id="5541", run_id=rid, status_id=4, msg='Cannot determine VIF Config - re-test required') + report_data['tests'][key][5541] = "error" + # VIF State + try: + ssid_state = ap_ssh.get_vif_state(ap_ip, ap_username, ap_password) + print("SSIDs in AP VIF State:", ssid_state) + + if set(ssid_state) == set(ssid_config): + print("SSIDs properly applied on AP") + client.update_testrail(case_id="5544", run_id=rid, status_id=1, msg='SSIDs in VIF Config applied to VIF State') + report_data['tests'][key][5544] = "passed" + else: + print("SSIDs not applied on AP") + client.update_testrail(case_id="5544", run_id=rid, status_id=5, msg='SSIDs in VIF Config not applied to VIF State') + report_data['tests'][key][5544] = "failed" + except: + ssid_list = "ERROR" + print("Error accessing VIF State from AP CLI") + print("Error accessing VIF Config from AP CLI") + client.update_testrail(case_id="5544", run_id=rid, status_id=4, msg='Cannot determine VIF State - re-test required') + report_data['tests'][key][5544] = "error" + ### Set LANForge port for tests port = "eth2" @@ -611,7 +660,7 @@ for key in equipment_id_dict: print(iwinfo) ###Run Client Single Connectivity Test Cases for Bridge SSIDs - # TC5215 - 2.4 GHz WPA2-Enterprise + # TC5214 - 2.4 GHz WPA2-Enterprise test_case = "5214" radio = "wiphy0" sta_list = ["eap5214"] @@ -762,6 +811,54 @@ for key in equipment_id_dict: ### Wait for Profile Push time.sleep(180) + ###Check if VIF Config and VIF State reflect AP Profile from CloudSDK + ## VIF Config + try: + ssid_config = profile_info_dict[fw_model + '_nat']["ssid_list"] + print("SSIDs in AP Profile:", ssid_config) + + ssid_list = ap_ssh.get_vif_config(ap_ip, ap_username, ap_password) + print("SSIDs in AP VIF Config:", ssid_list) + + if set(ssid_list) == set(ssid_config): + print("SSIDs in Wifi_VIF_Config Match AP Profile Config") + client.update_testrail(case_id="5542", run_id=rid, status_id=1, + msg='SSIDs in VIF Config matches AP Profile Config') + report_data['tests'][key][5542] = "passed" + else: + print("SSIDs in Wifi_VIF_Config do not match desired AP Profile Config") + client.update_testrail(case_id="5542", run_id=rid, status_id=5, + msg='SSIDs in VIF Config do not match AP Profile Config') + report_data['tests'][key][5542] = "failed" + except: + ssid_list = "ERROR" + print("Error accessing VIF Config from AP CLI") + client.update_testrail(case_id="5542", run_id=rid, status_id=4, + msg='Cannot determine VIF Config - re-test required') + report_data['tests'][key][5542] = "error" + # VIF State + try: + ssid_state = ap_ssh.get_vif_state(ap_ip, ap_username, ap_password) + print("SSIDs in AP VIF State:", ssid_state) + + if set(ssid_state) == set(ssid_config): + print("SSIDs properly applied on AP") + client.update_testrail(case_id="5545", run_id=rid, status_id=1, + msg='SSIDs in VIF Config applied to VIF State') + report_data['tests'][key][5545] = "passed" + else: + print("SSIDs not applied on AP") + client.update_testrail(case_id="5545", run_id=rid, status_id=5, + msg='SSIDs in VIF Config not applied to VIF State') + report_data['tests'][key][5545] = "failed" + except: + ssid_list = "ERROR" + print("Error accessing VIF State from AP CLI") + print("Error accessing VIF Config from AP CLI") + client.update_testrail(case_id="5545", run_id=rid, status_id=4, + msg='Cannot determine VIF State - re-test required') + report_data['tests'][key][5545] = "error" + ### Set LANForge port for tests port = "eth2" @@ -920,6 +1017,51 @@ for key in equipment_id_dict: ### Wait for Profile Push time.sleep(180) + ###Check if VIF Config and VIF State reflect AP Profile from CloudSDK + ## VIF Config + try: + ssid_config = profile_info_dict[fw_model + '_vlan']["ssid_list"] + print("SSIDs in AP Profile:", ssid_config) + + ssid_list = ap_ssh.get_vif_config(ap_ip, ap_username, ap_password) + print("SSIDs in AP VIF Config:", ssid_list) + + if set(ssid_list) == set(ssid_config): + print("SSIDs in Wifi_VIF_Config Match AP Profile Config") + client.update_testrail(case_id="5543", run_id=rid, status_id=1, + msg='SSIDs in VIF Config matches AP Profile Config') + report_data['tests'][key][5543] = "passed" + else: + print("SSIDs in Wifi_VIF_Config do not match desired AP Profile Config") + client.update_testrail(case_id="5543", run_id=rid, status_id=5, + msg='SSIDs in VIF Config do not match AP Profile Config') + report_data['tests'][key][5543] = "failed" + except: + ssid_list = "ERROR" + print("Error accessing VIF Config from AP CLI") + client.update_testrail(case_id="5543", run_id=rid, status_id=4, msg='Cannot determine VIF Config - re-test required') + report_data['tests'][key][5543] = "error" + # VIF State + try: + ssid_state = ap_ssh.get_vif_state(ap_ip, ap_username, ap_password) + print("SSIDs in AP VIF State:", ssid_state) + + if set(ssid_state) == set(ssid_config): + print("SSIDs properly applied on AP") + client.update_testrail(case_id="5546", run_id=rid, status_id=1, msg='SSIDs in VIF Config applied to VIF State') + report_data['tests'][key][5546] = "passed" + else: + print("SSIDs not applied on AP") + client.update_testrail(case_id="5546", run_id=rid, status_id=5, msg='SSIDs in VIF Config not applied to VIF State') + report_data['tests'][key][5546] = "failed" + except: + ssid_list = "ERROR" + print("Error accessing VIF State from AP CLI") + print("Error accessing VIF Config from AP CLI") + client.update_testrail(case_id="5546", run_id=rid, status_id=4, + msg='Cannot determine VIF State - re-test required') + report_data['tests'][key][5546] = "error" + ### Set port for LANForge port = "vlan100" diff --git a/py-scripts/tip-cicd-sanity/ap_ssh.py b/py-scripts/tip-cicd-sanity/ap_ssh.py index 8366ba3e..26c10b14 100755 --- a/py-scripts/tip-cicd-sanity/ap_ssh.py +++ b/py-scripts/tip-cicd-sanity/ap_ssh.py @@ -60,6 +60,52 @@ def iwinfo_status(ap_ip, username, password): for line in stdout.read().splitlines(): print(line) + except paramiko.ssh_exception.AuthenticationException: + print("Authentication Error, Check Credentials") + return "ERROR" + except paramiko.SSHException: + print("Cannot SSH to the AP") + return "ERROR" + except socket.timeout: + print("AP Unreachable") + return "ERROR" + +def get_vif_config(ap_ip, username, password): + try: + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect(ap_ip, username=username, password=password, timeout=5) + stdin, stdout, stderr = client.exec_command( + "/usr/opensync/bin/ovsh s Wifi_VIF_Config -c | grep 'ssid :'") + + output = str(stdout.read(), 'utf-8') + ssid_output = output.splitlines() + ssid_list = [s.strip('ssid : ') for s in ssid_output] + return ssid_list + + except paramiko.ssh_exception.AuthenticationException: + print("Authentication Error, Check Credentials") + return "ERROR" + except paramiko.SSHException: + print("Cannot SSH to the AP") + return "ERROR" + except socket.timeout: + print("AP Unreachable") + return "ERROR" + +def get_vif_state(ap_ip, username, password): + try: + client = paramiko.SSHClient() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect(ap_ip, username=username, password=password, timeout=5) + stdin, stdout, stderr = client.exec_command( + "/usr/opensync/bin/ovsh s Wifi_VIF_Config -c | grep 'ssid :'") + + output = str(stdout.read(), 'utf-8') + ssid_output = output.splitlines() + ssid_list = [s.strip('ssid : ') for s in ssid_output] + return ssid_list + except paramiko.ssh_exception.AuthenticationException: print("Authentication Error, Check Credentials") return "ERROR" diff --git a/py-scripts/tip-cicd-sanity/lab_ap_info.py b/py-scripts/tip-cicd-sanity/lab_ap_info.py index 8ce39b16..8729c113 100755 --- a/py-scripts/tip-cicd-sanity/lab_ap_info.py +++ b/py-scripts/tip-cicd-sanity/lab_ap_info.py @@ -65,16 +65,24 @@ profile_info_dict = { "twoFourG_OPEN_SSID": "ECW5410_2dot4G_OPEN", "twoFourG_WPA2_SSID": "ECW5410_2dot4G_WPA2", "twoFourG_WPA2_PSK": "Connectus123$", - "twoFourG_WPA_SSID":"ECW5410_2dot4G_WPA", + "twoFourG_WPA_SSID": "ECW5410_2dot4G_WPA", "twoFourG_WPA_PSK": "Connectus123$", - "twoFourG_WPA2-EAP_SSID": "ECW5410_2dot4G_WPA2-EAP" + "twoFourG_WPA2-EAP_SSID": "ECW5410_2dot4G_WPA2-EAP", + "ssid_list": [ + "ECW5410_5G_WPA2", + "ECW5410_5G_WPA", + "ECW5410_5G_WPA2-EAP", + "ECW5410_2dot4G_WPA2", + "ECW5410_2dot4G_WPA", + "ECW5410_2dot4G_WPA2-EAP" + ] }, "ea8300": { "profile_id": "153", "fiveG_WPA2_SSID": "EA8300_5G_WPA2", "fiveG_WPA2_PSK": "Connectus123$", - "fiveG_WPA_SSID": "EA8300_5G_WPA", + "fiveG_WPA_SSID": "EA8300_5G_WPA2", "fiveG_WPA_PSK": "Connectus123$", "fiveG_OPEN_SSID": "EA8300_5G_OPEN", "fiveG_WPA2-EAP_SSID": "EA8300_5G_WPA2-EAP", @@ -83,7 +91,19 @@ profile_info_dict = { "twoFourG_WPA2_PSK": "Connectus123$", "twoFourG_WPA_SSID":"EA8300_2dot4G_WPA", "twoFourG_WPA_PSK": "Connectus123$", - "twoFourG_WPA2-EAP_SSID": "EA8300_2dot4G_WPA2-EAP" + "twoFourG_WPA2-EAP_SSID": "EA8300_2dot4G_WPA2-EAP", + #EA8300 has 2x 5GHz SSIDs because it is a tri-radio AP! + "ssid_list": [ + "EA8300_5G_WPA2", + "EA8300_5G_WPA2", + "EA8300_5G_WPA", + "EA8300_5G_WPA", + "EA8300_5G_WPA2-EAP", + "EA8300_5G_WPA2-EAP", + "EA8300_2dot4G_WPA2", + "EA8300_2dot4G_WPA", + "EA8300_2dot4G_WPA2-EAP" + ] }, "ec420": { @@ -99,7 +119,15 @@ profile_info_dict = { "twoFourG_WPA2_PSK": "Connectus123$", "twoFourG_WPA_SSID":"EC420_2dot4G_WPA", "twoFourG_WPA_PSK": "Connectus123$", - "twoFourG_WPA2-EAP_SSID": "EC420_2dot4G_WPA2-EAP" + "twoFourG_WPA2-EAP_SSID": "EC420_2dot4G_WPA2-EAP", + "ssid_list": [ + "EC420_5G_WPA2", + "EC420_5G_WPA", + "EC420_5G_WPA2-EAP", + "EC420_2dot4G_WPA2", + "EC420_2dot4G_WPA", + "EC420_2dot4G_WPA2-EAP" + ] }, "ecw5211": { @@ -115,7 +143,15 @@ profile_info_dict = { "twoFourG_WPA2_PSK": "Connectus123$", "twoFourG_WPA_SSID":"ECW5211_2dot4G_WPA", "twoFourG_WPA_PSK": "Connectus123$", - "twoFourG_WPA2-EAP_SSID": "ECW5211_2dot4G_WPA2-EAP" + "twoFourG_WPA2-EAP_SSID": "ECW5211_2dot4G_WPA2-EAP", + "ssid_list": [ + "ECW5211_5G_WPA2", + "ECW5211_5G_WPA", + "ECW5211_5G_WPA2-EAP", + "ECW5211_2dot4G_WPA2", + "ECW5211_2dot4G_WPA", + "ECW5211_2dot4G_WPA2-EAP" + ] }, "ecw5410_nat": { @@ -131,7 +167,15 @@ profile_info_dict = { "twoFourG_WPA2_PSK": "Connectus123$", "twoFourG_WPA_SSID":"ECW5410_2dot4G_WPA_NAT", "twoFourG_WPA_PSK": "Connectus123$", - "twoFourG_WPA2-EAP_SSID": "ECW5410_2dot4G_WPA2-EAP_NAT" + "twoFourG_WPA2-EAP_SSID": "ECW5410_2dot4G_WPA2-EAP_NAT", + "ssid_list": [ + "ECW5410_5G_WPA2_NAT", + "ECW5410_5G_WPA_NAT", + "ECW5410_5G_WPA2-EAP_NAT", + "ECW5410_2dot4G_WPA2_NAT", + "ECW5410_2dot4G_WPA_NAT", + "ECW5410_2dot4G_WPA2-EAP_NAT" + ] }, "ea8300_nat": { @@ -147,7 +191,19 @@ profile_info_dict = { "twoFourG_WPA2_PSK": "Connectus123$", "twoFourG_WPA_SSID":"EA8300_2dot4G_WPA_NAT", "twoFourG_WPA_PSK": "Connectus123$", - "twoFourG_WPA2-EAP_SSID": "EA8300_2dot4G_WPA2-EAP_NAT" + "twoFourG_WPA2-EAP_SSID": "EA8300_2dot4G_WPA2-EAP_NAT", + #EA8300 has 2x 5GHz SSIDs because it is a tri-radio AP! + "ssid_list": [ + "EA8300_5G_WPA2_NAT", + "EA8300_5G_WPA2_NAT", + "EA8300_5G_WPA_NAT", + "EA8300_5G_WPA_NAT", + "EA8300_5G_WPA2-EAP_NAT", + "EA8300_5G_WPA2-EAP_NAT", + "EA8300_2dot4G_WPA2_NAT", + "EA8300_2dot4G_WPA_NAT", + "EA8300_2dot4G_WPA2-EAP_NAT" + ] }, "ec420_nat": { @@ -163,7 +219,15 @@ profile_info_dict = { "twoFourG_WPA2_PSK": "Connectus123$", "twoFourG_WPA_SSID":"EC420_2dot4G_WPA_NAT", "twoFourG_WPA_PSK": "Connectus123$", - "twoFourG_WPA2-EAP_SSID": "EC420_2dot4G_WPA2-EAP_NAT" + "twoFourG_WPA2-EAP_SSID": "EC420_2dot4G_WPA2-EAP_NAT", + "ssid_list": [ + "EC420_5G_WPA2_NAT", + "EC420_5G_WPA_NAT", + "EC420_5G_WPA2-EAP_NAT", + "EC420_2dot4G_WPA2_NAT", + "EC420_2dot4G_WPA_NAT", + "EC420_2dot4G_WPA2-EAP_NAT" + ] }, "ecw5211_nat": { @@ -179,7 +243,15 @@ profile_info_dict = { "twoFourG_WPA2_PSK": "Connectus123$", "twoFourG_WPA_SSID":"ECW5211_2dot4G_WPA_NAT", "twoFourG_WPA_PSK": "Connectus123$", - "twoFourG_WPA2-EAP_SSID": "ECW5211_2dot4G_WPA2-EAP_NAT" + "twoFourG_WPA2-EAP_SSID": "ECW5211_2dot4G_WPA2-EAP_NAT", + "ssid_list": [ + "ECW5211_5G_WPA2_NAT", + "ECW5211_5G_WPA_NAT", + "ECW5211_5G_WPA2-EAP_NAT", + "ECW5211_2dot4G_WPA2_NAT", + "ECW5211_2dot4G_WPA_NAT", + "ECW5211_2dot4G_WPA2-EAP_NAT" + ] }, "ecw5410_vlan": { @@ -195,7 +267,15 @@ profile_info_dict = { "twoFourG_WPA2_PSK": "Connectus123$", "twoFourG_WPA_SSID":"ECW5410_2dot4G_WPA_VLAN", "twoFourG_WPA_PSK": "Connectus123$", - "twoFourG_WPA2-EAP_SSID": "ECW5410_2dot4G_WPA2-EAP_VLAN" + "twoFourG_WPA2-EAP_SSID": "ECW5410_2dot4G_WPA2-EAP_VLAN", + "ssid_list": [ + "ECW5410_5G_WPA2_VLAN", + "ECW5410_5G_WPA_VLAN", + "ECW5410_5G_WPA2-EAP_VLAN", + "ECW5410_2dot4G_WPA2_VLAN", + "ECW5410_2dot4G_WPA_VLAN", + "ECW5410_2dot4G_WPA2-EAP_VLAN" + ] }, "ea8300_vlan": { @@ -211,7 +291,19 @@ profile_info_dict = { "twoFourG_WPA2_PSK": "Connectus123$", "twoFourG_WPA_SSID":"EA8300_2dot4G_WPA_VLAN", "twoFourG_WPA_PSK": "Connectus123$", - "twoFourG_WPA2-EAP_SSID": "EA8300_2dot4G_WPA2-EAP_VLAN" + "twoFourG_WPA2-EAP_SSID": "EA8300_2dot4G_WPA2-EAP_VLAN", + #EA8300 has 2x 5GHz SSIDs because it is a tri-radio AP! + "ssid_list": [ + "EA8300_5G_WPA2_VLAN", + "EA8300_5G_WPA2_VLAN", + "EA8300_5G_WPA_VLAN", + "EA8300_5G_WPA_VLAN", + "EA8300_5G_WPA2-EAP_VLAN", + "EA8300_5G_WPA2-EAP_VLAN", + "EA8300_2dot4G_WPA2_VLAN", + "EA8300_2dot4G_WPA_VLAN", + "EA8300_2dot4G_WPA2-EAP_VLAN" + ] }, "ec420_vlan": { @@ -227,7 +319,15 @@ profile_info_dict = { "twoFourG_WPA2_PSK": "Connectus123$", "twoFourG_WPA_SSID":"EC420_2dot4G_WPA_VLAN", "twoFourG_WPA_PSK": "Connectus123$", - "twoFourG_WPA2-EAP_SSID": "EC420_2dot4G_WPA2-EAP_VLAN" + "twoFourG_WPA2-EAP_SSID": "EC420_2dot4G_WPA2-EAP_VLAN", + "ssid_list": [ + "EC420_5G_WPA2_VLAN", + "EC420_5G_WPA_VLAN", + "EC420_5G_WPA2-EAP_VLAN", + "EC420_2dot4G_WPA2_VLAN", + "EC420_2dot4G_WPA_VLAN", + "EC420_2dot4G_WPA2-EAP_VLAN" + ] }, "ecw5211_vlan": { @@ -243,6 +343,14 @@ profile_info_dict = { "twoFourG_WPA2_PSK": "Connectus123$", "twoFourG_WPA_SSID":"ECW5211_2dot4G_WPA_VLAN", "twoFourG_WPA_PSK": "Connectus123$", - "twoFourG_WPA2-EAP_SSID": "ECW5211_2dot4G_WPA2-EAP_VLAN" + "twoFourG_WPA2-EAP_SSID": "ECW5211_2dot4G_WPA2-EAP_VLAN", + "ssid_list": [ + "ECW5211_5G_WPA2_VLAN", + "ECW5211_5G_WPA_VLAN", + "ECW5211_5G_WPA2-EAP_VLAN", + "ECW5211_2dot4G_WPA2_VLAN", + "ECW5211_2dot4G_WPA_VLAN", + "ECW5211_2dot4G_WPA2-EAP_VLAN" + ] } }