From d82858bf4c878e02b5742034977c5155b43f23c3 Mon Sep 17 00:00:00 2001 From: shivam Date: Tue, 9 Feb 2021 17:23:24 +0530 Subject: [PATCH] Refactoring : Nightly working bridge mode and nat mode working, Libraries are refactored too --- libs/JfrogHelper.py | 25 +- libs/ap_plus_sdk.py | 22 -- libs/cloudsdk/cloudsdk.py | 291 ++++++++++----------- sync_repos.bash | 4 +- tests/Nightly_Sanity.py | 442 +++++++++++++++----------------- tests/UnitTestBase.py | 149 ++++++----- tests/test_utility/reporting.py | 16 +- 7 files changed, 451 insertions(+), 498 deletions(-) diff --git a/libs/JfrogHelper.py b/libs/JfrogHelper.py index 1a0693196..7acf63532 100644 --- a/libs/JfrogHelper.py +++ b/libs/JfrogHelper.py @@ -3,15 +3,22 @@ import base64 import urllib.request from bs4 import BeautifulSoup import re +from ap_ssh import ssh_cli_active_fw +from lab_ap_info import * + -###Class for jfrog Interaction class GetBuild: - def __init__(self, jfrog_user, jfrog_passwd): + def __init__(self, jfrog_user, jfrog_passwd, build): self.user = jfrog_user self.password = jfrog_passwd ssl._create_default_https_context = ssl._create_unverified_context + self.jfrog_url = 'https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/' + self.build = build + + def get_latest_image(self, model): + + url = self.jfrog_url + model + "/dev/" - def get_latest_image(self, url, build): auth = str( base64.b64encode( bytes('%s:%s' % (self.user, self.password), 'utf-8') @@ -26,10 +33,16 @@ class GetBuild: response = urllib.request.urlopen(req) html = response.read() soup = BeautifulSoup(html, features="html.parser") - ##find the last pending link on dev - last_link = soup.find_all('a', href=re.compile(build))[-1] + + # find the last pending link on dev + last_link = soup.find_all('a', href=re.compile(self.build))[-1] latest_file = last_link['href'] latest_fw = latest_file.replace('.tar.gz', '') return latest_fw - + def check_latest_fw(self, ap_model=None): + for model in ap_models: + if model == ap_model: + return self.get_latest_image(model) + else: + continue diff --git a/libs/ap_plus_sdk.py b/libs/ap_plus_sdk.py index 654954191..a6257fc55 100644 --- a/libs/ap_plus_sdk.py +++ b/libs/ap_plus_sdk.py @@ -1,30 +1,8 @@ - - from lab_ap_info import * from JfrogHelper import GetBuild from ap_ssh import ssh_cli_active_fw -def check_latest_fw(jfrog=None, - ap_latest_dict=None, - buildid=None): - - ############################################################################ - #################### Jfrog Firmware Check ################################## - ############################################################################ - for model in ap_models: - # cloudModel = cloud_sdk_models[model] - ###Check Latest FW on jFrog - jfrog_url = 'https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/' - url = jfrog_url + model + "/dev/" - Build: GetBuild = GetBuild(jfrog["user"], jfrog["pass"]) - latest_image = Build.get_latest_image(url, buildid) - print(model, "Latest FW on jFrog:", latest_image) - ap_latest_dict[model] = latest_image - return ap_latest_dict - def get_ap_info(args): return ssh_cli_active_fw(args) pass - - diff --git a/libs/cloudsdk/cloudsdk.py b/libs/cloudsdk/cloudsdk.py index f813e7911..9ce7aa8fd 100755 --- a/libs/cloudsdk/cloudsdk.py +++ b/libs/cloudsdk/cloudsdk.py @@ -839,7 +839,6 @@ class CloudSDK: - # Library for creating AP Profiles class CreateAPProfiles: @@ -889,15 +888,33 @@ class CreateAPProfiles: self.report_data['tests'] = dict.fromkeys(self.ap_models, "") self.test_cases = { "radius_profile": None, + "ssid_5g_eap_bridge": None, "ssid_5g_wpa2_bridge": None, "ssid_5g_wpa_bridge": None, "ssid_2g_eap_bridge": None, "ssid_2g_wpa2_bridge": None, "ssid_2g_wpa_bridge": None, + + "ssid_5g_eap_nat": None, + "ssid_5g_wpa2_nat": None, + "ssid_5g_wpa_nat": None, + "ssid_2g_eap_nat": None, + "ssid_2g_wpa2_nat": None, + "ssid_2g_wpa_nat": None, + "ap_bridge": None, + "ap_nat": None, + "ap_vlan": None, + "bridge_vifc": None, - "bridge_vifs": None + "bridge_vifs": None, + + "nat_vifc": None, + "nat_vifs": None, + + "vlan_vifc": None, + "vlan_vifs": None } self.profile_data, self.prof_names, self.prof_names_eap = self.create_profile_data(self.command_line_args, self.fw_model) @@ -958,47 +975,7 @@ class CreateAPProfiles: return profile_data, prof_names, prof_names_eap def create_ssid_data(self, args, fw_model): - ssid_data = { - "5g": {"eap": - { - "name": "%s-%s-%s" % (args.testbed, fw_model, "5G_EAP"), - "nat": "%s-%s-%s" % (args.testbed, fw_model, "5G_EAP_NAT"), - "vlan": "%s-%s-%s" % (args.testbed, fw_model, "5G_EAP_VLAN") - }, - "wpa": - { - "name": "%s-%s-%s" % (args.testbed, fw_model, "5G_WPA"), - "nat": "%s-%s-%s" % (args.testbed, fw_model, "5G_WPA_NAT"), - "vlan": "%s-%s-%s" % (args.testbed, fw_model, "5G_WPA_VLAN") - }, - "wpa2": - { - "name": "%s-%s-%s" % (args.testbed, fw_model, "5G_WPA2"), - "nat": "%s-%s-%s" % (args.testbed, fw_model, "5G_WPA2_NAT"), - "vlan": "%s-%s-%s" % (args.testbed, fw_model, "5G_WPA2_VLAN") - } - }, - "2g": { - "eap": - { - "name": "%s-%s-%s" % (args.testbed, fw_model, "2G_EAP"), - "nat": "%s-%s-%s" % (args.testbed, fw_model, "2G_EAP_NAT"), - "vlan": "%s-%s-%s" % (args.testbed, fw_model, "2G_EAP_VLAN") - }, - "wpa": - { - "name": "%s-%s-%s" % (args.testbed, fw_model, "2G_WPA"), - "nat": "%s-%s-%s" % (args.testbed, fw_model, "2G_WPA_NAT"), - "vlan": "%s-%s-%s" % (args.testbed, fw_model, "2G_WPA_VLAN") - }, - "wpa2": - { - "name": "%s-%s-%s" % (args.testbed, fw_model, "2G_WPA2"), - "nat": "%s-%s-%s" % (args.testbed, fw_model, "2G_WPA2_NAT"), - "vlan": "%s-%s-%s" % (args.testbed, fw_model, "2G_WPA2_VLAN") - } - } - } + ssid_data = self.profile_data.copy() psk_data = { "5g": @@ -1120,10 +1097,13 @@ class CreateAPProfiles: msg='Failed to create RADIUS profile') self.test_cases["radius_profile"] = "failed" - def create_ssid_profiles(self, ssid_template=None, skip_wpa2=False, skip_wpa=False, skip_eap=False): + def create_ssid_profiles(self, ssid_template=None, skip_wpa2=False, skip_wpa=False, skip_eap=False, mode="bridge"): self.ssid_template = ssid_template - + if mode == "bridge": + self.mode = "name" + if mode == "nat": + self.mode = "nat" self.fiveG_eap = None self.twoFourG_eap = None self.fiveG_wpa2 = None @@ -1135,197 +1115,207 @@ class CreateAPProfiles: print("CreateAPProfile::create_ssid_profile, skip-wpa: ", skip_wpa, " skip-wpa2: ", skip_wpa2, " skip-eap: ", skip_eap) - # 5G eap + if not skip_eap: + # 5G eap try: self.fiveG_eap = self.cloud.create_or_update_ssid_profile(self.command_line_args.sdk_base_url, self.bearer, self.customer_id, self.ssid_template, - self.profile_data['5g']['eap']['name'], - self.ssid_data['5g']['eap']['name'], + self.profile_data['5g']['eap'][self.mode], + self.ssid_data['5g']['eap'][self.mode], None, self.radius_name, - "wpa2OnlyRadius", "BRIDGE", 1, + "wpa2OnlyRadius", mode.upper(), 1, ["is5GHzU", "is5GHz", "is5GHzL"]) - print("5G EAP SSID created successfully - bridge mode") - self.client.update_testrail(case_id=self.test_cases["ssid_5g_eap_bridge"], run_id=self.rid, status_id=1, - msg='5G EAP SSID created successfully - bridge mode') - self.test_cases["ssid_5g_eap_bridge"] = "passed" + print("5G EAP SSID created successfully - " + mode + " mode") + self.client.update_testrail(case_id=self.test_cases["ssid_5g_eap_" + mode], + run_id=self.rid, + status_id=1, + msg='5G EAP SSID created successfully - ' + mode + ' mode') + self.test_cases["ssid_5g_eap_" + mode] = "passed" except Exception as ex: print(ex) logging.error(logging.traceback.format_exc()) self.fiveG_eap = None - print("5G EAP SSID create failed - bridge mode") - self.client.update_testrail(case_id=self.test_cases["ssid_5g_eap_bridge"], run_id=self.rid, status_id=5, - msg='5G EAP SSID create failed - bridge mode') - self.test_cases["ssid_5g_eap_bridge"] = "failed" + print("5G EAP SSID create failed - " + mode + " mode") + self.client.update_testrail(case_id=self.test_cases["ssid_5g_eap_" + mode], run_id=self.rid, status_id=5, + msg='5G EAP SSID create failed - ' + mode + ' mode') + self.test_cases["ssid_5g_eap_" + mode] = "failed" # 2.4G eap try: self.twoFourG_eap = self.cloud.create_or_update_ssid_profile(self.command_line_args.sdk_base_url, self.bearer, self.customer_id, self.ssid_template, - self.profile_data['2g']['eap']['name'], - self.ssid_data['2g']['eap']['name'], + self.profile_data['2g']['eap'][self.mode], + self.ssid_data['2g']['eap'][self.mode], None, self.radius_name, "wpa2OnlyRadius", - "BRIDGE", 1, + mode.upper(), 1, ["is2dot4GHz"]) - print("2.4G EAP SSID created successfully - bridge mode") - self.client.update_testrail(case_id=self.test_cases["ssid_2g_eap_bridge"], run_id=self.rid, status_id=1, - msg='2.4G EAP SSID created successfully - bridge mode') - self.test_cases["ssid_2g_eap_bridge"] = "passed" + print("2.4G EAP SSID created successfully - " + mode + " mode") + self.client.update_testrail(case_id=self.test_cases["ssid_5g_eap_" + mode], run_id=self.rid, status_id=1, + msg='2.4G EAP SSID created successfully - ' + mode + ' mode') + self.test_cases["ssid_5g_eap_" + mode] = "passed" except Exception as ex: print(ex) logging.error(logging.traceback.format_exc()) self.twoFourG_eap = None print("2.4G EAP SSID create failed - bridge mode") - self.client.update_testrail(case_id=self.test_cases["ssid_2g_eap_bridge"], run_id=self.rid, status_id=5, + self.client.update_testrail(case_id=self.test_cases["ssid_5g_eap_" + mode], run_id=self.rid, status_id=5, msg='2.4G EAP SSID create failed - bridge mode') - self.test_cases["ssid_2g_eap_bridge"] = "failed" + self.test_cases["ssid_5g_eap_" + mode] = "failed" + - # 5g wpa2 if not skip_wpa2: + # 5g wpa2 try: self.fiveG_wpa2 = self.cloud.create_or_update_ssid_profile(self.command_line_args.sdk_base_url, self.bearer, self.customer_id, self.ssid_template, - self.profile_data['5g']['wpa2']['name'], - self.ssid_data['5g']['wpa2']['name'], - self.psk_data['5g']['wpa2']['name'], + self.profile_data['5g']['wpa2'][self.mode], + self.ssid_data['5g']['wpa2'][self.mode], + self.psk_data['5g']['wpa2'][self.mode], "Radius-Accounting-Profile", "wpa2OnlyPSK", - "BRIDGE", 1, + mode.upper(), 1, ["is5GHzU", "is5GHz", "is5GHzL"]) - print("5G WPA2 SSID created successfully - bridge mode") - self.client.update_testrail(case_id=self.test_cases["ssid_5g_wpa2_bridge"], run_id=self.rid, + print("5G WPA2 SSID created successfully - " + mode + " mode") + self.client.update_testrail(case_id=self.test_cases["ssid_5g_wpa2_" + mode], run_id=self.rid, status_id=1, - msg='5G WPA2 SSID created successfully - bridge mode') - self.test_cases["ssid_5g_wpa2_bridge"] = "passed" + msg='5G WPA2 SSID created successfully - ' + mode + ' mode') + self.test_cases["ssid_5g_wpa2_" + mode] = "passed" except Exception as ex: print(ex) logging.error(logging.traceback.format_exc()) self.fiveG_wpa2 = None - print("5G WPA2 SSID create failed - bridge mode") - self.client.update_testrail(case_id=test_cases["ssid_5g_wpa2_bridge"], run_id=self.rid, status_id=5, - msg='5G WPA2 SSID create failed - bridge mode') - self.test_cases["ssid_5g_wpa2_bridge"] = "failed" + print("5G WPA2 SSID create failed - " + mode + " mode") + self.client.update_testrail(case_id=self.test_cases["ssid_5g_wpa2_" + mode], run_id=self.rid, status_id=5, + msg='5G WPA2 SSID create failed - ' + mode + ' mode') + self.test_cases["ssid_5g_wpa2_" + mode] = "failed" # 2.4G wpa2 try: self.twoFourG_wpa2 = self.cloud.create_or_update_ssid_profile(self.command_line_args.sdk_base_url, self.bearer, self.customer_id, self.ssid_template, - self.profile_data['2g']['wpa2']['name'], - self.ssid_data['2g']['wpa2']['name'], - self.psk_data['2g']['wpa2']['name'], + self.profile_data['2g']['wpa2'][self.mode], + self.ssid_data['2g']['wpa2'][self.mode], + self.psk_data['2g']['wpa2'][self.mode], "Radius-Accounting-Profile", - "wpa2OnlyPSK", "BRIDGE", 1, + "wpa2OnlyPSK", self.mode.upper(), 1, ["is2dot4GHz"]) - print("2.4G WPA2 SSID created successfully - bridge mode") - self.client.update_testrail(case_id=self.test_cases["ssid_2g_wpa2_bridge"], run_id=self.rid, + print("2.4G WPA2 SSID created successfully - " + mode + " mode") + self.client.update_testrail(case_id=self.test_cases["ssid_2g_wpa2_" + mode], run_id=self.rid, status_id=1, - msg='2.4G WPA2 SSID created successfully - bridge mode') - self.test_cases["ssid_2g_wpa2_bridge"] = "passed" + msg='2.4G WPA2 SSID created successfully - ' + mode + ' mode') + self.test_cases["ssid_2g_wpa2_" + mode] = "passed" except Exception as ex: print(ex) logging.error(logging.traceback.format_exc()) self.twoFourG_wpa2 = None - print("2.4G WPA2 SSID create failed - bridge mode") - self.client.update_testrail(case_id=test_cases["ssid_2g_wpa2_bridge"], run_id=self.rid, status_id=5, - msg='2.4G WPA2 SSID create failed - bridge mode') - self.test_cases["ssid_2g_wpa2_bridge"] = "failed" + print("2.4G WPA2 SSID create failed - " + mode + " mode") + self.client.update_testrail(case_id=test_cases["ssid_2g_wpa2_" + mode], run_id=self.rid, status_id=5, + msg='2.4G WPA2 SSID create failed - ' + mode + ' mode') + self.test_cases["ssid_2g_wpa2_" + mode] = "failed" + - # 5g wpa if not skip_wpa: + # 5g wpa try: self.fiveG_wpa = self.cloud.create_or_update_ssid_profile(self.command_line_args.sdk_base_url, self.bearer, self.customer_id, self.ssid_template, - self.profile_data['5g']['wpa']['name'], - self.ssid_data['5g']['wpa']['name'], - self.psk_data['5g']['wpa']['name'], + self.profile_data['5g']['wpa'][self.mode], + self.ssid_data['5g']['wpa'][self.mode], + self.psk_data['5g']['wpa'][self.mode], "Radius-Accounting-Profile", "wpaPSK", - "BRIDGE", 1, + mode.upper(), 1, ["is5GHzU", "is5GHz", "is5GHzL"]) - print("5G WPA SSID created successfully - bridge mode") - self.client.update_testrail(case_id=self.test_cases["ssid_5g_wpa_bridge"], run_id=self.rid, status_id=1, - msg='5G WPA SSID created successfully - bridge mode') - self.test_cases["ssid_5g_wpa_bridge"] = "passed" + print("5G WPA SSID created successfully - " + mode + " mode") + self.client.update_testrail(case_id=self.test_cases["ssid_5g_wpa_" + mode], + run_id=self.rid, + status_id=1, + msg='5G WPA SSID created successfully - ' + mode + ' mode') + self.test_cases["ssid_5g_wpa_" + mode] = "passed" except Exception as ex: print(ex) logging.error(logging.traceback.format_exc()) self.fiveG_wpa = None - print("5G WPA SSID create failed - bridge mode") - self.client.update_testrail(case_id=test_cases["ssid_5g_wpa_bridge"], run_id=self.rid, status_id=5, - msg='5G WPA SSID create failed - bridge mode') - self.test_cases["ssid_5g_wpa_bridge"] = "failed" + print("5G WPA SSID create failed - " + mode + " mode") + self.client.update_testrail(case_id=test_cases["ssid_5g_wpa_" + mode], run_id=self.rid, status_id=5, + msg='5G WPA SSID create failed - ' + mode + ' mode') + self.test_cases["ssid_5g_wpa_" + mode] = "failed" # 2.4G wpa try: self.twoFourG_wpa = self.cloud.create_or_update_ssid_profile(self.command_line_args.sdk_base_url, self.bearer, self.customer_id, self.ssid_template, - self.profile_data['2g']['wpa']['name'], - self.ssid_data['2g']['wpa']['name'], - self.psk_data['2g']['wpa']['name'], + self.profile_data['2g']['wpa'][self.mode], + self.ssid_data['2g']['wpa'][self.mode], + self.psk_data['2g']['wpa'][self.mode], "Radius-Accounting-Profile", "wpaPSK", - "BRIDGE", 1, + mode.upper(), 1, ["is2dot4GHz"]) - print("2.4G WPA SSID created successfully - bridge mode") - self.client.update_testrail(case_id=self.test_cases["ssid_2g_wpa_bridge"], run_id=self.rid, status_id=1, - msg='2.4G WPA SSID created successfully - bridge mode') - self.test_cases["ssid_2g_wpa_bridge"] = "passed" + print("2.4G WPA SSID created successfully - " + mode + " mode") + self.client.update_testrail(case_id=self.test_cases["ssid_2g_wpa_" + mode], run_id=self.rid, status_id=1, + msg='2.4G WPA SSID created successfully - ' + mode + ' mode') + self.test_cases["ssid_2g_wpa_" + mode] = "passed" except Exception as ex: print(ex) logging.error(logging.traceback.format_exc()) self.twoFourG_wpa = None - print("2.4G WPA SSID create failed - bridge mode") - self.client.update_testrail(case_id=self.test_cases["ssid_2g_wpa_bridge"], run_id=self.rid, status_id=5, - msg='2.4G WPA SSID create failed - bridge mode') - self.test_cases["ssid_2g_wpa_bridge"] = "failed" + print("2.4G WPA SSID create failed - " + mode + " mode") + self.client.update_testrail(case_id=self.test_cases["ssid_2g_wpa_" + mode], run_id=self.rid, status_id=5, + msg='2.4G WPA SSID create failed - ' + mode + ' mode') + self.test_cases["ssid_2g_wpa_" + mode] = "failed" - def create_ap_bridge_profile(self, eq_id=None, fw_model=None): + def create_ap_bridge_profile(self, eq_id=None, fw_model=None, mode="bridge"): self.ssid_prof_config = [] self.ssid_config = [] self.fw_model = fw_model self.rfProfileId = lab_ap_info.rf_profile self.child_profiles = [self.rfProfileId] - + if mode == "bridge": + self.mode = "name" + if mode == "nat": + self.mode = "nat" if self.fiveG_wpa2: self.child_profiles.append(self.fiveG_wpa2) - self.ssid_prof_config.append(self.profile_data['5g']['wpa2']['name']) - self.ssid_config.append(self.ssid_data['5g']['wpa2']['name']) + self.ssid_prof_config.append(self.profile_data['5g']['wpa2'][self.mode]) + self.ssid_config.append(self.ssid_data['5g']['wpa2'][self.mode]) if self.twoFourG_wpa2: self.child_profiles.append(self.twoFourG_wpa2) - self.ssid_prof_config.append(self.profile_data['2g']['wpa2']['name']) - self.ssid_config.append(self.ssid_data['2g']['wpa2']['name']) + self.ssid_prof_config.append(self.profile_data['2g']['wpa2'][self.mode]) + self.ssid_config.append(self.ssid_data['2g']['wpa2'][self.mode]) if self.fiveG_eap: self.child_profiles.append(self.fiveG_eap) - self.ssid_prof_config.append(self.profile_data['5g']['eap']['name']) - self.ssid_config.append(self.ssid_data['5g']['eap']['name']) + self.ssid_prof_config.append(self.profile_data['5g']['eap'][self.mode]) + self.ssid_config.append(self.ssid_data['5g']['eap'][self.mode]) if self.twoFourG_eap: self.child_profiles.append(self.twoFourG_eap) - self.ssid_prof_config.append(self.profile_data['2g']['eap']['name']) - self.ssid_config.append(self.ssid_data['2g']['eap']['name']) + self.ssid_prof_config.append(self.profile_data['2g']['eap'][self.mode]) + self.ssid_config.append(self.ssid_data['2g']['eap'][self.mode]) if self.fiveG_wpa: self.child_profiles.append(self.fiveG_wpa) - self.ssid_prof_config.append(self.profile_data['5g']['wpa']['name']) - self.ssid_config.append(self.ssid_data['5g']['wpa']['name']) + self.ssid_prof_config.append(self.profile_data['5g']['wpa'][self.mode]) + self.ssid_config.append(self.ssid_data['5g']['wpa'][self.mode]) if self.twoFourG_wpa: self.child_profiles.append(self.twoFourG_wpa) - self.ssid_prof_config.append(self.profile_data['2g']['wpa']['name']) - self.ssid_config.append(self.ssid_data['2g']['wpa']['name']) + self.ssid_prof_config.append(self.profile_data['2g']['wpa'][self.mode]) + self.ssid_config.append(self.ssid_data['2g']['wpa'][self.mode]) if self.radius_profile is not None: self.child_profiles.append(self.radius_profile) # EAP ssid profiles would have been added above if they existed. - name = self.command_line_args.testbed + "-" + self.fw_model + "_bridge" + name = self.command_line_args.testbed + "-" + self.fw_model + "_" + mode try: self.create_ap_profile = self.cloud.create_or_update_ap_profile(self.command_line_args.sdk_base_url, @@ -1335,24 +1325,25 @@ class CreateAPProfiles: self.child_profiles) self.test_profile_id = self.create_ap_profile print("Test Profile ID for Test is:", self.test_profile_id) - self.client.update_testrail(case_id=self.test_cases["ap_bridge"], run_id=self.rid, status_id=1, - msg='AP profile for bridge tests created successfully') - self.test_cases["ap_bridge"] = "passed" + self.client.update_testrail(case_id=self.test_cases["ap_"+mode], run_id=self.rid, status_id=1, + msg='AP profile for ' + mode + ' tests created successfully') + self.test_cases["ap_"+mode] = "passed" except Exception as ex: print(ex) logging.error(logging.traceback.format_exc()) create_ap_profile = "error" print("Error creating AP profile for bridge tests. Will use existing AP profile") - self.client.update_testrail(case_id=self.test_cases["ap_bridge"], run_id=self.rid, status_id=5, - msg='AP profile for bridge tests could not be created using API') - self.test_cases["ap_bridge"] = "failed" + self.client.update_testrail(case_id=self.test_cases["ap_"+mode], run_id=self.rid, status_id=5, + msg='AP profile for ' + mode + ' tests could not be created using API') + self.test_cases["ap_"+mode] = "failed" + self.ap_profile = self.cloud.set_ap_profile(eq_id, self.test_profile_id, self.command_line_args.sdk_base_url, self.bearer) def cleanup_profile(self): pass - def validate_changes(self): + def validate_changes(self, mode="bridge"): ssid_list_ok = False vif_state_ok = False @@ -1375,23 +1366,23 @@ class CreateAPProfiles: if set(ssid_list) == set(self.ssid_config): print("SSIDs in Wifi_VIF_Config Match AP Profile Config") - self.client.update_testrail(case_id=self.test_cases["bridge_vifc"], run_id=self.rid, status_id=1, + self.client.update_testrail(case_id=self.test_cases[mode + "_vifc"], run_id=self.rid, status_id=1, msg='SSIDs in VIF Config matches AP Profile Config') - self.test_cases["bridge_vifc"] = "passed" + self.test_cases[mode + "_vifc"] = "passed" ssid_list_ok = True else: print("SSIDs in Wifi_VIF_Config do not match desired AP Profile Config") - self.client.update_testrail(case_id=self.test_cases["bridge_vifc"], run_id=self.rid, status_id=5, + self.client.update_testrail(case_id=self.test_cases[mode + "_vifc"], run_id=self.rid, status_id=5, msg='SSIDs in VIF Config do not match AP Profile Config') - self.test_cases["bridge_vifc"] = "failed" + self.test_cases[mode + "_vifc"] = "failed" except Exception as ex: print(ex) logging.error(logging.traceback.format_exc()) ssid_list = "ERROR" print("Error accessing VIF Config from AP CLI") - self.client.update_testrail(case_id=self.test_cases["bridge_vifc"], run_id=self.rid, status_id=4, + self.client.update_testrail(case_id=self.test_cases[mode + "_vifc"], run_id=self.rid, status_id=4, msg='Cannot determine VIF Config - re-test required') - self.test_cases["bridge_vifc"] = "error" + self.test_cases[mode + "_vifc"] = "error" # VIF State try: @@ -1400,22 +1391,22 @@ class CreateAPProfiles: if set(ssid_state) == set(self.ssid_config): print("SSIDs properly applied on AP") - self.client.update_testrail(case_id=self.test_cases["bridge_vifs"], run_id=self.rid, status_id=1, + self.client.update_testrail(case_id=self.test_cases[mode + "_vifs"], run_id=self.rid, status_id=1, msg='SSIDs in VIF Config applied to VIF State') - self.test_cases["bridge_vifs"] = "passed" + self.test_cases[mode + "_vifs"] = "passed" vif_state_ok = True else: print("SSIDs not applied on AP") - self.client.update_testrail(case_id=self.test_cases["bridge_vifs"], run_id=self.rid, status_id=5, + self.client.update_testrail(case_id=self.test_cases[mode + "_vifs"], run_id=self.rid, status_id=5, msg='SSIDs in VIF Config not applied to VIF State') - self.test_cases["bridge_vifs"] = "failed" + self.test_cases[mode + "_vifs"] = "failed" except Exception as ex: print(ex) logging.error(logging.traceback.format_exc()) ssid_list = "ERROR" print("Error accessing VIF State from AP CLI") - self.client.update_testrail(case_id=self.test_cases["bridge_vifs"], run_id=self.rid, status_id=4, + self.client.update_testrail(case_id=self.test_cases[mode + "_vifs"], run_id=self.rid, status_id=4, msg='Cannot determine VIF State - re-test required') - self.test_cases["bridge_vifs"] = "error" + self.test_cases[mode + "_vifs"] = "error" print("Profiles Created") diff --git a/sync_repos.bash b/sync_repos.bash index c7672ccc2..b8e2d9d67 100755 --- a/sync_repos.bash +++ b/sync_repos.bash @@ -6,9 +6,9 @@ if [ -d ../wlan-lanforge-scripts ] then - rm -fr libs/lanforge/lanforge-scripts + rm -fr lanforge/lanforge-scripts - cp -ar ../wlan-lanforge-scripts libs/lanforge/lanforge-scripts + cp -ar ../wlan-lanforge-scripts lanforge/lanforge-scripts fi if [ -d tests/logs ] then diff --git a/tests/Nightly_Sanity.py b/tests/Nightly_Sanity.py index 8cf26a335..b17e0172d 100755 --- a/tests/Nightly_Sanity.py +++ b/tests/Nightly_Sanity.py @@ -10,18 +10,19 @@ from UnitTestBase import * class NightlySanity: - def __init__(self, args=None, base=None, lanforge_data=None, Test=None, reporting=None ): + def __init__(self, args=None, base=None, lanforge_data=None, test=None, reporting=None, build=None): self.args = args self.model = self.args.model self.client: TestRail_Client = TestRail_Client(args) self.logger = base.logger - ###Get Cloud Bearer Token + self.rid = None + # Get Cloud Bearer Token self.cloud: CloudSDK = CloudSDK(args) cloud_type = "v1" self.bearer = self.cloud.get_bearer(args.sdk_base_url, cloud_type) self.customer_id = "2" - self.Test = Test + self.test = test self.reporting = reporting self.lanforge_data = lanforge_data if lanforge_data is None: @@ -33,10 +34,15 @@ class NightlySanity: "ecw5410": "ECW5410", "wf188n": "WF188N" } - + self.jfrog_build = build + self.ap_object = None self.equipment_id = self.args.equipment_id self.report_data = dict() + self.ap_cli_info = get_ap_info(self.args) + self.ap_current_fw = self.ap_cli_info['active_fw'] + self.report_data = dict() + self.firmware = {} if self.equipment_id == "-1": eq_id = ap_ssh_ovsh_nodec(args, 'id') @@ -55,37 +61,64 @@ class NightlySanity: print("ERROR: Could not find equipment-id.") exit() + def configure_dut(self): - def setup(self): - pass + # Check for latest Firmware + latest_fw = self.jfrog_build.check_latest_fw(self.model) + if latest_fw is None: + print("AP Model doesn't match the available Models") + exit() + self.firmware = { + "latest": latest_fw, + "current": self.ap_current_fw + } - def create_test_run_session(self): - today = str(date.today()) - case_ids = list(test_cases.values()) - projId = self.client.get_project_id(project_name=self.args.testrail_project) - test_run_name = self.args.testrail_run_prefix + self.model + "_" + today + "_" + self.firmware["latest"] - self.client.create_testrun(name=test_run_name, case_ids=case_ids, project_id=projId, - milestone_id=self.args.milestone, - description="Automated Nightly Sanity test run for new firmware build") - self.rid = self.client.get_run_id( - test_run_name=self.args.testrail_run_prefix + self.model + "_" + today + "_" + self.firmware["latest"]) - print("TIP run ID is:", self.rid) + # Create Test session + self.create_test_run_session() - def start_test(self, do_upgrade=False): + # Check if AP needs Upgrade + if (self.firmware["current"] is not None) and self.firmware["latest"] != self.firmware["current"]: + do_upgrade = self.cloud.should_upgrade_ap_fw(self.bearer, self.args, self.report_data, + self.firmware["latest"], + self.args.model, + self.firmware["current"], self.logger) + + elif (self.firmware["current"] is not None) and self.firmware["latest"] == self.firmware["current"]: + do_upgrade = False + print("AP ia already having Latest Firmware...") + + else: + print("Skipping this Profile") + exit() # Upgrade the Firmware on AP if do_upgrade: - cloudModel = self.cloud_sdk_models[self.args.model] + cloud_model = self.cloud_sdk_models[self.args.model] pf = self.cloud.do_upgrade_ap_fw(self.bearer, self.args, self.report_data, test_cases, self.client, - self.firmware["latest"], cloudModel, self.args.model, + self.firmware["latest"], cloud_model, self.args.model, self.args.jfrog_user_id, self.args.jfrog_user_password, self.rid, self.customer_id, self.equipment_id, self.logger) print(self.report_data) if not pf: exit() + + return self.firmware + + def create_test_run_session(self): + today = str(date.today()) + case_ids = list(test_cases.values()) + proj_id = self.client.get_project_id(project_name=self.args.testrail_project) + test_run_name = self.args.testrail_run_prefix + self.model + "_" + today + "_" + self.firmware["latest"] + self.client.create_testrun(name=test_run_name, case_ids=case_ids, project_id=proj_id, + milestone_id=self.args.milestone, + description="Automated Nightly Sanity test run for new firmware build") + self.rid = self.client.get_run_id(test_run_name=self.args.testrail_run_prefix + self.model + "_" + today + "_" + self.firmware["latest"]) + print("TIP run ID is:", self.rid) + + def start_test(self): if True: - ###Check AP Manager Status + # Check AP Manager Status manager_status = self.ap_cli_info['state'] print(manager_status) @@ -98,7 +131,7 @@ class NightlySanity: if manager_status != "active": print("Manager status is", manager_status, "! Not connected to the cloud.") print("Manager status fails multiple checks - failing test case.") - ##fail cloud connectivity testcase + # fail cloud connectivity testcase self.client.update_testrail(case_id=self.test_cases["cloud_connection"], run_id=self.rid, status_id=5, msg='CloudSDK connectivity failed') @@ -127,15 +160,14 @@ class NightlySanity: self.ap_object = CreateAPProfiles(self.args, cloud=self.cloud, client=self.client, fw_model=self.model) # Logic to create AP Profiles (Bridge Mode) - self.ap_object.set_ssid_psk_data\ - (ssid_2g_wpa="Nightly-SSID-2G-WPA", - ssid_5g_wpa="Nightly-SSID-5G-WPA", - psk_2g_wpa= "Nightly_2g_wpa", - psk_5g_wpa="Nightly_5g_wpa", - ssid_2g_wpa2="Nightly-SSID-2G-WPA2", - ssid_5g_wpa2="Nightly-SSID-5G-WPA2", - psk_2g_wpa2="Nightly_2g_wpa2", - psk_5g_wpa2="Nightly_5g_wpa2") + self.ap_object.set_ssid_psk_data(ssid_2g_wpa="Nightly-SSID-2G-WPA", + ssid_5g_wpa="Nightly-SSID-5G-WPA", + psk_2g_wpa="Nightly_2g_wpa", + psk_5g_wpa="Nightly_5g_wpa", + ssid_2g_wpa2="Nightly-SSID-2G-WPA2", + ssid_5g_wpa2="Nightly-SSID-5G-WPA2", + psk_2g_wpa2="Nightly_2g_wpa2", + psk_5g_wpa2="Nightly_5g_wpa2") print("creating Profiles") ssid_template = "TipWlan-Cloud-Wifi" @@ -145,33 +177,29 @@ class NightlySanity: # Radius Profile needs to be set here # obj.create_radius_profile(radius_name, rid, key) pass - self.ap_object.create_ssid_profiles(ssid_template=ssid_template, skip_eap=True) + self.ap_object.create_ssid_profiles(ssid_template=ssid_template, skip_eap=True, mode="bridge") print("Create AP with equipment-id: ", self.equipment_id) - self.ap_object.create_ap_bridge_profile(eq_id=self.equipment_id, fw_model=self.model) - self.ap_object.validate_changes() + self.ap_object.create_ap_bridge_profile(eq_id=self.equipment_id, fw_model=self.model, mode="bridge") + self.ap_object.validate_changes(mode="bridge") print("Profiles Created") - self.test_bridge_mode_2g() - self.test_bridge_mode_5g() - # Logic to check Single client Connectivity for EAP - - # Logic to check Single client Connectivity for WPA - - # Logic to check Single client Connectivity for WPA2 + self.test_2g(mode="bridge") + self.test_5g(mode="bridge") + time.sleep(10) + self.reporting.update_json_report(report_data=self.ap_object.report_data) # Logic to create AP Profiles (NAT Mode) - self.ap_object.set_ssid_psk_data\ - (ssid_2g_wpa="Nightly-SSID-NAT-2G-WPA", - ssid_5g_wpa="Nightly-SSID-NAT-5G-WPA", - psk_2g_wpa= "Nightly_2g_nat_wpa", - psk_5g_wpa="Nightly_5g_nat_wpa", - ssid_2g_wpa2="Nightly-SSID-NAT-2G-WPA2", - ssid_5g_wpa2="Nightly-SSID-NAT-5G-WPA2", - psk_2g_wpa2="Nightly_2g_nat_wpa2", - psk_5g_wpa2="Nightly_5g_nat_wpa2") + self.ap_object.set_ssid_psk_data(ssid_2g_wpa="Nightly-SSID-NAT-2G-WPA", + ssid_5g_wpa="Nightly-SSID-NAT-5G-WPA", + psk_2g_wpa="Nightly_2g_nat_wpa", + psk_5g_wpa="Nightly_5g_nat_wpa", + ssid_2g_wpa2="Nightly-SSID-NAT-2G-WPA2", + ssid_5g_wpa2="Nightly-SSID-NAT-5G-WPA2", + psk_2g_wpa2="Nightly_2g_nat_wpa2", + psk_5g_wpa2="Nightly_5g_nat_wpa2") print("creating Profiles") ssid_template = "TipWlan-Cloud-Wifi" @@ -181,14 +209,16 @@ class NightlySanity: # Radius Profile needs to be set here # obj.create_radius_profile(radius_name, rid, key) pass - self.ap_object.create_ssid_profiles(ssid_template=ssid_template, skip_eap=True) + self.ap_object.create_ssid_profiles(ssid_template=ssid_template, skip_eap=True, mode="nat") print("Create AP with equipment-id: ", self.equipment_id) - self.ap_object.create_ap_bridge_profile(eq_id=self.equipment_id, fw_model=self.model) - self.ap_object.validate_changes() - - + self.ap_object.create_ap_bridge_profile(eq_id=self.equipment_id, fw_model=self.model, mode="nat") + self.ap_object.validate_changes(mode="nat") + self.test_2g(mode="nat") + self.test_5g(mode="nat") + time.sleep(10) + self.reporting.update_json_report(report_data=self.ap_object.report_data) def setup_report(self): @@ -211,56 +241,103 @@ class NightlySanity: self.reporting.update_json_report(report_data=self.report_data) - def check_fw(self, jfrog=None): + def test_2g(self, mode="bridge"): - # This can be kept as a global dictionary - ap_latest_dict = { - "ec420": "Unknown", - "ea8300": "Unknown", - "ecw5211": "unknown", - "ecw5410": "unknown" - } - self.ap_latest_dict = check_latest_fw(jfrog=jfrog, - ap_latest_dict=ap_latest_dict, - buildid=self.args.build_id) - - try: - self.ap_cli_info = get_ap_info(self.args) - self.ap_current_fw = self.ap_cli_info['active_fw'] - except Exception as ex: - print(ex) - self.ap_current_fw = None - logging.error(logging.traceback.format_exc()) - ap_cli_info = "ERROR" - print("Cannot Reach AP CLI, will not test this variant"); - self.firmware = { - "latest": self.ap_latest_dict[self.args.model], - "current": self.ap_current_fw - } - return self.firmware - - # lanforge = { - # "ip": command_line_args.lanforge_ip_address, - # "port": command_line_args.lanforge_port_number, - # "prefix": command_line_args.lanforge_prefix, - # "2g_radio": command_line_args.lanforge_2g_radio, - # "5g_radio": command_line_args.lanforge_5g_radio - # } - - # dev complete - def test_bridge_mode_2g(self): + if mode == "bridge": + mode_a = "name" + if mode == "nat": + mode_a = "nat" if not self.args.skip_radius: - ###Run Client Single Connectivity Test Cases for Bridge SSIDs + # Run Client Single Connectivity Test Cases for Bridge SSIDs # TC5214 - 2.4 GHz WPA2-Enterprise - test_case = test_cases["2g_eap_bridge"] + test_case = test_cases["2g_eap_" + mode] radio = lanforge_2g_radio sta_list = [lanforge_prefix + "5214"] ssid_name = ssid_2g_eap; security = "wpa2" eap_type = "TTLS" try: - test_result = self.Test.Single_Client_EAP(port, sta_list, ssid_name, radio, security, eap_type, + test_result = self.test.Single_Client_EAP(port, sta_list, ssid_name, radio, security, eap_type, + identity, ttls_password, test_case, rid, client, logger) + except: + test_result = "error" + self.test.testrail_retest(test_case, rid, ssid_name, client, logger) + pass + report_data['tests'][key][int(test_case)] = test_result + print(report_data['tests'][key]) + + time.sleep(10) + + # Run Client Single Connectivity Test Cases for Bridge SSIDs + # TC - 2.4 GHz WPA2 + test_case = test_cases["2g_wpa2_" + mode] + station = [self.lanforge_data['prefix'] + "2237"] + ssid_name = self.ap_object.ssid_data['2g']['wpa2'][mode_a] + ssid_psk = self.ap_object.psk_data['2g']['wpa2'][mode_a] + security = "wpa2" + upstream_port = "eth2" + print(self.lanforge_data['port']) + + try: + test_result = self.test.Single_Client_Connectivity(upstream_port=upstream_port, + radio=self.lanforge_data['2g_radio'], + ssid=ssid_name, + passkey=ssid_psk, + security=security, + station_name=station, test_case=test_case, rid=self.rid, + client=self.client, logger=self.logger) + except: + test_result = "error" + self.test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger) + pass + self.report_data['tests'][self.model][int(test_case)] = test_result + print(self.report_data['tests'][self.model]) + + time.sleep(10) + + # TC - 2.4 GHz WPA + test_case = test_cases["2g_wpa_" + mode] + station = [self.lanforge_data['prefix'] + "2420"] + ssid_name = self.ap_object.ssid_data['2g']['wpa'][mode_a] + ssid_psk = self.ap_object.psk_data['2g']['wpa'][mode_a] + security = "wpa" + upstream_port = "eth2" + print(self.lanforge_data['port']) + try: + test_result = self.test.Single_Client_Connectivity(upstream_port=upstream_port, + radio=self.lanforge_data['2g_radio'], + ssid=ssid_name, + passkey=ssid_psk, + security=security, + station_name=station, test_case=test_case, rid=self.rid, + client=self.client, logger=self.logger) + except: + test_result = "error" + self.test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger) + pass + self.report_data['tests'][self.model][int(test_case)] = test_result + print(self.report_data['tests'][self.model]) + + time.sleep(10) + + def test_5g(self, mode="bridge"): + + if mode == "bridge": + mode_a = "name" + if mode == "nat": + mode_a = "nat" + + if not self.args.skip_radius: + # TC - 5 GHz WPA2-Enterprise + test_case = self.test_cases["5g_eap_" + mode] + radio = lanforge_5g_radio + sta_list = [lanforge_prefix + "5215"] + ssid_name = ssid_5g_eap + security = "wpa2" + eap_type = "TTLS" + try: + test_result = Test.Single_Client_EAP(port, sta_list, ssid_name, radio, security, eap_type, identity, ttls_password, test_case, rid, client, logger) except: test_result = "error" @@ -271,90 +348,15 @@ class NightlySanity: time.sleep(10) - ###Run Client Single Connectivity Test Cases for Bridge SSIDs - # TC - 2.4 GHz WPA2 - test_case = test_cases["2g_wpa2_bridge"] - station = [self.lanforge_data['prefix'] + "2237"] - ssid_name = self.ap_object.ssid_data['2g']['wpa2']['name'] - ssid_psk = self.ap_object.psk_data['2g']['wpa2']['name'] - security = "wpa2" - upstream_port = "eth2" - print(self.lanforge_data['port']) - - - try: - test_result = self.Test.Single_Client_Connectivity(upstream_port=upstream_port, - radio=self.lanforge_data['2g_radio'], - ssid=ssid_name, - passkey=ssid_psk, - security=security, - station_name=station, test_case=test_case, rid=self.rid, client=self.client, logger=self.logger) - except: - test_result = "error" - self.Test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger) - pass - self.report_data['tests'][self.model][int(test_case)] = test_result - print(self.report_data['tests'][self.model]) - - time.sleep(10) - - # TC - 2.4 GHz WPA - test_case = test_cases["2g_wpa_bridge"] - station = [self.lanforge_data['prefix'] + "2420"] - ssid_name = self.ap_object.ssid_data['2g']['wpa']['name'] - ssid_psk = self.ap_object.psk_data['2g']['wpa']['name'] - security = "wpa" - upstream_port = "eth2" - print(self.lanforge_data['port']) - try: - test_result = self.Test.Single_Client_Connectivity(upstream_port=upstream_port, - radio=self.lanforge_data['2g_radio'], - ssid=ssid_name, - passkey=ssid_psk, - security=security, - station_name=station, test_case=test_case, rid=self.rid, - client=self.client, logger=self.logger) - except: - test_result = "error" - self.Test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger) - pass - self.report_data['tests'][self.model][int(test_case)] = test_result - print(self.report_data['tests'][self.model]) - - time.sleep(10) - - # dev complete - def test_bridge_mode_5g(self): - - if not self.args.skip_radius: - # TC - 5 GHz WPA2-Enterprise - test_case = self.test_cases["5g_eap_bridge"] - radio = lanforge_5g_radio - sta_list = [lanforge_prefix+"5215"] - ssid_name = ssid_5g_eap - security = "wpa2" - eap_type = "TTLS" - try: - test_result = Test.Single_Client_EAP(port, sta_list, ssid_name, radio, security, eap_type, - identity, ttls_password, test_case, rid, client, logger) - except: - test_result = "error" - Test.testrail_retest(test_case, rid, ssid_name, client, logger) - pass - report_data['tests'][key][int(test_case)] = test_result - print(report_data['tests'][key]) - - time.sleep(10) - # TC 5 GHz WPA2 - test_case = test_cases["5g_wpa2_bridge"] + test_case = test_cases["5g_wpa2_" + mode] station = [self.lanforge_data['prefix'] + "2236"] - ssid_name = self.ap_object.ssid_data['5g']['wpa2']['name'] - ssid_psk = self.ap_object.psk_data['5g']['wpa2']['name'] + ssid_name = self.ap_object.ssid_data['5g']['wpa2'][mode_a] + ssid_psk = self.ap_object.psk_data['5g']['wpa2'][mode_a] security = "wpa2" upstream_port = "eth2" try: - test_result = self.Test.Single_Client_Connectivity(upstream_port=upstream_port, + test_result = self.test.Single_Client_Connectivity(upstream_port=upstream_port, radio=self.lanforge_data['5g_radio'], ssid=ssid_name, passkey=ssid_psk, @@ -363,7 +365,7 @@ class NightlySanity: client=self.client, logger=self.logger) except: test_result = "error" - self.Test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger) + self.test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger) pass self.report_data['tests'][self.model][int(test_case)] = test_result print(self.report_data['tests'][self.model]) @@ -371,14 +373,14 @@ class NightlySanity: time.sleep(10) # # TC - 5 GHz WPA - test_case = test_cases["5g_wpa_bridge"] - station = [self.lanforge_data['prefix']+"2419"] - ssid_name = self.ap_object.ssid_data['5g']['wpa']['name'] - ssid_psk = self.ap_object.psk_data['5g']['wpa']['name'] + test_case = test_cases["5g_wpa_" + mode] + station = [self.lanforge_data['prefix'] + "2419"] + ssid_name = self.ap_object.ssid_data['5g']['wpa'][mode_a] + ssid_psk = self.ap_object.psk_data['5g']['wpa'][mode_a] security = "wpa" upstream_port = "eth2" try: - test_result = self.Test.Single_Client_Connectivity(upstream_port=upstream_port, + test_result = self.test.Single_Client_Connectivity(upstream_port=upstream_port, radio=self.lanforge_data['5g_radio'], ssid=ssid_name, passkey=ssid_psk, @@ -387,24 +389,13 @@ class NightlySanity: client=self.client, logger=self.logger) except: test_result = "error" - self.Test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger) + self.test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger) pass self.report_data['tests'][self.model][int(test_case)] = test_result print(self.report_data['tests'][self.model]) time.sleep(10) - pass - - - - def test_nat_mode(self): - pass - - def test_vlan_mode(self): - pass - - def main(): parser = argparse.ArgumentParser(description="Nightly Combined Tests", add_help=False) @@ -427,36 +418,37 @@ def main(): command_line_args = base.command_line_args # cmd line takes precedence over env-vars. - cloudSDK_url = command_line_args.sdk_base_url # was os.getenv('CLOUD_SDK_URL') + cloudsdk_url = command_line_args.sdk_base_url # was os.getenv('CLOUD_SDK_URL') + local_dir = command_line_args.local_dir # was os.getenv('SANITY_LOG_DIR') report_path = command_line_args.report_path # was os.getenv('SANITY_REPORT_DIR') report_template = command_line_args.report_template # was os.getenv('REPORT_TEMPLATE') - ## TestRail Information + # TestRail Information tr_user = command_line_args.testrail_user_id # was os.getenv('TR_USER') tr_pw = command_line_args.testrail_user_password # was os.getenv('TR_PWD') - milestoneId = command_line_args.milestone # was os.getenv('MILESTONE') - projectId = command_line_args.testrail_project # was os.getenv('PROJECT_ID') - testRunPrefix = command_line_args.testrail_run_prefix # os.getenv('TEST_RUN_PREFIX') + milestone_id = command_line_args.milestone # was os.getenv('MILESTONE') + project_id = command_line_args.testrail_project # was os.getenv('PROJECT_ID') + test_run_prefix = command_line_args.testrail_run_prefix # os.getenv('TEST_RUN_PREFIX') - ##Jfrog credentials + # Jfrog credentials jfrog = { "user": command_line_args.jfrog_user_id, # was os.getenv('JFROG_USER') "pass": command_line_args.jfrog_user_password # was os.getenv('JFROG_PWD') } - ##EAP Credentials + # EAP Credentials eap_cred = { "identity": command_line_args.eap_id, "ttls_password": command_line_args.ttls_password } - ## AP Credentials + # AP Credentials ap_cred = { "username": command_line_args.ap_username } - ##LANForge Information + # LANForge Information lanforge = { "ip": command_line_args.lanforge_ip_address, "port": command_line_args.lanforge_port_number, @@ -470,55 +462,31 @@ def main(): logger = base.logger hdlr = base.hdlr - if command_line_args.testbed == None: + if command_line_args.testbed is None: print("ERROR: Must specify --testbed argument for this test.") sys.exit(1) print("Start of Sanity Testing...") print("Testing Latest Build with Tag: " + build) - if command_line_args.skip_upgrade == True: + if command_line_args.skip_upgrade: print("Will skip upgrading AP firmware...") - ######Testrail Project and Run ID Information ############################## + # Testrail Project and Run ID Information - Test = RunTest(lanforge_ip=lanforge["ip"], lanforge_port=lanforge["port"], lanforge_prefix=lanforge["prefix"]) + test = RunTest(lanforge_ip=lanforge["ip"], lanforge_port=lanforge["port"], lanforge_prefix=lanforge["prefix"]) + + build_obj = GetBuild(jfrog['user'], jfrog['pass'], build) # sanity_status = json.load(open("sanity_status.json")) - obj = NightlySanity(args=command_line_args, base=base, lanforge_data=lanforge, Test=Test, reporting=reporting) + obj = NightlySanity(args=command_line_args, base=base, lanforge_data=lanforge, Test=test, reporting=reporting, + build=build_obj) + obj.configure_dut() - projId = obj.client.get_project_id(project_name=projectId) - print("TIP WLAN Project ID is:", projId) + proj_id = obj.client.get_project_id(project_name=project_id) + print("TIP WLAN Project ID is:", proj_id) logger.info('Start of Nightly Sanity') - - # get latest revision - firmware = obj.check_fw(jfrog=jfrog) - report_data = dict() - - # Check is current fw is there else will skip this variant test - if (firmware["current"] is not None) and firmware["latest"] != firmware["current"]: - do_upgrade = obj.cloud.should_upgrade_ap_fw(obj.bearer, obj.args, report_data, firmware["latest"], - command_line_args.model, - firmware["current"], logger) - - elif (firmware["current"] is not None) and firmware["latest"] == firmware["current"]: - do_upgrade = False - print("AP ia already having Latest Firmware...") - - else: - print("Skipping this Profile") - exit() - - # exit() - # Test till here to verify all connectivity with cloud and ap and fe upgrade logics - - # Create session for Test - obj.create_test_run_session() - - # Setup Reporting obj.setup_report() - - # Start Test - obj.start_test(do_upgrade=do_upgrade) + obj.start_test() if __name__ == "__main__": diff --git a/tests/UnitTestBase.py b/tests/UnitTestBase.py index ce09b551c..b16e49cd6 100644 --- a/tests/UnitTestBase.py +++ b/tests/UnitTestBase.py @@ -1,14 +1,16 @@ #!/usr/bin/python3 import sys + if sys.version_info[0] != 3: print("This script requires Python 3") exit(1) import sys + for folder in 'py-json', 'py-scripts': if folder not in sys.path: - sys.path.append(f'../libs/lanforge/lanforge-scripts/{folder}') + sys.path.append(f'../lanforge/lanforge-scripts/{folder}') sys.path.append(f'../libs/lanforge') sys.path.append(f'../libs/testrails') @@ -58,14 +60,11 @@ import glob # external_results_dir=/var/tmp/lanforge -# To run this from your home system to NOLA-01 testbed, use this command. -# This assumes you have set up an ssh tunnel logged to the cicd jumphost that can -# reach the lab. -# In separate console to set up the ssh tunnel: -#ssh -C -L 7220:lab-ctlr:22 ubuntu@3.130.51.163 -# On local machine: -#./query_ssids.py --testrail-user-id NONE --model ecw5410 --ap-jumphost-address localhost --ap-jumphost-port 7220 --ap-jumphost-password secret --ap-jumphost-tty /dev/ttyAP1 - +# To run this from your home system to NOLA-01 testbed, use this command. This assumes you have set up an ssh tunnel +# logged to the cicd jumphost that can reach the lab. In separate console to set up the ssh tunnel: ssh -C -L +# 7220:lab-ctlr:22 ubuntu@3.130.51.163 On local machine: +# ./query_ssids.py --testrail-user-id NONE --model ecw5410 +# --ap-jumphost-address localhost --ap-jumphost-port 7220 --ap-jumphost-password secret --ap-jumphost-tty /dev/ttyAP1 import testrail_api @@ -86,7 +85,7 @@ from cloudsdk import CreateAPProfiles import ap_ssh from ap_ssh import * -##Import info for lab setup and APs under test +# Import info for lab setup and APs under test import lab_ap_info from lab_ap_info import cloud_sdk_models from lab_ap_info import ap_models @@ -95,34 +94,38 @@ from lab_ap_info import cloud_type from lab_ap_info import test_cases from lab_ap_info import radius_info + class UnitTestBase: def __init__(self, log_name, args, reporting): - self.parser = argparse.ArgumentParser(description="Sanity Testing on Firmware Build", parents=[args]) - self.parser.add_argument("-b", "--build-id", type=str, help="FW commit ID (latest pending build on dev is default)", - default = "pending") + self.parser.add_argument("-b", "--build-id", type=str, + help="FW commit ID (latest pending build on dev is default)", + default="pending") self.parser.add_argument("--skip-upgrade", type=bool, help="Skip upgrading firmware", - default = False) - self.parser.add_argument("--force-upgrade", type=bool, help="Force upgrading firmware even if it is already current version", - default = False) - self.parser.add_argument("-m", "--model", type=str, choices=['ea8300', 'ecw5410', 'ecw5211', 'ec420', 'wf188n', 'None'], - help="AP model to be run", required=True) + default=False) + self.parser.add_argument("--force-upgrade", type=bool, + help="Force upgrading firmware even if it is already current version", + default=False) + self.parser.add_argument("-m", "--model", type=str, + choices=['ea8300', 'ecw5410', 'ecw5211', 'ec420', 'wf188n', 'None'], + help="AP model to be run", required=True) self.parser.add_argument("--equipment_id", type=str, help="AP model ID, as exists in the cloud-sdk. -1 to auto-detect.", - default = "-1") + default="-1") self.parser.add_argument("--object_id", type=str, help="Used when querying and deleting individual objects.", - default = None) + default=None) self.parser.add_argument("--customer-id", type=str, help="Specify cloud customer-id, default is 2", - default = "2") + default="2") self.parser.add_argument("--testbed", type=str, help="Testbed name, will be prefixed to profile names and similar", - default = None) + default=None) - self.parser.add_argument("--sdk-base-url", type=str, help="cloudsdk base url, default: https://wlan-portal-svc.cicd.lab.wlan.tip.build", + self.parser.add_argument("--sdk-base-url", type=str, + help="cloudsdk base url, default: https://wlan-portal-svc.cicd.lab.wlan.tip.build", default="https://wlan-portal-svc.cicd.lab.wlan.tip.build") self.parser.add_argument("--sdk-user-id", type=str, help="cloudsdk user id, default: support@example.conf", default="support@example.com") @@ -130,66 +133,72 @@ class UnitTestBase: default="support") self.parser.add_argument("--jfrog-base-url", type=str, help="jfrog base url", - default="tip.jFrog.io/artifactory/tip-wlan-ap-firmware") + default="tip.jFrog.io/artifactory/tip-wlan-ap-firmware") self.parser.add_argument("--jfrog-user-id", type=str, help="jfrog user id", - default="tip-read") + default="tip-read") self.parser.add_argument("--jfrog-user-password", type=str, help="jfrog user password", - default="tip-read") + default="tip-read") - self.parser.add_argument("--testrail-base-url", type=str, help="testrail base url", # was os.getenv('TESTRAIL_URL') - default="https://telecominfraproject.testrail.com") + self.parser.add_argument("--testrail-base-url", type=str, help="testrail base url", + # was os.getenv('TESTRAIL_URL') + default="https://telecominfraproject.testrail.com") self.parser.add_argument("--testrail-project", type=str, help="testrail project name", - default="opsfleet-wlan") - self.parser.add_argument("--testrail-user-id", type=str, help="testrail user id. Use 'NONE' to disable use of testrails.", - default="gleb@opsfleet.com") + default="opsfleet-wlan") + self.parser.add_argument("--testrail-user-id", type=str, + help="testrail user id. Use 'NONE' to disable use of testrails.", + default="gleb@opsfleet.com") self.parser.add_argument("--testrail-user-password", type=str, help="testrail user password", - default="password") + default="password") self.parser.add_argument("--testrail-run-prefix", type=str, help="testrail run prefix", - default="prefix-1") + default="prefix-1") self.parser.add_argument("--milestone", type=str, help="testrail milestone ID", - default="milestone-1") + default="milestone-1") self.parser.add_argument("--lanforge-ip-address", type=str, help="ip address of the lanforge gui", - default="127.0.0.1") + default="127.0.0.1") self.parser.add_argument("--lanforge-port-number", type=str, help="port of the lanforge gui", - default="8080") + default="8080") self.parser.add_argument("--lanforge-prefix", type=str, help="LANforge api prefix string", - default="sdk") + default="sdk") self.parser.add_argument("--lanforge-2g-radio", type=str, help="LANforge 2Ghz radio to use for testing", - default="1.1.wiphy0") + default="1.1.wiphy0") self.parser.add_argument("--lanforge-5g-radio", type=str, help="LANforge 5Ghz radio to use for testing", - default="1.1.wiphy1") + default="1.1.wiphy1") self.parser.add_argument("--local_dir", type=str, help="Sanity logging directory", - default="logs") + default="logs") self.parser.add_argument("--report-path", type=str, help="Sanity report directory", - default="reports") + default="reports") self.parser.add_argument("--report-template", type=str, help="Sanity report template", - default="reports/report_template.php") + default="reports/report_template.php") self.parser.add_argument("--eap-id", type=str, help="EAP indentity", - default="lanforge") + default="lanforge") self.parser.add_argument("--ttls-password", type=str, help="TTLS password", - default="lanforge") + default="lanforge") self.parser.add_argument("--ap-ip", type=str, help="AP IP Address, for direct ssh access if not using jumphost", - default="127.0.0.1") + default="127.0.0.1") self.parser.add_argument("--ap-username", type=str, help="AP username", - default="root") + default="root") self.parser.add_argument("--ap-password", type=str, help="AP password", - default="root") - self.parser.add_argument("--ap-jumphost-address", type=str, help="IP of system that we can ssh in to get serial console access to AP", - default=None) - self.parser.add_argument("--ap-jumphost-port", type=str, help="SSH port to use in case we are using ssh tunneling or other non-standard ports", - default="22") - self.parser.add_argument("--ap-jumphost-username", type=str, help="User-ID for system that we can ssh in to get serial console access to AP", - default="lanforge") - self.parser.add_argument("--ap-jumphost-password", type=str, help="Passwort for system that we can ssh in to get serial console access to AP", - default="lanforge") + default="root") + self.parser.add_argument("--ap-jumphost-address", type=str, + help="IP of system that we can ssh in to get serial console access to AP", + default=None) + self.parser.add_argument("--ap-jumphost-port", type=str, + help="SSH port to use in case we are using ssh tunneling or other non-standard ports", + default="22") + self.parser.add_argument("--ap-jumphost-username", type=str, + help="User-ID for system that we can ssh in to get serial console access to AP", + default="lanforge") + self.parser.add_argument("--ap-jumphost-password", type=str, + help="Passwort for system that we can ssh in to get serial console access to AP", + default="lanforge") self.parser.add_argument("--ap-jumphost-wlan-testing", type=str, help="wlan-testing repo dir on the jumphost", - default="git/wlan-testing") + default="git/wlan-testing") self.parser.add_argument("--ap-jumphost-tty", type=str, help="Serial port for the AP we wish to talk to", - default="UNCONFIGURED-JUMPHOST-TTY") + default="UNCONFIGURED-JUMPHOST-TTY") self.parser.add_argument('--skip-update-firmware', dest='update_firmware', action='store_false') self.parser.set_defaults(update_firmware=True) @@ -200,28 +209,28 @@ class UnitTestBase: self.command_line_args = self.parser.parse_args() # cmd line takes precedence over env-vars. - self.cloudSDK_url = self.command_line_args.sdk_base_url # was os.getenv('CLOUD_SDK_URL') - self.local_dir = self.command_line_args.local_dir # was os.getenv('SANITY_LOG_DIR') - self.report_path = self.command_line_args.report_path # was os.getenv('SANITY_REPORT_DIR') + self.cloudSDK_url = self.command_line_args.sdk_base_url # was os.getenv('CLOUD_SDK_URL') + self.local_dir = self.command_line_args.local_dir # was os.getenv('SANITY_LOG_DIR') + self.report_path = self.command_line_args.report_path # was os.getenv('SANITY_REPORT_DIR') self.report_template = self.command_line_args.report_template # was os.getenv('REPORT_TEMPLATE') ## TestRail Information - self.tr_user = self.command_line_args.testrail_user_id # was os.getenv('TR_USER') - self.tr_pw = self.command_line_args.testrail_user_password # was os.getenv('TR_PWD') - self.milestoneId = self.command_line_args.milestone # was os.getenv('MILESTONE') - self.projectId = self.command_line_args.testrail_project # was os.getenv('PROJECT_ID') - self.testRunPrefix = self.command_line_args.testrail_run_prefix # os.getenv('TEST_RUN_PREFIX') + self.tr_user = self.command_line_args.testrail_user_id # was os.getenv('TR_USER') + self.tr_pw = self.command_line_args.testrail_user_password # was os.getenv('TR_PWD') + self.milestoneId = self.command_line_args.milestone # was os.getenv('MILESTONE') + self.projectId = self.command_line_args.testrail_project # was os.getenv('PROJECT_ID') + self.testRunPrefix = self.command_line_args.testrail_run_prefix # os.getenv('TEST_RUN_PREFIX') ##Jfrog credentials - self.jfrog_user = self.command_line_args.jfrog_user_id # was os.getenv('JFROG_USER') - self.jfrog_pwd = self.command_line_args.jfrog_user_password # was os.getenv('JFROG_PWD') + self.jfrog_user = self.command_line_args.jfrog_user_id # was os.getenv('JFROG_USER') + self.jfrog_pwd = self.command_line_args.jfrog_user_password # was os.getenv('JFROG_PWD') ##EAP Credentials - self.identity = self.command_line_args.eap_id # was os.getenv('EAP_IDENTITY') - self.ttls_password = self.command_line_args.ttls_password # was os.getenv('EAP_PWD') + self.identity = self.command_line_args.eap_id # was os.getenv('EAP_IDENTITY') + self.ttls_password = self.command_line_args.ttls_password # was os.getenv('EAP_PWD') ## AP Credentials - self.ap_username = self.command_line_args.ap_username # was os.getenv('AP_USER') + self.ap_username = self.command_line_args.ap_username # was os.getenv('AP_USER') ##LANForge Information self.lanforge_ip = self.command_line_args.lanforge_ip_address diff --git a/tests/test_utility/reporting.py b/tests/test_utility/reporting.py index 0e7e85d44..0517fb001 100644 --- a/tests/test_utility/reporting.py +++ b/tests/test_utility/reporting.py @@ -1,9 +1,9 @@ - import os from datetime import date, datetime from shutil import copyfile import json + class Reporting: def __init__(self, reports_root="../reports/"): @@ -11,7 +11,7 @@ class Reporting: self.reports_root = reports_root self.report_id = self.create_report_id() self.report_path = self.reports_root + self.report_id - self.templates_root = os.path.abspath(self.reports_root+"../templates") + self.templates_root = os.path.abspath(self.reports_root + "../templates") try: os.mkdir(self.report_path) print("Successfully created the directory %s " % self.report_path) @@ -23,10 +23,9 @@ class Reporting: except: print("No report template created. Report data will still be saved. Continuing with tests...") - def create_report_id(self): today = str(date.today()) - now = str(datetime.now()).split(" ")[1].split(".")[0].replace(":","-") + now = str(datetime.now()).split(" ")[1].split(".")[0].replace(":", "-") id = today + "-" + now return id @@ -38,15 +37,10 @@ class Reporting: except Exception as e: print(e) - def update_report_instance(self): - pass - - def cleanup_report_instance(self): - pass - def main(): Reporting() + if __name__ == '__main__': - main() \ No newline at end of file + main()