From 4c1cc92add7403b14066fb52d5e77be99833f438 Mon Sep 17 00:00:00 2001 From: shivam Date: Mon, 8 Feb 2021 23:24:47 +0530 Subject: [PATCH] Basic Code Refactoring and Setup for Unit Tests --- libs/ap_plus_sdk.py | 30 + libs/cloudsdk/cloudsdk.py | 400 ++++-- libs/lanforge/lf_tests.py | 22 +- sync_repos.bash | 14 +- tests/Nightly_Sanity.py | 1543 ++++++--------------- tests/UnitTestBase.py | 43 +- {pytest => tests/pytest}/Dockerfile | 0 {pytest => tests/pytest}/conftest.py | 0 {pytest => tests/pytest}/helpers/utils.py | 0 {pytest => tests/pytest}/pytest.ini | 0 {pytest => tests/pytest}/test_24ghz.py | 0 tests/test_utility/reporting.py | 52 + tools/sdk_set_profile.py | 464 +++---- 13 files changed, 1048 insertions(+), 1520 deletions(-) create mode 100644 libs/ap_plus_sdk.py rename {pytest => tests/pytest}/Dockerfile (100%) rename {pytest => tests/pytest}/conftest.py (100%) rename {pytest => tests/pytest}/helpers/utils.py (100%) rename {pytest => tests/pytest}/pytest.ini (100%) rename {pytest => tests/pytest}/test_24ghz.py (100%) create mode 100644 tests/test_utility/reporting.py diff --git a/libs/ap_plus_sdk.py b/libs/ap_plus_sdk.py new file mode 100644 index 000000000..654954191 --- /dev/null +++ b/libs/ap_plus_sdk.py @@ -0,0 +1,30 @@ + + +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 89b1c3080..f813e7911 100755 --- a/libs/cloudsdk/cloudsdk.py +++ b/libs/cloudsdk/cloudsdk.py @@ -839,14 +839,16 @@ class CloudSDK: + # Library for creating AP Profiles class CreateAPProfiles: def __init__(self, command_line_args, - cloud = None, - cloud_type= "v1", - client = None + cloud=None, + cloud_type="v1", + client=None, + fw_model=None ): self.rid = None @@ -860,7 +862,7 @@ class CreateAPProfiles: self.radius_profile = None self.radius_name = None self.cloud = cloud - self.client= client + self.client = client self.cloud_type = cloud_type self.customer_id = command_line_args.customer_id self.ap_cli_info = ssh_cli_active_fw(self.command_line_args) @@ -868,7 +870,7 @@ class CreateAPProfiles: print("cloud cannot be None") exit() self.ap_cli_fw = self.ap_cli_info['active_fw'] - self.bearer = self.cloud.get_bearer(self.command_line_args.sdk_base_url , self.cloud_type) + self.bearer = self.cloud.get_bearer(self.command_line_args.sdk_base_url, self.cloud_type) self.radius_info = { "name": "Lab-RADIUS", @@ -882,22 +884,199 @@ class CreateAPProfiles: "auth_port": 1812 } self.ap_models = ["ec420", "ea8300", "ecw5211", "ecw5410"] + self.fw_model = fw_model self.report_data = {} 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, - "ap_bridge" : None, - "bridge_vifc" : None, - "bridge_vifs" : None + "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, + "ap_bridge": None, + "bridge_vifc": None, + "bridge_vifs": None + } + self.profile_data, self.prof_names, self.prof_names_eap = self.create_profile_data(self.command_line_args, + self.fw_model) + self.ssid_data, self.psk_data = self.create_ssid_data(self.command_line_args, self.fw_model) + + def create_profile_data(self, args, fw_model): + profile_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") + } + } + } + prof_names = [profile_data["5g"]["wpa2"]["name"], profile_data["5g"]["wpa"]["name"], + profile_data["2g"]["wpa2"]["name"], profile_data["2g"]["wpa"]["name"], + profile_data["5g"]["wpa2"]["nat"], profile_data["5g"]["wpa"]["nat"], + profile_data["2g"]["wpa2"]["nat"], profile_data["2g"]["wpa"]["nat"], + profile_data["5g"]["wpa2"]["vlan"], profile_data["5g"]["wpa"]["vlan"], + profile_data["2g"]["wpa2"]["vlan"], profile_data["2g"]["wpa"]["vlan"]] + + prof_names_eap = [profile_data["5g"]["eap"]["name"], profile_data["2g"]["eap"]["name"], + profile_data["5g"]["eap"]["nat"], profile_data["2g"]["eap"]["nat"], + profile_data["5g"]["eap"]["vlan"], profile_data["2g"]["eap"]["vlan"]] + + 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") + } + } } + psk_data = { + "5g": + { + "wpa": + { + "name": "%s-%s" % (fw_model, "5G_WPA"), + "nat": "%s-%s" % (fw_model, "5G_WPA_NAT"), + "vlan": "%s-%s" % (fw_model, "5G_WPA_VLAN") + }, + "wpa2": + { + "name": "%s-%s" % (fw_model, "5G_WPA2"), + "nat": "%s-%s" % (fw_model, "5G_WPA2_NAT"), + "vlan": "%s-%s" % (fw_model, "5G_WPA2_VLAN") + } + }, + "2g": + { + "wpa": + { + "name": "%s-%s" % (fw_model, "2G_WPA"), + "nat": "%s-%s" % (fw_model, "2G_WPA_NAT"), + "vlan": "%s-%s" % (fw_model, "2G_WPA_VLAN") + }, + "wpa2": + { + "name": "%s-%s" % (fw_model, "2G_WPA2"), + "nat": "%s-%s" % (fw_model, "2G_WPA2_NAT"), + "vlan": "%s-%s" % (fw_model, "2G_WPA2_VLAN") + } + } + } + + return ssid_data, psk_data + + def set_ssid_psk_data(self, + ssid_2g_wpa=None, + ssid_5g_wpa=None, + psk_2g_wpa=None, + psk_5g_wpa=None, + ssid_2g_wpa2=None, + ssid_5g_wpa2=None, + psk_2g_wpa2=None, + psk_5g_wpa2=None): + if psk_5g_wpa2 is not None: + self.psk_data["5g"]["wpa2"]["name"] = psk_5g_wpa2 + self.psk_data["5g"]["wpa2"]["nat"] = psk_5g_wpa2 + self.psk_data["5g"]["wpa2"]["vlan"] = psk_5g_wpa2 + if psk_5g_wpa is not None: + self.psk_data["5g"]["wpa"]["name"] = psk_5g_wpa + self.psk_data["5g"]["wpa"]["nat"] = psk_5g_wpa + self.psk_data["5g"]["wpa"]["vlan"] = psk_5g_wpa + if psk_2g_wpa2 is not None: + self.psk_data["2g"]["wpa2"]["name"] = psk_2g_wpa2 + self.psk_data["2g"]["wpa2"]["nat"] = psk_2g_wpa2 + self.psk_data["2g"]["wpa2"]["vlan"] = psk_2g_wpa2 + if psk_2g_wpa is not None: + self.psk_data["2g"]["wpa"]["name"] = psk_2g_wpa + self.psk_data["2g"]["wpa"]["nat"] = psk_2g_wpa + self.psk_data["2g"]["wpa"]["nat"] = psk_2g_wpa + if ssid_5g_wpa2 is not None: + self.ssid_data["5g"]["wpa2"]["name"] = ssid_5g_wpa2 + self.ssid_data["5g"]["wpa2"]["nat"] = ssid_5g_wpa2 + self.ssid_data["5g"]["wpa2"]["vlan"] = ssid_5g_wpa2 + if ssid_5g_wpa is not None: + self.ssid_data["5g"]["wpa"]["name"] = ssid_5g_wpa + self.ssid_data["5g"]["wpa"]["nat"] = ssid_5g_wpa + self.ssid_data["5g"]["wpa"]["vlan"] = ssid_5g_wpa + if ssid_2g_wpa2 is not None: + self.ssid_data["2g"]["wpa2"]["name"] = ssid_2g_wpa2 + self.ssid_data["2g"]["wpa2"]["nat"] = ssid_2g_wpa2 + self.ssid_data["2g"]["wpa2"]["vlan"] = ssid_2g_wpa2 + if ssid_2g_wpa is not None: + self.ssid_data["2g"]["wpa"]["name"] = ssid_2g_wpa + self.ssid_data["2g"]["wpa"]["nat"] = ssid_2g_wpa + self.ssid_data["2g"]["wpa"]["vlan"] = ssid_2g_wpa def create_radius_profile(self, radius_name, rid, key): @@ -917,11 +1096,14 @@ class CreateAPProfiles: if self.command_line_args.skip_radius == False: try: print("Into") - self.radius_profile = self.cloud.create_or_update_radius_profile(self.command_line_args.sdk_base_url, self.bearer, self.customer_id, - self.radius_template, self.radius_name, self.subnet_name, - self.subnet, - self.subnet_mask, self.region, self.server_name, self.server_ip, - self.secret, self.auth_port) + self.radius_profile = self.cloud.create_or_update_radius_profile(self.command_line_args.sdk_base_url, + self.bearer, self.customer_id, + self.radius_template, self.radius_name, + self.subnet_name, + self.subnet, + self.subnet_mask, self.region, + self.server_name, self.server_ip, + self.secret, self.auth_port) print("radius profile Id is", self.radius_profile) client.update_testrail(case_id=self.test_cases["radius_profile"], run_id=self.rid, status_id=1, msg='RADIUS profile created successfully') @@ -938,9 +1120,9 @@ class CreateAPProfiles: msg='Failed to create RADIUS profile') self.test_cases["radius_profile"] = "failed" - def create_ssid_profiles(self, ssid_profile_data= None, skip_wpa2=False, skip_wpa=False, skip_eap=False): - self.ssid_profile_data = ssid_profile_data - self.ssid_template = ssid_profile_data["ssid_template"] + def create_ssid_profiles(self, ssid_template=None, skip_wpa2=False, skip_wpa=False, skip_eap=False): + + self.ssid_template = ssid_template self.fiveG_eap = None self.twoFourG_eap = None @@ -948,18 +1130,23 @@ class CreateAPProfiles: self.twoFourG_wpa2 = None self.fiveG_wpa = None self.twoFourG_wpa = None - + # 5G SSID's - print("CreateAPProfile::create_ssid_profile, skip-wpa: ", skip_wpa, " skip-wpa2: ", skip_wpa2, " skip-eap: ", skip_eap) + print("CreateAPProfile::create_ssid_profile, skip-wpa: ", skip_wpa, " skip-wpa2: ", skip_wpa2, " skip-eap: ", + skip_eap) # 5G eap if not skip_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, - ssid_profile_data['5G']['eap']['info'][1], - ssid_profile_data['5G']['eap']['info'][0], None, - self.radius_name, - "wpa2OnlyRadius", "BRIDGE", 1, ["is5GHzU", "is5GHz", "is5GHzL"]) + 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'], + None, + self.radius_name, + "wpa2OnlyRadius", "BRIDGE", 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') @@ -975,14 +1162,18 @@ class CreateAPProfiles: # 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, - ssid_profile_data['2G']['eap']['info'][1], - ssid_profile_data['2G']['eap']['info'][0], None, - self.radius_name, "wpa2OnlyRadius", "BRIDGE", 1, - ["is2dot4GHz"]) + 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'], + None, + self.radius_name, "wpa2OnlyRadius", + "BRIDGE", 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') + msg='2.4G EAP SSID created successfully - bridge mode') self.test_cases["ssid_2g_eap_bridge"] = "passed" except Exception as ex: print(ex) @@ -990,20 +1181,25 @@ class CreateAPProfiles: 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, - msg='2.4G EAP SSID create failed - bridge mode') + msg='2.4G EAP SSID create failed - bridge mode') self.test_cases["ssid_2g_eap_bridge"] = "failed" # 5g wpa2 if not skip_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, - ssid_profile_data['5G']['wpa2']['info'][1], - ssid_profile_data['5G']['wpa2']['info'][0], ssid_profile_data['5G']['wpa2']['psk'][0], - "Radius-Accounting-Profile", "wpa2OnlyPSK", "BRIDGE", 1, - ["is5GHzU", "is5GHz", "is5GHzL"]) + 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'], + "Radius-Accounting-Profile", "wpa2OnlyPSK", + "BRIDGE", 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, status_id=1, - msg='5G WPA2 SSID created successfully - bridge mode') + self.client.update_testrail(case_id=self.test_cases["ssid_5g_wpa2_bridge"], run_id=self.rid, + status_id=1, + msg='5G WPA2 SSID created successfully - bridge mode') self.test_cases["ssid_5g_wpa2_bridge"] = "passed" except Exception as ex: print(ex) @@ -1011,19 +1207,24 @@ class CreateAPProfiles: 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') + msg='5G WPA2 SSID create failed - bridge mode') self.test_cases["ssid_5g_wpa2_bridge"] = "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, - ssid_profile_data['2G']['wpa2']['info'][1], - ssid_profile_data['2G']['wpa2']['info'][0], ssid_profile_data['2G']['wpa2']['psk'][0], - "Radius-Accounting-Profile", "wpa2OnlyPSK", "BRIDGE", 1, - ["is2dot4GHz"]) + 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'], + "Radius-Accounting-Profile", + "wpa2OnlyPSK", "BRIDGE", 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, status_id=1, - msg='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, + status_id=1, + msg='2.4G WPA2 SSID created successfully - bridge mode') self.test_cases["ssid_2g_wpa2_bridge"] = "passed" except Exception as ex: print(ex) @@ -1031,22 +1232,24 @@ class CreateAPProfiles: 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') + msg='2.4G WPA2 SSID create failed - bridge mode') self.test_cases["ssid_2g_wpa2_bridge"] = "failed" - # 5g wpa - if not skip_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, - ssid_profile_data['5G']['wpa']['info'][1], - ssid_profile_data['5G']['wpa']['info'][0], ssid_profile_data['5G']['wpa']['psk'][0], - "Radius-Accounting-Profile", "wpaPSK", "BRIDGE", 1, - ["is5GHzU", "is5GHz", "is5GHzL"]) + 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'], + "Radius-Accounting-Profile", "wpaPSK", + "BRIDGE", 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') + msg='5G WPA SSID created successfully - bridge mode') self.test_cases["ssid_5g_wpa_bridge"] = "passed" except Exception as ex: print(ex) @@ -1054,19 +1257,23 @@ class CreateAPProfiles: 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') + msg='5G WPA SSID create failed - bridge mode') self.test_cases["ssid_5g_wpa_bridge"] = "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, - ssid_profile_data['2G']['wpa']['info'][1], - ssid_profile_data['2G']['wpa']['info'][0], ssid_profile_data['2G']['wpa']['psk'][0], - "Radius-Accounting-Profile", "wpaPSK", "BRIDGE", 1, - ["is2dot4GHz"]) + 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'], + "Radius-Accounting-Profile", "wpaPSK", + "BRIDGE", 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') + msg='2.4G WPA SSID created successfully - bridge mode') self.test_cases["ssid_2g_wpa_bridge"] = "passed" except Exception as ex: print(ex) @@ -1074,11 +1281,9 @@ class CreateAPProfiles: 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') + msg='2.4G WPA SSID create failed - bridge mode') self.test_cases["ssid_2g_wpa_bridge"] = "failed" - - def create_ap_bridge_profile(self, eq_id=None, fw_model=None): self.ssid_prof_config = [] self.ssid_config = [] @@ -1088,33 +1293,33 @@ class CreateAPProfiles: if self.fiveG_wpa2: self.child_profiles.append(self.fiveG_wpa2) - self.ssid_prof_config.append(self.ssid_profile_data['5G']['wpa2']['info'][1]) - self.ssid_config.append(self.ssid_profile_data['5G']['wpa2']['info'][0]) + self.ssid_prof_config.append(self.profile_data['5g']['wpa2']['name']) + self.ssid_config.append(self.ssid_data['5g']['wpa2']['name']) if self.twoFourG_wpa2: self.child_profiles.append(self.twoFourG_wpa2) - self.ssid_prof_config.append(self.ssid_profile_data['2G']['wpa2']['info'][1]) - self.ssid_config.append(self.ssid_profile_data['2G']['wpa2']['info'][0]) + self.ssid_prof_config.append(self.profile_data['2g']['wpa2']['name']) + self.ssid_config.append(self.ssid_data['2g']['wpa2']['name']) if self.fiveG_eap: self.child_profiles.append(self.fiveG_eap) - self.ssid_prof_config.append(self.ssid_profile_data['5G']['eap']['info'][1]) - self.ssid_config.append(self.ssid_profile_data['5G']['eap']['info'][0]) + self.ssid_prof_config.append(self.profile_data['5g']['eap']['name']) + self.ssid_config.append(self.ssid_data['5g']['eap']['name']) if self.twoFourG_eap: self.child_profiles.append(self.twoFourG_eap) - self.ssid_prof_config.append(self.ssid_profile_data['2G']['eap']['info'][1]) - self.ssid_config.append(self.ssid_profile_data['2G']['eap']['info'][0]) + self.ssid_prof_config.append(self.profile_data['2g']['eap']['name']) + self.ssid_config.append(self.ssid_data['2g']['eap']['name']) if self.fiveG_wpa: self.child_profiles.append(self.fiveG_wpa) - self.ssid_prof_config.append(self.ssid_profile_data['5G']['wpa']['info'][1]) - self.ssid_config.append(self.ssid_profile_data['5G']['wpa']['info'][0]) + self.ssid_prof_config.append(self.profile_data['5g']['wpa']['name']) + self.ssid_config.append(self.ssid_data['5g']['wpa']['name']) if self.twoFourG_wpa: self.child_profiles.append(self.twoFourG_wpa) - self.ssid_prof_config.append(self.ssid_profile_data['2G']['wpa']['info'][1]) - self.ssid_config.append(self.ssid_profile_data['2G']['wpa']['info'][0]) + self.ssid_prof_config.append(self.profile_data['2g']['wpa']['name']) + self.ssid_config.append(self.ssid_data['2g']['wpa']['name']) if self.radius_profile is not None: self.child_profiles.append(self.radius_profile) @@ -1123,13 +1328,15 @@ class CreateAPProfiles: name = self.command_line_args.testbed + "-" + self.fw_model + "_bridge" try: - self.create_ap_profile = self.cloud.create_or_update_ap_profile(self.command_line_args.sdk_base_url, self.bearer, self.customer_id, - self.command_line_args.default_ap_profile, name, - self.child_profiles) + self.create_ap_profile = self.cloud.create_or_update_ap_profile(self.command_line_args.sdk_base_url, + self.bearer, self.customer_id, + self.command_line_args.default_ap_profile, + name, + 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') + msg='AP profile for bridge tests created successfully') self.test_cases["ap_bridge"] = "passed" except Exception as ex: print(ex) @@ -1137,11 +1344,10 @@ class CreateAPProfiles: 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') + msg='AP profile for bridge tests could not be created using API') self.test_cases["ap_bridge"] = "failed" - self.ap_profile = self.cloud.set_ap_profile(eq_id, self.test_profile_id, self.command_line_args.sdk_base_url, self.bearer) - - + 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 @@ -1170,13 +1376,13 @@ 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, - msg='SSIDs in VIF Config matches AP Profile Config') + msg='SSIDs in VIF Config matches AP Profile Config') self.test_cases["bridge_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, - msg='SSIDs in VIF Config do not match AP Profile Config') + msg='SSIDs in VIF Config do not match AP Profile Config') self.test_cases["bridge_vifc"] = "failed" except Exception as ex: print(ex) @@ -1184,7 +1390,7 @@ class CreateAPProfiles: 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, - msg='Cannot determine VIF Config - re-test required') + msg='Cannot determine VIF Config - re-test required') self.test_cases["bridge_vifc"] = "error" # VIF State @@ -1195,13 +1401,13 @@ 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, - msg='SSIDs in VIF Config applied to VIF State') + msg='SSIDs in VIF Config applied to VIF State') self.test_cases["bridge_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, - msg='SSIDs in VIF Config not applied to VIF State') + msg='SSIDs in VIF Config not applied to VIF State') self.test_cases["bridge_vifs"] = "failed" except Exception as ex: print(ex) @@ -1209,7 +1415,7 @@ class CreateAPProfiles: 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, - msg='Cannot determine VIF State - re-test required') + msg='Cannot determine VIF State - re-test required') self.test_cases["bridge_vifs"] = "error" print("Profiles Created") diff --git a/libs/lanforge/lf_tests.py b/libs/lanforge/lf_tests.py index 212140173..d1fdcdd16 100644 --- a/libs/lanforge/lf_tests.py +++ b/libs/lanforge/lf_tests.py @@ -5,7 +5,7 @@ from UnitTestBase import * - +from sta_connect2 import StaConnect2 class RunTest: def __init__(self, lanforge_ip, lanforge_port, lanforge_prefix): @@ -13,19 +13,19 @@ class RunTest: self.lanforge_port = lanforge_port self.lanforge_prefix = lanforge_prefix - def Single_Client_Connectivity(self, port, radio, ssid_name, ssid_psk, security, - station, test_case, rid, client, logger): + def Single_Client_Connectivity(self, upstream_port="eth1", radio="wiphy0", ssid="TestAP", passkey="ssid_psk", security="open", + station_name="sta0000", test_case=None, rid=None, client=None, logger=None): '''SINGLE CLIENT CONNECTIVITY using test_connect2.py''' self.staConnect = StaConnect2(self.lanforge_ip, self.lanforge_port, debug_=False) self.staConnect.sta_mode = 0 self.staConnect.upstream_resource = 1 - self.staConnect.upstream_port = port + self.staConnect.upstream_port = upstream_port self.staConnect.radio = radio self.staConnect.resource = 1 - self.staConnect.dut_ssid = ssid_name - self.staConnect.dut_passwd = ssid_psk + self.staConnect.dut_ssid = ssid + self.staConnect.dut_passwd = passkey self.staConnect.dut_security = security - self.staConnect.station_names = station + self.staConnect.station_names = station_name self.staConnect.sta_prefix = self.lanforge_prefix self.staConnect.runtime_secs = 10 self.staConnect.bringup_time_sec = 60 @@ -43,14 +43,14 @@ class RunTest: # result = 'pass' print("Single Client Connectivity :", self.staConnect.passes) if self.staConnect.passes() == True: - print("Single client connection to", ssid_name, "successful. Test Passed") + print("Single client connection to", self.staConnect.dut_ssid, "successful. Test Passed") client.update_testrail(case_id=test_case, run_id=rid, status_id=1, msg='Client connectivity passed') - logger.info("Client connectivity to " + ssid_name + " Passed") + logger.info("Client connectivity to " + self.staConnect.dut_ssid + " Passed") return ("passed") else: client.update_testrail(case_id=test_case, run_id=rid, status_id=5, msg='Client connectivity failed') - print("Single client connection to", ssid_name, "unsuccessful. Test Failed") - logger.warning("Client connectivity to " + ssid_name + " FAILED") + print("Single client connection to", self.staConnect.dut_ssid, "unsuccessful. Test Failed") + logger.warning("Client connectivity to " + self.staConnect.dut_ssid + " FAILED") return ("failed") def Single_Client_EAP(self, port, sta_list, ssid_name, radio, security, eap_type, diff --git a/sync_repos.bash b/sync_repos.bash index 36100e448..c7672ccc2 100755 --- a/sync_repos.bash +++ b/sync_repos.bash @@ -6,7 +6,17 @@ if [ -d ../wlan-lanforge-scripts ] then - rm -fr lanforge/lanforge-scripts + rm -fr libs/lanforge/lanforge-scripts - cp -ar ../wlan-lanforge-scripts lanforge/lanforge-scripts + cp -ar ../wlan-lanforge-scripts libs/lanforge/lanforge-scripts fi +if [ -d tests/logs ] +then + rm -fr tests/logs + mkdir tests/logs +fi +if [ -d tests/reports ] +then + rm -fr tests/reports + mkdir tests/reports +fi \ No newline at end of file diff --git a/tests/Nightly_Sanity.py b/tests/Nightly_Sanity.py index 098a6074a..8cf26a335 100755 --- a/tests/Nightly_Sanity.py +++ b/tests/Nightly_Sanity.py @@ -1,441 +1,267 @@ #!/usr/bin/python3 -from JfrogHelper import * +import sys + +if "libs" not in sys.path: + sys.path.append("../libs") + from UnitTestBase import * -from cloudsdk import CreateAPProfiles -from lf_tests import * - -parser = argparse.ArgumentParser(description="Nightly Combined Tests", add_help=False) -parser.add_argument("--default_ap_profile", type=str, - help="Default AP profile to use as basis for creating new ones, typically: TipWlan-2-Radios or TipWlan-3-Radios", - required=True) -parser.add_argument("--skip_radius", dest="skip_radius", action='store_true', - help="Should we skip the RADIUS configs or not") -parser.set_defaults(skip_radius=False) -parser.add_argument("--skip_profiles", dest="skip_profiles", action='store_true', - help="Should we skip applying profiles?") -parser.set_defaults(skip_profiles=False) - -base = UnitTestBase("query-sdk", parser) - -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') -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 -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') - -##Jfrog credentials -jfrog_user = command_line_args.jfrog_user_id # was os.getenv('JFROG_USER') -jfrog_pwd = command_line_args.jfrog_user_password # was os.getenv('JFROG_PWD') - -##EAP Credentials -identity = command_line_args.eap_id # was os.getenv('EAP_IDENTITY') -ttls_password = command_line_args.ttls_password # was os.getenv('EAP_PWD') - -## AP Credentials -ap_username = command_line_args.ap_username # was os.getenv('AP_USER') - -##LANForge Information -lanforge_ip = command_line_args.lanforge_ip_address -lanforge_port = command_line_args.lanforge_port_number -lanforge_prefix = command_line_args.lanforge_prefix -lanforge_2g_radio = command_line_args.lanforge_2g_radio -lanforge_5g_radio = command_line_args.lanforge_5g_radio - -build = command_line_args.build_id - -logger = base.logger -hdlr = base.hdlr - -if command_line_args.testbed == None: - print("ERROR: Must specify --testbed argument for this test.") - sys.exit(1) - -client: TestRail_Client = TestRail_Client(command_line_args) -####Use variables other than defaults for running tests on custom FW etc +class NightlySanity: -###Get Cloud Bearer Token -cloud: CloudSDK = CloudSDK(command_line_args) -bearer = cloud.get_bearer(cloudSDK_url, cloud_type) + def __init__(self, args=None, base=None, lanforge_data=None, Test=None, reporting=None ): -model_id = command_line_args.model -equipment_id = command_line_args.equipment_id - -print("equipment-id: %s"%(equipment_id)) - -if equipment_id == "-1": - eq_id = ap_ssh_ovsh_nodec(command_line_args, 'id') - print("EQ Id: %s"%(eq_id)) - - # Now, query equipment to find something that matches. - eq = cloud.get_customer_equipment(cloudSDK_url, bearer, customer_id) - for item in eq: - for e in item['items']: - print(e['id'], " ", e['inventoryId']) - if e['inventoryId'].endswith("_%s"%(eq_id)): - print("Found equipment ID: %s inventoryId: %s", - e['id'], e['inventoryId']) - equipment_id = str(e['id']) - -print("Start of Sanity Testing...") -print("Testing Latest Build with Tag: "+build) -if command_line_args.skip_upgrade == True: - print("Will skip upgrading AP firmware...") - -######Testrail Project and Run ID Information ############################## - -Test = RunTest(lanforge_ip = lanforge_ip, lanforge_port = lanforge_port, lanforge_prefix=lanforge_prefix); - - -projId = client.get_project_id(project_name=projectId) -print("TIP WLAN Project ID is:", projId) - -logger.info('Start of Nightly Sanity') - -###Dictionaries -ap_latest_dict = { - "ec420": "Unknown", - "ea8300": "Unknown", - "ecw5211": "unknown", - "ecw5410": "unknown" -} - -# import json file used by throughput test -sanity_status = json.load(open("sanity_status.json")) - - -############################################################################ -#################### Create Report ######################################### -############################################################################ - -# Create Report Folder for Today -today = str(date.today()) -try: - os.mkdir(report_path + today) -except OSError: - print("Creation of the directory %s failed" % report_path) -else: - print("Successfully created the directory %s " % report_path) - -logger.info('Report data can be found here: ' + report_path + today) - -# Copy report template to folder. If template doesn't exist, continue anyway with log -try: - copyfile(report_template, report_path + today + '/report.php') - -except: - print("No report template created. Report data will still be saved. Continuing with tests...") - -##Create report_data dictionary -tc_results = dict.fromkeys(test_cases.values(), "not run") - -report_data = dict() -report_data["cloud_sdk"] = dict.fromkeys(ap_models, "") -for key in report_data["cloud_sdk"]: - report_data["cloud_sdk"][key] = { - "date": "N/A", - "commitId": "N/A", - "projectVersion": "N/A" - } -report_data["fw_available"] = dict.fromkeys(ap_models, "Unknown") -report_data["fw_under_test"] = dict.fromkeys(ap_models, "N/A") -report_data['pass_percent'] = dict.fromkeys(ap_models, "") - -report_data['tests'] = dict.fromkeys(ap_models, "") -for key in ap_models: - report_data['tests'][key] = dict.fromkeys(test_cases.values(), "not run") - -print(report_data) - -# write to report_data contents to json file so it has something in case of unexpected fail -with open(report_path + today + '/report_data.json', 'w') as report_json_file: - json.dump(report_data, report_json_file) - - -############################################################################ -#################### Jfrog Firmware Check ################################## -############################################################################ - -for model in ap_models: - apModel = model - cloudModel = cloud_sdk_models[apModel] - # print(cloudModel) - ###Check Latest FW on jFrog - jfrog_url = 'https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/' - url = jfrog_url + apModel + "/dev/" - Build: GetBuild = GetBuild(jfrog_user, jfrog_pwd) - latest_image = Build.get_latest_image(url, build) - print(model, "Latest FW on jFrog:", latest_image) - ap_latest_dict[model] = latest_image - -#################################################################################### -############ Update FW and Run Test Cases on Each AP Variant ####################### -#################################################################################### -#################################################################################### - -# Dummy up a single list item. -equipment_ids = { - model: equipment_id -} -print(equipment_ids) - - -for key in equipment_ids: - ##Get Bearer Token to make sure its valid (long tests can require re-auth) - bearer = cloud.get_bearer(cloudSDK_url, cloud_type) - - - print("AP MODEL UNDER TEST IS", key) - try: - ap_cli_info = ssh_cli_active_fw(command_line_args) - ap_cli_fw = ap_cli_info['active_fw'] - except Exception as ex: - print(ex) - logging.error(logging.traceback.format_exc()) - ap_cli_info = "ERROR" - print("Cannot Reach AP CLI, will not test this variant"); - continue - - fw_model = ap_cli_fw.partition("-")[0] - print('Current Active AP FW from CLI:', ap_cli_fw) - ###Find Latest FW for Current AP Model and Get FW ID - - ##Compare Latest and Current AP FW and Upgrade - latest_ap_image = ap_latest_dict[fw_model] - - - do_upgrade = cloud.should_upgrade_ap_fw(bearer, command_line_args, report_data, latest_ap_image, fw_model, ap_cli_fw) - - - ###Create Test Run - today = str(date.today()) - case_ids = list(test_cases.values()) - test_run_name = testRunPrefix + fw_model + "_" + today + "_" + latest_ap_image - client.create_testrun(name=test_run_name, case_ids=case_ids, project_id=projId, milestone_id=milestoneId, - description="Automated Nightly Sanity test run for new firmware build") - rid = client.get_run_id(test_run_name= testRunPrefix + fw_model + "_" + today + "_" + latest_ap_image) - print("TIP run ID is:", rid) - - ###GetCloudSDK Version - print("Getting CloudSDK version information...") - try: - cluster_ver = cloud.get_cloudsdk_version(cloudSDK_url, bearer) - print("CloudSDK Version Information:") - print("-------------------------------------------") - print(cluster_ver) - print("-------------------------------------------") - - cloudsdk_cluster_info = {} - cloudsdk_cluster_info['date'] = cluster_ver['commitDate'] - cloudsdk_cluster_info['commitId'] = cluster_ver['commitID'] - cloudsdk_cluster_info['projectVersion'] = cluster_ver['projectVersion'] - report_data['cloud_sdk'][key] = cloudsdk_cluster_info - client.update_testrail(case_id=test_cases["cloud_ver"], run_id=rid, status_id=1, - msg='Read CloudSDK version from API successfully') - report_data['tests'][key][test_cases["cloud_ver"]] = "passed" - - except: - cluster_ver = 'error' - print("ERROR: CloudSDK Version Unavailable") - logger.info('CloudSDK version Unavailable') - cloudsdk_cluster_info = { - "date": "unknown", - "commitId": "unknown", - "projectVersion": "unknown" + self.args = args + self.model = self.args.model + self.client: TestRail_Client = TestRail_Client(args) + self.logger = base.logger + ###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.reporting = reporting + self.lanforge_data = lanforge_data + if lanforge_data is None: + exit() + self.cloud_sdk_models = { + "ec420": "EC420-G1", + "ea8300": "EA8300-CA", + "ecw5211": "ECW5211", + "ecw5410": "ECW5410", + "wf188n": "WF188N" } - client.update_testrail(case_id=test_cases["cloud_ver"], run_id=rid, status_id=5, - msg='Could not read CloudSDK version from API') - report_data['cloud_sdk'][key] = cloudsdk_cluster_info - report_data['tests'][key][test_cases["cloud_ver"]] = "failed" - with open(report_path + today + '/report_data.json', 'w') as report_json_file: - json.dump(report_data, report_json_file) + self.equipment_id = self.args.equipment_id - if do_upgrade: - latest_image = ap_latest_dict[key] - cloudModel = cloud_sdk_models[key] - pf = cloud.do_upgrade_ap_fw(bearer, command_line_args, report_data, test_cases, client, - latest_image, cloudModel, key, jfrog_user, jfrog_pwd, rid, - customer_id, equipment_id, logger) - print(report_data) - if not pf: - continue # Try next model + self.report_data = dict() - # TODO: Fix indentation, break all this up into small test cases anyway. - if True: - ###Check AP Manager Status - manager_status = ap_cli_info['state'] + if self.equipment_id == "-1": + eq_id = ap_ssh_ovsh_nodec(args, 'id') + print("EQ Id: %s" % (eq_id)) + + # Now, query equipment to find something that matches. + eq = self.cloud.get_customer_equipment(args.sdk_base_url, self.bearer, self.customer_id) + for item in eq: + for e in item['items']: + print(e['id'], " ", e['inventoryId']) + if e['inventoryId'].endswith("_%s" % (eq_id)): + print("Found equipment ID: %s inventoryId: %s", + e['id'], e['inventoryId']) + self.equipment_id = str(e['id']) + if self.equipment_id == -1: + print("ERROR: Could not find equipment-id.") + exit() + + + def setup(self): + pass + + 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) + + def start_test(self, do_upgrade=False): + + # Upgrade the Firmware on AP + if do_upgrade: + + cloudModel = 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.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() + if True: + ###Check AP Manager Status + manager_status = self.ap_cli_info['state'] + print(manager_status) - if manager_status != "active": - print("Manager status is " + manager_status + "! Not connected to the cloud.") - print("Waiting 30 seconds and re-checking status") - time.sleep(30) - ap_cli_info = ssh_cli_active_fw(command_line_args) - manager_status = ap_cli_info['state'] 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 - client.update_testrail(case_id=test_cases["cloud_connection"], run_id=rid, status_id=5, msg='CloudSDK connectivity failed') - report_data['tests'][key][test_cases["cloud_connection"]] = "failed" - print(report_data['tests'][key]) - continue + print("Manager status is " + manager_status + "! Not connected to the cloud.") + print("Waiting 30 seconds and re-checking status") + time.sleep(30) + ap_cli_info = ssh_cli_active_fw(self.args) + manager_status = ap_cli_info['state'] + 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 + self.client.update_testrail(case_id=self.test_cases["cloud_connection"], run_id=self.rid, + status_id=5, + msg='CloudSDK connectivity failed') + self.report_data['tests'][self.model][test_cases["cloud_connection"]] = "failed" + print(self.report_data['tests'][self.model]) + + else: + print("Manager status is Active. Proceeding to connectivity testing!") + # TC522 pass in Testrail + self.client.update_testrail(case_id=test_cases["cloud_connection"], run_id=self.rid, status_id=1, + msg='Manager status is Active') + self.report_data['tests'][self.model][test_cases["cloud_connection"]] = "passed" + print(self.report_data['tests'][self.model]) else: print("Manager status is Active. Proceeding to connectivity testing!") - # TC522 pass in Testrail - client.update_testrail(case_id=test_cases["cloud_connection"], run_id=rid, status_id=1, msg='Manager status is Active') - report_data['tests'][key][test_cases["cloud_connection"]] = "passed" - print(report_data['tests'][key]) - else: - print("Manager status is Active. Proceeding to connectivity testing!") - # TC5222 pass in testrail - client.update_testrail(case_id=test_cases["cloud_connection"], run_id=rid, status_id=1, msg='Manager status is Active') - report_data['tests'][key][test_cases["cloud_connection"]] = "passed" - print(report_data['tests'][key]) - # Pass cloud connectivity test case + # TC5222 pass in testrail + self.client.update_testrail(case_id=test_cases["cloud_connection"], run_id=self.rid, status_id=1, + msg='Manager status is Active') + self.report_data['tests'][self.model][test_cases["cloud_connection"]] = "passed" + print(self.report_data['tests'][self.model]) + # Pass cloud connectivity test case - ###Update report json - with open(report_path + today + '/report_data.json', 'w') as report_json_file: - json.dump(report_data, report_json_file) + # Update in reporting + self.reporting.update_json_report(self.report_data) - radius_name = "%s-%s-%s"%(command_line_args.testbed, fw_model, "Radius") + self.ap_object = CreateAPProfiles(self.args, cloud=self.cloud, client=self.client, fw_model=self.model) - prof_5g_eap_name = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_EAP") - prof_5g_wpa2_name = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA2") - prof_5g_wpa_name = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA") - prof_2g_eap_name = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_EAP") - prof_2g_wpa2_name = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA2") - prof_2g_wpa_name = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA") + # 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") - prof_5g_eap_name_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_EAP_NAT") - prof_5g_wpa2_name_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA2_NAT") - prof_5g_wpa_name_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA_NAT") - prof_2g_eap_name_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_EAP_NAT") - prof_2g_wpa2_name_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA2_NAT") - prof_2g_wpa_name_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA_NAT") + print("creating Profiles") + ssid_template = "TipWlan-Cloud-Wifi" - prof_5g_eap_name_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_EAP_VLAN") - prof_5g_wpa2_name_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA2_VLAN") - prof_5g_wpa_name_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA_VLAN") - prof_2g_eap_name_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_EAP_VLAN") - prof_2g_wpa2_name_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA2_VLAN") - prof_2g_wpa_name_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA_VLAN") + if not self.args.skip_profiles: + if not self.args.skip_radius: + # 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) + + 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() + + 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 + + + # 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") + + print("creating Profiles") + ssid_template = "TipWlan-Cloud-Wifi" + + if not self.args.skip_profiles: + if not self.args.skip_radius: + # 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) + + 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() - prof_names = [prof_5g_wpa2_name, prof_5g_wpa_name, prof_2g_wpa2_name, prof_2g_wpa_name, - prof_5g_wpa2_name_nat, prof_5g_wpa_name_nat, prof_2g_wpa2_name_nat, prof_2g_wpa_name_nat, - prof_5g_wpa2_name_vlan, prof_5g_wpa_name_vlan, prof_2g_wpa2_name_vlan, prof_2g_wpa_name_vlan] - prof_names_eap = [prof_5g_eap_name, prof_2g_eap_name, - prof_5g_eap_name_nat, prof_2g_eap_name_nat, - prof_5g_eap_name_vlan, prof_2g_eap_name_vlan] + def setup_report(self): - # TOOD: Allow configuring this on cmd line - ssid_5g_eap = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_EAP") - ssid_5g_wpa2 = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA2") - ssid_5g_wpa = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA") - ssid_2g_eap = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_EAP") - ssid_2g_wpa2 = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA2") - ssid_2g_wpa = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA") + self.report_data["cloud_sdk"] = dict.fromkeys(ap_models, "") + for key in self.report_data["cloud_sdk"]: + self.report_data["cloud_sdk"][key] = { + "date": "N/A", + "commitId": "N/A", + "projectVersion": "N/A" + } + self.report_data["fw_available"] = dict.fromkeys(ap_models, "Unknown") + self.report_data["fw_under_test"] = dict.fromkeys(ap_models, "N/A") + self.report_data['pass_percent'] = dict.fromkeys(ap_models, "") - ssid_5g_eap_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_EAP_NAT") - ssid_5g_wpa2_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA2_NAT") - ssid_5g_wpa_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA_NAT") - ssid_2g_eap_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_EAP_NAT") - ssid_2g_wpa2_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA2_NAT") - ssid_2g_wpa_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA_NAT") + self.report_data['tests'] = dict.fromkeys(ap_models, "") + for key in ap_models: + self.report_data['tests'][key] = dict.fromkeys(test_cases.values(), "not run") - ssid_5g_eap_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_EAP_VLAN") - ssid_5g_wpa2_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA2_VLAN") - ssid_5g_wpa_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA_VLAN") - ssid_2g_eap_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_EAP_VLAN") - ssid_2g_wpa2_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA2_VLAN") - ssid_2g_wpa_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA_VLAN") + print(self.report_data) - # TODO: Allow configuring on cmd line - psk_5g_wpa2 = "%s-%s"%(fw_model, "5G_WPA2") - psk_5g_wpa = "%s-%s"%(fw_model, "5G_WPA") - psk_2g_wpa2 = "%s-%s"%(fw_model, "2G_WPA2") - psk_2g_wpa = "%s-%s"%(fw_model, "2G_WPA") + self.reporting.update_json_report(report_data=self.report_data) - psk_5g_wpa2_nat = "%s-%s"%(fw_model, "5G_WPA2_NAT") - psk_5g_wpa_nat = "%s-%s"%(fw_model, "5G_WPA_NAT") - psk_2g_wpa2_nat = "%s-%s"%(fw_model, "2G_WPA2_NAT") - psk_2g_wpa_nat = "%s-%s"%(fw_model, "2G_WPA_NAT") + def check_fw(self, jfrog=None): - psk_5g_wpa2_vlan = "%s-%s"%(fw_model, "5G_WPA2_VLAN") - psk_5g_wpa_vlan = "%s-%s"%(fw_model, "5G_WPA_VLAN") - psk_2g_wpa2_vlan = "%s-%s"%(fw_model, "2G_WPA2_VLAN") - psk_2g_wpa_vlan = "%s-%s"%(fw_model, "2G_WPA_VLAN") - - print("creating Profiles") - ssid_template = "TipWlan-Cloud-Wifi" - - # Data Structure to Give to CreateAPProfiles.create_ap_profiles() - ssid_profile_data = { - "ssid_template" : ssid_template, - - "2G" : - { - "eap": {"info" : [ssid_2g_eap ,prof_2g_eap_name, prof_2g_eap_name_nat, prof_2g_eap_name_vlan], "psk" :[]}, - "wpa": {"info" : [ssid_2g_wpa, prof_2g_wpa_name, prof_2g_wpa_name_nat, prof_2g_wpa_name_vlan], "psk" : [psk_2g_wpa, psk_2g_wpa_nat, psk_2g_wpa_vlan]}, - "wpa2": {"info" : [ssid_2g_wpa2, prof_2g_wpa2_name, prof_2g_wpa2_name_nat, prof_2g_wpa2_name_vlan], "psk" : [psk_2g_wpa2, psk_2g_wpa2_nat, psk_2g_wpa2_vlan]}, - }, - - "5G" : - { - "eap": {"info" : [ssid_5g_eap, prof_5g_eap_name, prof_5g_eap_name_nat, prof_5g_eap_name_vlan], "psk" : []}, - "wpa": {"info" : [ssid_5g_wpa, prof_5g_wpa_name, prof_5g_wpa_name_nat, prof_5g_wpa_name_vlan], "psk" : [psk_5g_wpa, psk_5g_wpa_nat, psk_5g_wpa_vlan]}, - "wpa2":{"info" : [ssid_5g_wpa2, prof_5g_wpa2_name, prof_5g_wpa2_name_nat, prof_5g_wpa_name_vlan], "psk" : [psk_2g_wpa2, psk_5g_wpa2_nat, psk_5g_wpa2_vlan]} - } + # 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 + # } - if not command_line_args.skip_profiles: + # dev complete + def test_bridge_mode_2g(self): - obj = CreateAPProfiles(command_line_args, cloud=cloud, client= client) - obj.create_radius_profile(radius_name, rid, key) - obj.create_ssid_profile(ssid_profile_data= ssid_profile_data) - obj.create_ap_bridge_profile(fw_model=fw_model) - obj.validate_changes() - - - - print("Profiles Created") - - - ### Set LANForge port for tests - port = "eth2" - - # print iwinfo for information - iwinfo = iwinfo_status(command_line_args) - print(iwinfo) - - if not command_line_args.skip_radius: + if not self.args.skip_radius: ###Run Client Single Connectivity Test Cases for Bridge SSIDs # TC5214 - 2.4 GHz WPA2-Enterprise test_case = test_cases["2g_eap_bridge"] radio = lanforge_2g_radio - sta_list = [lanforge_prefix+"5214"] + sta_list = [lanforge_prefix + "5214"] ssid_name = ssid_2g_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) + 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" Test.testrail_retest(test_case, rid, ssid_name, client, logger) @@ -448,45 +274,61 @@ for key in equipment_ids: ###Run Client Single Connectivity Test Cases for Bridge SSIDs # TC - 2.4 GHz WPA2 test_case = test_cases["2g_wpa2_bridge"] - radio = lanforge_2g_radio - station = [lanforge_prefix+"2237"] - ssid_name = ssid_2g_wpa2 - ssid_psk = psk_2g_wpa2 + 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 = Test.Single_Client_Connectivity(port, radio, ssid_name, ssid_psk, security, - station, test_case, rid, client, logger) + 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" - Test.testrail_retest(test_case, rid, ssid_name, client, logger) + self.Test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger) pass - report_data['tests'][key][int(test_case)] = test_result - print(report_data['tests'][key]) + 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"] - radio = lanforge_2g_radio - station = [lanforge_prefix+"2420"] - ssid_name = ssid_2g_wpa - ssid_psk = psk_2g_wpa + 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 = Test.Single_Client_Connectivity(port, radio, ssid_name, ssid_psk, security, - station, test_case, rid, client, logger) + 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" - Test.testrail_retest(test_case, rid, ssid_name, client, logger) + self.Test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger) pass - report_data['tests'][key][int(test_case)] = test_result - print(report_data['tests'][key]) + self.report_data['tests'][self.model][int(test_case)] = test_result + print(self.report_data['tests'][self.model]) time.sleep(10) - if not command_line_args.skip_radius: + # dev complete + def test_bridge_mode_5g(self): + + if not self.args.skip_radius: # TC - 5 GHz WPA2-Enterprise - test_case = test_cases["5g_eap_bridge"] + test_case = self.test_cases["5g_eap_bridge"] radio = lanforge_5g_radio sta_list = [lanforge_prefix+"5215"] ssid_name = ssid_5g_eap @@ -506,741 +348,178 @@ for key in equipment_ids: # TC 5 GHz WPA2 test_case = test_cases["5g_wpa2_bridge"] - radio = lanforge_5g_radio - station = [lanforge_prefix+"2236"] - ssid_name = ssid_5g_wpa2 - ssid_psk = psk_5g_wpa2 + 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'] security = "wpa2" + upstream_port = "eth2" try: - test_result = Test.Single_Client_Connectivity(port, radio, ssid_name, ssid_psk, security, - station, test_case, rid, client, logger) + test_result = self.Test.Single_Client_Connectivity(upstream_port=upstream_port, + radio=self.lanforge_data['5g_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" - Test.testrail_retest(test_case, rid, ssid_name, client, logger) + self.Test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger) pass - report_data['tests'][key][int(test_case)] = test_result - print(report_data['tests'][key]) + self.report_data['tests'][self.model][int(test_case)] = test_result + print(self.report_data['tests'][self.model]) time.sleep(10) - # TC - 5 GHz WPA + # # TC - 5 GHz WPA test_case = test_cases["5g_wpa_bridge"] - radio = lanforge_5g_radio - station = [lanforge_prefix+"2419"] - ssid_name = ssid_5g_wpa - ssid_psk = psk_5g_wpa + 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'] security = "wpa" + upstream_port = "eth2" try: - test_result = Test.Single_Client_Connectivity(port, radio, ssid_name, ssid_psk, security, - station, test_case, rid, client, logger) + test_result = self.Test.Single_Client_Connectivity(upstream_port=upstream_port, + radio=self.lanforge_data['5g_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" - Test.testrail_retest(test_case, rid, ssid_name, client, logger) + self.Test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger) pass - report_data['tests'][key][int(test_case)] = test_result - print(report_data['tests'][key]) + self.report_data['tests'][self.model][int(test_case)] = test_result + print(self.report_data['tests'][self.model]) time.sleep(10) - logger.info("Testing for " + fw_model + "Bridge Mode SSIDs Complete") - with open(report_path + today + '/report_data.json', 'w') as report_json_file: - json.dump(report_data, report_json_file) + 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) + parser.add_argument("--default_ap_profile", type=str, + help="Default AP profile to use as basis for creating new ones, typically: TipWlan-2-Radios or TipWlan-3-Radios", + required=True) + parser.add_argument("--skip_radius", dest="skip_radius", action='store_true', + help="Should we skip the RADIUS configs or not") + parser.add_argument("--skip_profiles", dest="skip_profiles", action='store_true', + help="Should we skip applying profiles?") + parser.add_argument("--skip_wpa", dest="skip_wpa", action='store_false', + help="Should we skip applying profiles?") + parser.add_argument("--skip_wpa2", dest="skip_wpa2", action='store_false', + help="Should we skip applying profiles?") + parser.add_argument("--skip_eap", dest="skip_eap", action='store_false', + help="Should we skip applying profiles?") + + reporting = Reporting(reports_root=os.getcwd() + "/reports/") + base = UnitTestBase("query-sdk", parser, reporting) + 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') + 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 + 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') + + ##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_cred = { + "identity": command_line_args.eap_id, + "ttls_password": command_line_args.ttls_password + } + + ## AP Credentials + ap_cred = { + "username": command_line_args.ap_username + } + + ##LANForge Information + 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 + } + + build = command_line_args.build_id + + logger = base.logger + hdlr = base.hdlr + + if command_line_args.testbed == 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: + print("Will skip upgrading AP firmware...") + + ######Testrail Project and Run ID Information ############################## + + Test = RunTest(lanforge_ip=lanforge["ip"], lanforge_port=lanforge["port"], lanforge_prefix=lanforge["prefix"]) + + # sanity_status = json.load(open("sanity_status.json")) + obj = NightlySanity(args=command_line_args, base=base, lanforge_data=lanforge, Test=Test, reporting=reporting) + + projId = obj.client.get_project_id(project_name=projectId) + print("TIP WLAN Project ID is:", projId) + 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...") - ########################################################################### - ################# NAT Mode Client Connectivity ############################ - ########################################################################### - - if not command_line_args.skip_profiles: - ### Create SSID Profiles - - # 5G SSIDs - try: - fiveG_eap = cloud.create_or_update_ssid_profile(cloudSDK_url, bearer, customer_id, ssid_template, - prof_5g_eap_name_nat, - ssid_5g_eap_nat, None, - radius_name, - "wpa2OnlyRadius", "NAT", 1, - ["is5GHzU", "is5GHz", "is5GHzL"]) - print("5G EAP SSID created successfully - NAT mode") - client.update_testrail(case_id=test_cases["ssid_5g_eap_nat"], run_id=rid, status_id=1, - msg='5G EAP SSID created successfully - NAT mode') - report_data['tests'][key][test_cases["ssid_5g_eap_nat"]] = "passed" - - except: - fiveG_eap = "error" - print("5G EAP SSID create failed - NAT mode") - client.update_testrail(case_id=test_cases["ssid_5g_eap_nat"], run_id=rid, status_id=5, - msg='5G EAP SSID create failed - NAT mode') - report_data['tests'][key][test_cases["ssid_5g_eap_nat"]] = "failed" - - try: - fiveG_wpa2 = cloud.create_or_update_ssid_profile(cloudSDK_url, bearer, customer_id, ssid_template, - prof_5g_wpa2_name_nat, - ssid_5g_wpa2_nat, psk_5g_wpa2_nat, - "Radius-Accounting-Profile", "wpa2OnlyPSK", "NAT", 1, - ["is5GHzU", "is5GHz", "is5GHzL"]) - print("5G WPA2 SSID created successfully - NAT mode") - client.update_testrail(case_id=test_cases["ssid_5g_wpa2_nat"], run_id=rid, status_id=1, - msg='5G WPA2 SSID created successfully - NAT mode') - report_data['tests'][key][test_cases["ssid_5g_wpa2_nat"]] = "passed" - except: - fiveG_wpa2 = "error" - print("5G WPA2 SSID create failed - NAT mode") - client.update_testrail(case_id=test_cases["ssid_5g_wpa2_nat"], run_id=rid, status_id=5, - msg='5G WPA2 SSID create failed - NAT mode') - report_data['tests'][key][test_cases["ssid_5g_wpa2_nat"]] = "failed" - - try: - fiveG_wpa = cloud.create_or_update_ssid_profile(cloudSDK_url, bearer, customer_id, ssid_template, - prof_5g_wpa_name_nat, - ssid_5g_wpa_nat, psk_5g_wpa_nat, - "Radius-Accounting-Profile", "wpaPSK", "NAT", 1, - ["is5GHzU", "is5GHz", "is5GHzL"]) - print("5G WPA SSID created successfully - NAT mode") - client.update_testrail(case_id=test_cases["ssid_5g_wpa_nat"], run_id=rid, status_id=1, - msg='5G WPA SSID created successfully - NAT mode') - report_data['tests'][key][test_cases["ssid_5g_wpa_nat"]] = "passed" - except: - fiveG_wpa = "error" - print("5G WPA SSID create failed - NAT mode") - client.update_testrail(case_id=test_cases["ssid_5g_wpa_nat"], run_id=rid, status_id=5, - msg='5G WPA SSID create failed - NAT mode') - report_data['tests'][key][test_cases["ssid_5g_wpa_nat"]] = "failed" - - # 2.4G SSIDs - try: - twoFourG_eap = cloud.create_or_update_ssid_profile(cloudSDK_url, bearer, customer_id, ssid_template, - prof_2g_eap_name_nat, - ssid_2g_eap_nat, None, - None, - radius_name, "wpa2OnlyRadius", "NAT", 1, ["is2dot4GHz"]) - print("2.4G EAP SSID created successfully - NAT mode") - client.update_testrail(case_id=test_cases["ssid_2g_eap_nat"], run_id=rid, status_id=1, - msg='2.4G EAP SSID created successfully - NAT mode') - report_data['tests'][key][test_cases["ssid_2g_eap_nat"]] = "passed" - except: - twoFourG_eap = "error" - print("2.4G EAP SSID create failed - NAT mode") - client.update_testrail(case_id=test_cases["ssid_2g_eap_nat"], run_id=rid, status_id=5, - msg='2.4G EAP SSID create failed - NAT mode') - report_data['tests'][key][test_cases["ssid_2g_eap_nat"]] = "failed" - - try: - twoFourG_wpa2 = cloud.create_or_update_ssid_profile(cloudSDK_url, bearer, customer_id, ssid_template, - prof_2g_wpa2_name_nat, - ssid_2g_wpa2_nat, psk_2g_wpa2_nat, - "Radius-Accounting-Profile", "wpa2OnlyPSK", "NAT", 1, - ["is2dot4GHz"]) - print("2.4G WPA2 SSID created successfully - NAT mode") - client.update_testrail(case_id=test_cases["ssid_2g_wpa2_nat"], run_id=rid, status_id=1, - msg='2.4G WPA2 SSID created successfully - NAT mode') - report_data['tests'][key][test_cases["ssid_2g_wpa2_nat"]] = "passed" - except: - twoFourG_wpa2 = "error" - print("2.4G WPA2 SSID create failed - NAT mode") - client.update_testrail(case_id=test_cases["ssid_2g_wpa2_nat"], run_id=rid, status_id=5, - msg='2.4G WPA2 SSID create failed - NAT mode') - report_data['tests'][key][test_cases["ssid_2g_wpa2_nat"]] = "failed" - - try: - twoFourG_wpa = cloud.create_or_update_ssid_profile(cloudSDK_url, bearer, customer_id, ssid_template, - prof_2g_wpa_name_nat, - ssid_2g_wpa_nat, psk_2g_wpa_nat, - "Radius-Accounting-Profile", "wpaPSK", "NAT", 1, - ["is2dot4GHz"]) - print("2.4G WPA SSID created successfully - NAT mode") - client.update_testrail(case_id=test_cases["ssid_2g_wpa_nat"], run_id=rid, status_id=1, - msg='2.4G WPA SSID created successfully - NAT mode') - report_data['tests'][key][test_cases["ssid_2g_wpa_nat"]] = "passed" - except: - twoFourG_wpa = "error" - print("2.4G WPA SSID create failed - NAT mode") - client.update_testrail(case_id=test_cases["ssid_2g_wpa_nat"], run_id=rid, status_id=5, - msg='2.4G WPA SSID create failed - NAT mode') - report_data['tests'][key][test_cases["ssid_2g_wpa_nat"]] = "failed" - - ### Create AP NAT Profile - rfProfileId = lab_ap_info.rf_profile - child_profiles = [fiveG_wpa2, fiveG_wpa, twoFourG_wpa2, twoFourG_wpa, rfProfileId] - ssid_prof_config = [prof_5g_wpa2_name_nat, prof_5g_wpa_name_nat, prof_2g_wpa2_name_nat, prof_2g_wpa_name_nat] - ssid_config = [ssid_5g_wpa2_nat, ssid_5g_wpa_nat, ssid_2g_wpa2_nat, ssid_2g_wpa_nat] - if radius_profile != None: - child_profiles.append(radius_profile) - child_profiles.append(fiveG_eap) - child_profiles.append(twoFourG_eap) - ssid_prof_config.append(prof_5g_wpa2_name_nat) - ssid_prof_config.append(prof_2g_wpa2_name_nat) - ssid_config.append(ssid_5g_wpa2_nat) - ssid_config.append(ssid_2g_wpa2_nat) - - print(child_profiles) - name = command_line_args.testbed + "-" + fw_model + "_nat" - try: - create_ap_profile = cloud.create_or_update_ap_profile(cloudSDK_url, bearer, customer_id, - command_line_args.default_ap_profile, name, child_profiles) - test_profile_id = create_ap_profile - print("Test Profile ID for Test is:", test_profile_id) - client.update_testrail(case_id=test_cases["ap_nat"], run_id=rid, status_id=1, - msg='AP profile for NAT tests created successfully') - report_data['tests'][key][test_cases["ap_nat"]] = "passed" - except: - create_ap_profile = "error" - test_profile_id = profile_info_dict[fw_model + '_nat']["profile_id"] - print("Error creating AP profile for NAT tests. Will use existing AP profile") - client.update_testrail(case_id=test_cases["ap_nat"], run_id=rid, status_id=5, - msg='AP profile for NAT tests could not be created using API') - report_data['tests'][key][test_cases["ap_nat"]] = "failed" - - ###Set Proper AP Profile for NAT SSID Tests - ap_profile = cloud.set_ap_profile(equipment_id, test_profile_id, cloudSDK_url, bearer) - - ### Wait for Profile Push - time.sleep(180) - - ###Check if VIF Config and VIF State reflect AP Profile from CloudSDK - ## VIF Config - try: - print("SSIDs in AP Profile:", ssid_config) - print("SSID Profiles in AP Profile:", ssid_prof_config) - - ssid_list = ap_ssh.get_vif_config(command_line_args) - 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=test_cases["nat_vifc"], run_id=rid, status_id=1, - msg='SSIDs in VIF Config matches AP Profile Config') - report_data['tests'][key][test_cases["nat_vifc"]] = "passed" - else: - print("SSIDs in Wifi_VIF_Config do not match desired AP Profile Config") - client.update_testrail(case_id=test_cases["nat_vifc"], run_id=rid, status_id=5, - msg='SSIDs in VIF Config do not match AP Profile Config') - report_data['tests'][key][test_cases["nat_vifc"]] = "failed" - except: - ssid_list = "ERROR" - print("Error accessing VIF Config from AP CLI") - client.update_testrail(case_id=test_cases["nat_vifc"], run_id=rid, status_id=4, - msg='Cannot determine VIF Config - re-test required') - report_data['tests'][key][test_cases["nat_vifc"]] = "error" - # VIF State - try: - ssid_state = ap_ssh.get_vif_state(command_line_args) - 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=test_cases["nat_vifs"], run_id=rid, status_id=1, - msg='SSIDs in VIF Config applied to VIF State') - report_data['tests'][key][test_cases["nat_vifs"]] = "passed" - else: - print("SSIDs not applied on AP") - client.update_testrail(case_id=test_cases["nat_vifs"], run_id=rid, status_id=5, - msg='SSIDs in VIF Config not applied to VIF State') - report_data['tests'][key][test_cases["nat_vifs"]] = "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=test_cases["nat_vifs"], run_id=rid, status_id=4, - msg='Cannot determine VIF State - re-test required') - report_data['tests'][key][test_cases["nat_vifs"]] = "error" - - # Print iwinfo for logs - iwinfo = iwinfo_status(command_line_args) - print(iwinfo) - - if not command_line_args.skip_radius: - ###Run Client Single Connectivity Test Cases for NAT SSIDs - # TC - 2.4 GHz WPA2-Enterprise NAT - test_case = test_cases["2g_eap_nat"] - radio = lanforge_2g_radio - sta_list = [lanforge_prefix+"5216"] - ssid_name = ssid_2g_eap_nat - 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 - 2.4 GHz WPA2 NAT - test_case = test_cases["2g_wpa2_nat"] - radio = lanforge_2g_radio - station = [lanforge_prefix+"4325"] - ssid_name = ssid_2g_wpa2_nat - ssid_psk = psk_2g_wpa2_nat - security = "wpa2" - try: - test_result = Test.Single_Client_Connectivity(port, radio, ssid_name, ssid_psk, security, - station, 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 - 2.4 GHz WPA NAT - test_case = test_cases["2g_wpa_nat"] - radio = lanforge_2g_radio - station = [lanforge_prefix+"4323"] - ssid_name = ssid_2g_wpa_nat - ssid_psk = psk_2g_wpa_nat - security = "wpa" - try: - test_result = Test.Single_Client_Connectivity(port, radio, ssid_name, ssid_psk, security, station, - test_case, rid) - 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) - - if not command_line_args.skip_radius: - # TC - 5 GHz WPA2-Enterprise NAT - test_case = test_cases["5g_eap_nat"] - radio = lanforge_5g_radio - sta_list = [lanforge_prefix+"5217"] - ssid_name = ssid_5g_eap_nat - 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 NAT - test_case = test_cases["5g_wpa2_nat"] - radio = lanforge_5g_radio - station = [lanforge_prefix+"4326"] - ssid_name = ssid_5g_wpa2_nat - ssid_psk = psk_5g_wpa2_nat - security = "wpa2" - try: - test_result = Test.Single_Client_Connectivity(port, radio, ssid_name, ssid_psk, security, - station, 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 WPA NAT - test_case = test_cases["5g_wpa_nat"] - radio = lanforge_5g_radio - station = [lanforge_prefix+"4324"] - ssid_name = ssid_5g_wpa_nat - ssid_psk = psk_5g_wpa_nat - security = "wpa" - try: - test_result = Test.Single_Client_Connectivity(port, radio, ssid_name, ssid_psk, security, - station, 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) - - logger.info("Testing for " + fw_model + "NAT Mode SSIDs Complete") - with open(report_path + today + '/report_data.json', 'w') as report_json_file: - json.dump(report_data, report_json_file) - - ########################################################################### - ################# Customer VLAN Client Connectivity ####################### - ########################################################################### - - ### Create SSID Profiles - ssid_template = "templates/ssid_profile_template.json" - - # 5G SSIDs - try: - fiveG_eap = cloud.create_or_update_ssid_profile(cloudSDK_url, bearer, customer_id, ssid_template, - prof_5g_eap_name_vlan, - ssid_5g_eap_vlan, None, - radius_name, - "wpa2OnlyRadius", "BRIDGE", 100, ["is5GHzU", "is5GHz", "is5GHzL"]) - print("5G EAP SSID created successfully - custom VLAN mode") - client.update_testrail(case_id=test_cases["ssid_5g_eap_vlan"], run_id=rid, status_id=1, - msg='5G EAP SSID created successfully - Custom VLAN mode') - report_data['tests'][key][test_cases["ssid_5g_eap_vlan"]] = "passed" - - except: - fiveG_eap = "error" - print("5G EAP SSID create failed - custom VLAN mode") - client.update_testrail(case_id=test_cases["ssid_5g_eap_vlan"], run_id=rid, status_id=5, - msg='5G EAP SSID create failed - custom VLAN mode') - report_data['tests'][key][test_cases["ssid_5g_eap_vlan"]] = "failed" - - try: - fiveG_wpa2 = cloud.create_or_update_ssid_profile(cloudSDK_url, bearer, customer_id, ssid_template, - prof_5g_wpa2_name_vlan, - ssid_5g_wpa2_vlan, psk_5g_wpa2_vlan, - "Radius-Accounting-Profile", "wpa2OnlyPSK", "BRIDGE", 100, - ["is5GHzU", "is5GHz", "is5GHzL"]) - print("5G WPA2 SSID created successfully - custom VLAN mode") - client.update_testrail(case_id=test_cases["ssid_5g_wpa2_vlan"], run_id=rid, status_id=1, - msg='5G WPA2 SSID created successfully - custom VLAN mode') - report_data['tests'][key][test_cases["ssid_5g_wpa2_vlan"]] = "passed" - except: - fiveG_wpa2 = "error" - print("5G WPA2 SSID create failed - custom VLAN mode") - client.update_testrail(case_id=test_cases["ssid_5g_wpa2_vlan"], run_id=rid, status_id=5, - msg='5G WPA2 SSID create failed - custom VLAN mode') - report_data['tests'][key][test_cases["ssid_5g_wpa2_vlan"]] = "failed" - - try: - fiveG_wpa = cloud.create_or_update_ssid_profile(cloudSDK_url, bearer, customer_id, ssid_template, - prof_5g_wpa_name_vlan, - ssid_5g_wpa_vlan, psk_5g_wpa_vlan, - "Radius-Accounting-Profile", "wpaPSK", "BRIDGE", 100, - ["is5GHzU", "is5GHz", "is5GHzL"]) - print("5G WPA SSID created successfully - custom VLAN mode") - client.update_testrail(case_id=test_cases["ssid_5g_wpa_vlan"], run_id=rid, status_id=1, - msg='5G WPA SSID created successfully - custom VLAN mode') - report_data['tests'][key][test_cases["ssid_5g_wpa_vlan"]] = "passed" - except: - fiveG_wpa = "error" - print("5G WPA SSID create failed - custom VLAN mode") - client.update_testrail(case_id=test_cases["ssid_5g_wpa_vlan"], run_id=rid, status_id=5, - msg='5G WPA SSID create failed - custom VLAN mode') - report_data['tests'][key][test_cases["ssid_5g_wpa_vlan"]] = "failed" - - # 2.4G SSIDs - try: - twoFourG_eap = cloud.create_or_update_ssid_profile(cloudSDK_url, bearer, customer_id, ssid_template, - prof_2g_eap_name_vlan, - ssid_2g_eap_vlan, None, - None, - radius_name, "wpa2OnlyRadius", "BRIDGE", 100, ["is2dot4GHz"]) - print("2.4G EAP SSID created successfully - custom VLAN mode") - client.update_testrail(case_id=test_cases["ssid_2g_eap_vlan"], run_id=rid, status_id=1, - msg='2.4G EAP SSID created successfully - custom VLAN mode') - report_data['tests'][key][test_cases["ssid_2g_eap_vlan"]] = "passed" - except: - twoFourG_eap = "error" - print("2.4G EAP SSID create failed - custom VLAN mode") - client.update_testrail(case_id=test_cases["ssid_2g_eap_vlan"], run_id=rid, status_id=5, - msg='2.4G EAP SSID create failed - custom VLAN mode') - report_data['tests'][key][test_cases["ssid_2g_eap_vlan"]] = "failed" - - try: - twoFourG_wpa2 = cloud.create_or_update_ssid_profile(cloudSDK_url, bearer, customer_id, ssid_template, - prof_2g_wpa2_name_vlan, - ssid_2g_wpa2_vlan, psk_2g_wpa2_vlan, - "Radius-Accounting-Profile", "wpa2OnlyPSK", "BRIDGE", 100, - ["is2dot4GHz"]) - print("2.4G WPA2 SSID created successfully - custom VLAN mode") - client.update_testrail(case_id=test_cases["ssid_2g_wpa2_vlan"], run_id=rid, status_id=1, - msg='2.4G WPA2 SSID created successfully - custom VLAN mode') - report_data['tests'][key][test_cases["ssid_2g_wpa2_vlan"]] = "passed" - except: - twoFourG_wpa2 = "error" - print("2.4G WPA2 SSID create failed - custom VLAN mode") - client.update_testrail(case_id=test_cases["ssid_2g_wpa2_vlan"], run_id=rid, status_id=5, - msg='2.4G WPA2 SSID create failed - custom VLAN mode') - report_data['tests'][key][test_cases["ssid_2g_wpa2_vlan"]] = "failed" - - try: - twoFourG_wpa = cloud.create_or_update_ssid_profile(cloudSDK_url, bearer, customer_id, ssid_template, - prof_2g_wpa_name_vlan, - ssid_2g_wpa_vlan, psk_2g_wpa_vlan, - "Radius-Accounting-Profile", "wpaPSK", "BRIDGE", 100, - ["is2dot4GHz"]) - print("2.4G WPA SSID created successfully - custom VLAN mode") - client.update_testrail(case_id=test_cases["ssid_2g_wpa_vlan"], run_id=rid, status_id=1, - msg='2.4G WPA SSID created successfully - custom VLAN mode') - report_data['tests'][key][test_cases["ssid_2g_wpa_vlan"]] = "passed" - except: - twoFourG_wpa = "error" - print("2.4G WPA SSID create failed - custom VLAN mode") - client.update_testrail(case_id=test_cases["ssid_2g_wpa_vlan"], run_id=rid, status_id=5, - msg='2.4G WPA SSID create failed - custom VLAN mode') - report_data['tests'][key][test_cases["ssid_2g_wpa_vlan"]] = "failed" - - ### Create AP VLAN Profile - rfProfileId = lab_ap_info.rf_profile - child_profiles = [fiveG_wpa2, fiveG_wpa, twoFourG_wpa2, twoFourG_wpa, rfProfileId] - ssid_prof_config = [prof_5g_wpa2_name_vlan, prof_5g_wpa_name_vlan, prof_2g_wpa2_name_vlan, prof_2g_wpa_name_vlan] - ssid_config = [ssid_5g_wpa2_vlan, ssid_5g_wpa_vlan, ssid_2g_wpa2_vlan, ssid_2g_wpa_vlan] - if radius_profile != None: - child_profiles.append(radius_profile) - child_profiles.append(fiveG_eap) - child_profiles.append(twoFourG_eap) - ssid_prof_config.append(prof_5g_wpa2_name_vlan) - ssid_prof_config.append(prof_2g_wpa2_name_vlan) - ssid_config.append(ssid_5g_wpa2_vlan) - ssid_config.append(ssid_2g_wpa2_vlan) - print(child_profiles) - - name = command_line_args.testbed + "-" + fw_model + "_vlan" - try: - create_ap_profile = cloud.create_or_update_ap_profile(cloudSDK_url, bearer, customer_id, - command_line_args.default_ap_profile, name, child_profiles) - test_profile_id = create_ap_profile - print("Test Profile ID for Test is:", test_profile_id) - client.update_testrail(case_id=test_cases["ap_vlan"], run_id=rid, status_id=1, - msg='AP profile for VLAN tests created successfully') - report_data['tests'][key][test_cases["ap_vlan"]] = "passed" - except: - create_ap_profile = "error" - test_profile_id = profile_info_dict[fw_model + '_vlan']["profile_id"] - print("Error creating AP profile for bridge tests. Will use existing AP profile") - client.update_testrail(case_id=test_cases["ap_vlan"], run_id=rid, status_id=5, - msg='AP profile for VLAN tests could not be created using API') - report_data['tests'][key][test_cases["ap_vlan"]] = "failed" - - ### Set Proper AP Profile for VLAN SSID Tests - ap_profile = cloud.set_ap_profile(equipment_id, test_profile_id, cloudSDK_url, bearer) - - ### Wait for Profile Push - time.sleep(180) - - ###Check if VIF Config and VIF State reflect AP Profile from CloudSDK - ## VIF Config - try: - print("SSIDs in AP Profile:", ssid_config) - print("SSID Profiles in AP Profile:", ssid_prof_config) - - ssid_list = ap_ssh.get_vif_config(command_line_args) - 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=test_cases["vlan_vifc"], run_id=rid, status_id=1, - msg='SSIDs in VIF Config matches AP Profile Config') - report_data['tests'][key][test_cases["vlan_vifc"]] = "passed" - else: - print("SSIDs in Wifi_VIF_Config do not match desired AP Profile Config") - client.update_testrail(case_id=test_cases["vlan_vifc"], run_id=rid, status_id=5, - msg='SSIDs in VIF Config do not match AP Profile Config') - report_data['tests'][key][test_cases["vlan_vifc"]] = "failed" - except: - ssid_list = "ERROR" - print("Error accessing VIF Config from AP CLI") - client.update_testrail(case_id=test_cases["vlan_vifc"], run_id=rid, status_id=4, - msg='Cannot determine VIF Config - re-test required') - report_data['tests'][key][test_cases["vlan_vifc"]] = "error" - # VIF State - try: - ssid_state = ap_ssh.get_vif_state(command_line_args) - 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=test_cases["vlan_vifs"], run_id=rid, status_id=1, - msg='SSIDs in VIF Config applied to VIF State') - report_data['tests'][key][test_cases["vlan_vifs"]] = "passed" - else: - print("SSIDs not applied on AP") - client.update_testrail(case_id=test_cases["vlan_vifs"], run_id=rid, status_id=5, - msg='SSIDs in VIF Config not applied to VIF State') - report_data['tests'][key][test_cases["vlan_vifs"]] = "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=test_cases["vlan_vifs"], run_id=rid, status_id=4, - msg='Cannot determine VIF State - re-test required') - report_data['tests'][key][test_cases["vlan_vifs"]] = "error" - - ### Set port for LANForge - port = "vlan100" - - # Print iwinfo for logs - iwinfo = iwinfo_status(command_line_args) - print(iwinfo) - - if not command_line_args.skip_radius: - ###Run Client Single Connectivity Test Cases for VLAN SSIDs - # TC- 2.4 GHz WPA2-Enterprise VLAN - test_case = test_cases["2g_eap_vlan"] - radio = lanforge_2g_radio - sta_list = [lanforge_prefix+"5253"] - ssid_name = ssid_2g_eap_vlan - 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 - 2.4 GHz WPA2 VLAN - test_case = test_cases["2g_wpa2_vlan"] - radio = lanforge_2g_radio - station = [lanforge_prefix+"5251"] - ssid_name = ssid_2g_wpa2_vlan - ssid_psk = psk_2g_wpa2_vlan - security = "wpa2" - try: - test_result = Test.Single_Client_Connectivity(port, radio, ssid_name, ssid_psk, security, - station, 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 4323 - 2.4 GHz WPA VLAN - test_case = test_cases["2g_wpa_vlan"] - radio = lanforge_2g_radio - station = [lanforge_prefix+"5252"] - ssid_name = ssid_2g_wpa_vlan - ssid_psk = psk_2g_wpa_vlan - security = "wpa" - try: - test_result = Test.Single_Client_Connectivity(port, radio, ssid_name, ssid_psk, security, station, - test_case, rid) - 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) - - if not command_line_args.skip_radius: - # TC - 5 GHz WPA2-Enterprise VLAN - test_case = test_cases["5g_eap_vlan"] - radio = lanforge_5g_radio - sta_list = [lanforge_prefix+"5250"] - ssid_name = ssid_5g_eap_vlan - 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 VLAN - test_case = test_cases["5g_wpa2_vlan"] - radio = lanforge_5g_radio - station = [lanforge_prefix+"5248"] - ssid_name = ssid_5g_wpa2_vlan - ssid_psk = psk_5g_wpa2_vlan - security = "wpa2" - try: - test_result = Test.Single_Client_Connectivity(port, radio, ssid_name, ssid_psk, security, - station, 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 4324 - 5 GHz WPA VLAN - test_case = test_cases["5g_wpa_vlan"] - radio = lanforge_5g_radio - station = [lanforge_prefix+"5249"] - ssid_name = ssid_5g_wpa_vlan - ssid_psk = psk_5g_wpa_vlan - security = "wpa" - try: - test_result = Test.Single_Client_Connectivity(port, radio, ssid_name, ssid_psk, security, - station, 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) - - logger.info("Testing for " + fw_model + "Custom VLAN SSIDs Complete") - - logger.info("Testing for " + fw_model + "Complete") - - # Add indication of complete TC pass/fail to sanity_status for pass to external json used by Throughput Test - x = all(status == "passed" for status in report_data["tests"][key].values()) - print(x) - - if x == True: - sanity_status['sanity_status'][key] = "passed" - - else: - sanity_status['sanity_status'][key] = "failed" - - ##Update sanity_status.json to indicate there has been a test on at least one AP model tonight - sanity_status['sanity_run']['new_data'] = "yes" - - print(sanity_status) - - # write to json file - with open('sanity_status.json', 'w') as json_file: - json.dump(sanity_status, json_file) - - # write to report_data contents to json file so it has something in case of unexpected fail - print(report_data) - with open(report_path + today + '/report_data.json', 'w') as report_json_file: - json.dump(report_data, report_json_file) - -# Dump all sanity test results to external json file again just to be sure -with open('sanity_status.json', 'w') as json_file: - json.dump(sanity_status, json_file) - -# Calculate percent of tests passed for report -for key in ap_models: - if report_data['fw_available'][key] == "No": - report_data["pass_percent"][key] = "Not Run" else: - no_of_tests = len(report_data["tests"][key]) - passed_tests = sum(x == "passed" for x in report_data["tests"][key].values()) - print(passed_tests) - percent = float(passed_tests / no_of_tests) * 100 - percent_pass = round(percent, 2) - print(key, "pass rate is", str(percent_pass) + "%") - report_data["pass_percent"][key] = str(percent_pass) + '%' + print("Skipping this Profile") + exit() -# write to report_data contents to json file -print(report_data) -with open(report_path + today + '/report_data.json', 'w') as report_json_file: - json.dump(report_data, report_json_file) + # exit() + # Test till here to verify all connectivity with cloud and ap and fe upgrade logics -print(".....End of Sanity Test.....") -logger.info("End of Sanity Test run") \ No newline at end of file + # Create session for Test + obj.create_test_run_session() + + # Setup Reporting + obj.setup_report() + + # Start Test + obj.start_test(do_upgrade=do_upgrade) + + +if __name__ == "__main__": + main() diff --git a/tests/UnitTestBase.py b/tests/UnitTestBase.py index 9bf292b07..ce09b551c 100644 --- a/tests/UnitTestBase.py +++ b/tests/UnitTestBase.py @@ -1,5 +1,22 @@ #!/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'../libs/lanforge') +sys.path.append(f'../libs/testrails') +sys.path.append(f'../libs/apnos') +sys.path.append(f'../libs/cloudsdk') +sys.path.append(f'../libs') +sys.path.append(f'../tests/test_utility/') + import base64 import urllib.request from bs4 import BeautifulSoup @@ -13,7 +30,7 @@ from scp import SCPClient import os import pexpect from pexpect import pxssh -import sys + import paramiko from scp import SCPClient import pprint @@ -29,6 +46,11 @@ from datetime import date from shutil import copyfile import argparse from unittest.mock import Mock +from lf_tests import * +from ap_plus_sdk import * +from lab_ap_info import * +from JfrogHelper import * +from reporting import Reporting # For finding files # https://stackoverflow.com/questions/3207219/how-do-i-list-all-files-of-a-directory @@ -44,20 +66,6 @@ import glob # 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 -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'../lanforge/lanforge-scripts/{folder}') - -sys.path.append(f'../libs/lanforge') -sys.path.append(f'../libs/testrails') -sys.path.append(f'../libs/apnos') -sys.path.append(f'../libs/cloudsdk') -sys.path.append(f'../libs') import testrail_api @@ -74,6 +82,7 @@ import eap_connect from eap_connect import EAPConnect import cloudsdk from cloudsdk import CloudSDK +from cloudsdk import CreateAPProfiles import ap_ssh from ap_ssh import * @@ -88,7 +97,7 @@ from lab_ap_info import radius_info class UnitTestBase: - def __init__(self, log_name, args): + def __init__(self, log_name, args, reporting): self.parser = argparse.ArgumentParser(description="Sanity Testing on Firmware Build", parents=[args]) @@ -222,7 +231,7 @@ class UnitTestBase: self.build = self.command_line_args.build_id self.logger = logging.getLogger(log_name) - self.hdlr = logging.FileHandler(self.local_dir + "/log_name.log") + self.hdlr = logging.FileHandler(reporting.report_path + "/test_run.log") self.formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') self.hdlr.setFormatter(self.formatter) self.logger.addHandler(self.hdlr) diff --git a/pytest/Dockerfile b/tests/pytest/Dockerfile similarity index 100% rename from pytest/Dockerfile rename to tests/pytest/Dockerfile diff --git a/pytest/conftest.py b/tests/pytest/conftest.py similarity index 100% rename from pytest/conftest.py rename to tests/pytest/conftest.py diff --git a/pytest/helpers/utils.py b/tests/pytest/helpers/utils.py similarity index 100% rename from pytest/helpers/utils.py rename to tests/pytest/helpers/utils.py diff --git a/pytest/pytest.ini b/tests/pytest/pytest.ini similarity index 100% rename from pytest/pytest.ini rename to tests/pytest/pytest.ini diff --git a/pytest/test_24ghz.py b/tests/pytest/test_24ghz.py similarity index 100% rename from pytest/test_24ghz.py rename to tests/pytest/test_24ghz.py diff --git a/tests/test_utility/reporting.py b/tests/test_utility/reporting.py new file mode 100644 index 000000000..0e7e85d44 --- /dev/null +++ b/tests/test_utility/reporting.py @@ -0,0 +1,52 @@ + +import os +from datetime import date, datetime +from shutil import copyfile +import json + +class Reporting: + + def __init__(self, reports_root="../reports/"): + + 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") + try: + os.mkdir(self.report_path) + print("Successfully created the directory %s " % self.report_path) + except OSError: + print("Creation of the directory %s failed" % self.report_path) + + try: + copyfile(self.templates_root + "/report_template.php", self.report_path + '/report.php') + 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(":","-") + id = today + "-" + now + return id + + def update_json_report(self, report_data): + try: + with open(self.report_path + '/report_data.json', 'w') as report_json_file: + json.dump(report_data, report_json_file) + report_json_file.close() + 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 diff --git a/tools/sdk_set_profile.py b/tools/sdk_set_profile.py index dd5ad0ef8..d976c257a 100755 --- a/tools/sdk_set_profile.py +++ b/tools/sdk_set_profile.py @@ -1,12 +1,12 @@ #!/usr/bin/python3 -u # Example to set profile on NOLA-12 testbed: -#./sdk_set_profile.py --testrail-user-id NONE --model ecw5410 --ap-jumphost-address localhost --ap-jumphost-port 8823 --ap-jumphost-password pumpkin77 \ +# ./sdk_set_profile.py --testrail-user-id NONE --model ecw5410 --ap-jumphost-address localhost --ap-jumphost-port 8823 --ap-jumphost-password pumpkin77 \ # --ap-jumphost-tty /dev/ttyAP1 --testbed "NOLA-12" --lanforge-ip-address localhost --lanforge-port-number 8822 \ # --default-ap-profile TipWlan-2-Radios --sdk-base-url https://wlan-portal-svc-ben-testbed.cicd.lab.wlan.tip.build --skip-radius # Example to set profile on NOLA-01 testbed -#./sdk_set_profile.py --testrail-user-id NONE --model ecw5410 --ap-jumphost-address localhost --ap-jumphost-port 8803 \ +# ./sdk_set_profile.py --testrail-user-id NONE --model ecw5410 --ap-jumphost-address localhost --ap-jumphost-port 8803 \ # --ap-jumphost-password pumpkin77 --ap-jumphost-tty /dev/ttyAP1 --testbed "NOLA-01" --lanforge-ip-address localhost \ # --lanforge-port-number 8802 --default-ap-profile TipWlan-2-Radios --sdk-base-url https://wlan-portal-svc.cicd.lab.wlan.tip.build \ # --skip-radius @@ -18,274 +18,216 @@ sys.path.append(f'../tests') from UnitTestBase import * from cloudsdk import CreateAPProfiles -parser = argparse.ArgumentParser(description="SDK Set Profile", add_help=False) -parser.add_argument("--default-ap-profile", type=str, - help="Default AP profile to use as basis for creating new ones, typically: TipWlan-2-Radios or TipWlan-3-Radios", - required=True) -parser.add_argument("--skip-radius", dest="skip_radius", action='store_true', - help="Should we skip the RADIUS configs or not") -parser.add_argument("--skip-wpa", dest="skip_wpa", action='store_true', - help="Should we skip the WPA ssid or not") -parser.add_argument("--skip-wpa2", dest="skip_wpa2", action='store_true', - help="Should we skip the WPA2 ssid or not") -parser.set_defaults(skip_radius=False) -parser.set_defaults(skip_wpa=False) -parser.set_defaults(skip_wpa2=False) -parser.add_argument("--skip-profiles", dest="skip_profiles", action='store_true', - help="Should we skip creating new ssid profiles?") -parser.set_defaults(skip_profiles=False) - -parser.add_argument("--psk-5g-wpa2", type=str, - help="Allow over-riding the 5g-wpa2 PSK value.") -parser.add_argument("--psk-5g-wpa", type=str, - help="Allow over-riding the 5g-wpa PSK value.") -parser.add_argument("--psk-2g-wpa2", type=str, - help="Allow over-riding the 2g-wpa2 PSK value.") -parser.add_argument("--psk-2g-wpa", type=str, - help="Allow over-riding the 2g-wpa PSK value.") - -parser.add_argument("--ssid-5g-wpa2", type=str, - help="Allow over-riding the 5g-wpa2 SSID value.") -parser.add_argument("--ssid-5g-wpa", type=str, - help="Allow over-riding the 5g-wpa SSID value.") -parser.add_argument("--ssid-2g-wpa2", type=str, - help="Allow over-riding the 2g-wpa2 SSID value.") -parser.add_argument("--ssid-2g-wpa", type=str, - help="Allow over-riding the 2g-wpa SSID value.") - -base = UnitTestBase("skd-set-profile", parser) - -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') -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 -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') - -##Jfrog credentials -jfrog_user = command_line_args.jfrog_user_id # was os.getenv('JFROG_USER') -jfrog_pwd = command_line_args.jfrog_user_password # was os.getenv('JFROG_PWD') - -##EAP Credentials -identity = command_line_args.eap_id # was os.getenv('EAP_IDENTITY') -ttls_password = command_line_args.ttls_password # was os.getenv('EAP_PWD') - -## AP Credentials -ap_username = command_line_args.ap_username # was os.getenv('AP_USER') - -##LANForge Information -lanforge_ip = command_line_args.lanforge_ip_address -lanforge_port = command_line_args.lanforge_port_number -lanforge_prefix = command_line_args.lanforge_prefix -lanforge_2g_radio = command_line_args.lanforge_2g_radio -lanforge_5g_radio = command_line_args.lanforge_5g_radio - -build = command_line_args.build_id - -logger = base.logger -hdlr = base.hdlr - -if command_line_args.testbed == None: - print("ERROR: Must specify --testbed argument for this test.") - sys.exit(1) - -client: TestRail_Client = TestRail_Client(command_line_args) - -###Get Cloud Bearer Token -cloud: CloudSDK = CloudSDK(command_line_args) -bearer = cloud.get_bearer(cloudSDK_url, cloud_type) - -cloud.assert_bad_response = True - -model_id = command_line_args.model -equipment_id = command_line_args.equipment_id - -print("equipment-id: %s"%(equipment_id)) - -if equipment_id == "-1": - eq_id = ap_ssh_ovsh_nodec(command_line_args, 'id') - print("EQ Id: %s"%(eq_id)) - - # Now, query equipment to find something that matches. - eq = cloud.get_customer_equipment(cloudSDK_url, bearer, customer_id) - for item in eq: - for e in item['items']: - print(e['id'], " ", e['inventoryId']) - if e['inventoryId'].endswith("_%s"%(eq_id)): - print("Found equipment ID: %s inventoryId: %s"%(e['id'], e['inventoryId'])) - equipment_id = str(e['id']) - -if equipment_id == -1: - print("ERROR: Could not find equipment-id.") - sys.exit(1) - -###Get Current AP Firmware and upgrade -try: - ap_cli_info = ssh_cli_active_fw(command_line_args) - ap_cli_fw = ap_cli_info['active_fw'] -except Exception as ex: - print(ex) - logging.error(logging.traceback.format_exc()) - ap_cli_info = "ERROR" - print("FAILED: Cannot Reach AP CLI."); - sys.exit(1) - -fw_model = ap_cli_fw.partition("-")[0] -print('Current Active AP FW from CLI:', ap_cli_fw) -###Find Latest FW for Current AP Model and Get FW ID - -############################################################################ -#################### Create Report ######################################### -############################################################################ - -# Create Report Folder for Today -today = str(date.today()) -try: - os.mkdir(report_path + today) -except OSError: - print("Creation of the directory %s failed" % report_path) -else: - print("Successfully created the directory %s " % report_path) - -logger.info('Report data can be found here: ' + report_path + today) -##Get Bearer Token to make sure its valid (long tests can require re-auth) -bearer = cloud.get_bearer(cloudSDK_url, cloud_type) - -radius_name = "%s-%s-%s"%(command_line_args.testbed, fw_model, "Radius") - -prof_5g_eap_name = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_EAP") -prof_5g_wpa2_name = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA2") -prof_5g_wpa_name = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA") -prof_2g_eap_name = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_EAP") -prof_2g_wpa2_name = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA2") -prof_2g_wpa_name = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA") - -prof_5g_eap_name_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_EAP_NAT") -prof_5g_wpa2_name_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA2_NAT") -prof_5g_wpa_name_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA_NAT") -prof_2g_eap_name_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_EAP_NAT") -prof_2g_wpa2_name_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA2_NAT") -prof_2g_wpa_name_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA_NAT") - -prof_5g_eap_name_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_EAP_VLAN") -prof_5g_wpa2_name_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA2_VLAN") -prof_5g_wpa_name_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA_VLAN") -prof_2g_eap_name_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_EAP_VLAN") -prof_2g_wpa2_name_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA2_VLAN") -prof_2g_wpa_name_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA_VLAN") +def main(): -prof_names = [prof_5g_wpa2_name, prof_5g_wpa_name, prof_2g_wpa2_name, prof_2g_wpa_name, - prof_5g_wpa2_name_nat, prof_5g_wpa_name_nat, prof_2g_wpa2_name_nat, prof_2g_wpa_name_nat, - prof_5g_wpa2_name_vlan, prof_5g_wpa_name_vlan, prof_2g_wpa2_name_vlan, prof_2g_wpa_name_vlan] + parser = argparse.ArgumentParser(description="SDK Set Profile", add_help=False) + parser.add_argument("--default-ap-profile", type=str, + help="Default AP profile to use as basis for creating new ones, typically: TipWlan-2-Radios or TipWlan-3-Radios", + required=True) + parser.add_argument("--skip-radius", dest="skip_radius", action='store_true', + help="Should we skip the RADIUS configs or not") + parser.add_argument("--skip-wpa", dest="skip_wpa", action='store_true', + help="Should we skip the WPA ssid or not") + parser.add_argument("--skip-wpa2", dest="skip_wpa2", action='store_true', + help="Should we skip the WPA2 ssid or not") + parser.set_defaults(skip_radius=False) + parser.set_defaults(skip_wpa=False) + parser.set_defaults(skip_wpa2=False) + parser.add_argument("--skip-profiles", dest="skip_profiles", action='store_true', + help="Should we skip creating new ssid profiles?") + parser.set_defaults(skip_profiles=False) -prof_names_eap = [prof_5g_eap_name, prof_2g_eap_name, - prof_5g_eap_name_nat, prof_2g_eap_name_nat, - prof_5g_eap_name_vlan, prof_2g_eap_name_vlan] + parser.add_argument("--psk-5g-wpa2", type=str, + help="Allow over-riding the 5g-wpa2 PSK value.") + parser.add_argument("--psk-5g-wpa", type=str, + help="Allow over-riding the 5g-wpa PSK value.") + parser.add_argument("--psk-2g-wpa2", type=str, + help="Allow over-riding the 2g-wpa2 PSK value.") + parser.add_argument("--psk-2g-wpa", type=str, + help="Allow over-riding the 2g-wpa PSK value.") -# TOOD: Allow configuring this on cmd line -ssid_5g_eap = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_EAP") -ssid_5g_wpa2 = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA2") -ssid_5g_wpa = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA") -ssid_2g_eap = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_EAP") -ssid_2g_wpa2 = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA2") -ssid_2g_wpa = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA") - -ssid_5g_eap_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_EAP_NAT") -ssid_5g_wpa2_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA2_NAT") -ssid_5g_wpa_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA_NAT") -ssid_2g_eap_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_EAP_NAT") -ssid_2g_wpa2_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA2_NAT") -ssid_2g_wpa_nat = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA_NAT") - -ssid_5g_eap_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_EAP_VLAN") -ssid_5g_wpa2_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA2_VLAN") -ssid_5g_wpa_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "5G_WPA_VLAN") -ssid_2g_eap_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_EAP_VLAN") -ssid_2g_wpa2_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA2_VLAN") -ssid_2g_wpa_vlan = "%s-%s-%s"%(command_line_args.testbed, fw_model, "2G_WPA_VLAN") - -psk_5g_wpa2 = "%s-%s"%(fw_model, "5G_WPA2") -psk_5g_wpa = "%s-%s"%(fw_model, "5G_WPA") -psk_2g_wpa2 = "%s-%s"%(fw_model, "2G_WPA2") -psk_2g_wpa = "%s-%s"%(fw_model, "2G_WPA") - -psk_5g_wpa2_nat = "%s-%s"%(fw_model, "5G_WPA2_NAT") -psk_5g_wpa_nat = "%s-%s"%(fw_model, "5G_WPA_NAT") -psk_2g_wpa2_nat = "%s-%s"%(fw_model, "2G_WPA2_NAT") -psk_2g_wpa_nat = "%s-%s"%(fw_model, "2G_WPA_NAT") - -psk_5g_wpa2_vlan = "%s-%s"%(fw_model, "5G_WPA2_VLAN") -psk_5g_wpa_vlan = "%s-%s"%(fw_model, "5G_WPA_VLAN") -psk_2g_wpa2_vlan = "%s-%s"%(fw_model, "2G_WPA2_VLAN") -psk_2g_wpa_vlan = "%s-%s"%(fw_model, "2G_WPA_VLAN") - -# Allow cmd-line to override -if command_line_args.psk_5g_wpa2: - psk_5g_wpa2 = command_line_args.psk_5g_wpa2 -if command_line_args.psk_5g_wpa: - psk_5g_wpa = command_line_args.psk_5g_wpa -if command_line_args.psk_2g_wpa2: - psk_2g_wpa2 = command_line_args.psk_2g_wpa2 -if command_line_args.psk_2g_wpa: - psk_2g_wpa = command_line_args.psk_2g_wpa - -if command_line_args.ssid_5g_wpa2: - ssid_5g_wpa2 = command_line_args.ssid_5g_wpa2 -if command_line_args.ssid_5g_wpa: - ssid_5g_wpa = command_line_args.ssid_5g_wpa -if command_line_args.ssid_2g_wpa2: - ssid_2g_wpa2 = command_line_args.ssid_2g_wpa2 -if command_line_args.ssid_2g_wpa: - ssid_2g_wpa = command_line_args.ssid_2g_wpa + parser.add_argument("--ssid-5g-wpa2", type=str, + help="Allow over-riding the 5g-wpa2 SSID value.") + parser.add_argument("--ssid-5g-wpa", type=str, + help="Allow over-riding the 5g-wpa SSID value.") + parser.add_argument("--ssid-2g-wpa2", type=str, + help="Allow over-riding the 2g-wpa2 SSID value.") + parser.add_argument("--ssid-2g-wpa", type=str, + help="Allow over-riding the 2g-wpa SSID value.") -print("creating Profiles") -ssid_template = "TipWlan-Cloud-Wifi" - -# Data Structure to Give to CreateAPProfiles.create_ap_profiles() -ssid_profile_data = { - "ssid_template" : ssid_template, - - "2G" : - { - "eap": {"info" : [ssid_2g_eap ,prof_2g_eap_name, prof_2g_eap_name_nat, prof_2g_eap_name_vlan], "psk" :[]}, - "wpa": {"info" : [ssid_2g_wpa, prof_2g_wpa_name, prof_2g_wpa_name_nat, prof_2g_wpa_name_vlan], "psk" : [psk_2g_wpa, psk_2g_wpa_nat, psk_2g_wpa_vlan]}, - "wpa2": {"info" : [ssid_2g_wpa2, prof_2g_wpa2_name, prof_2g_wpa2_name_nat, prof_2g_wpa2_name_vlan], "psk" : [psk_2g_wpa2, psk_2g_wpa2_nat, psk_2g_wpa2_vlan]}, - }, - - "5G" : - { - "eap": {"info" : [ssid_5g_eap, prof_5g_eap_name, prof_5g_eap_name_nat, prof_5g_eap_name_vlan], "psk" : []}, - "wpa": {"info" : [ssid_5g_wpa, prof_5g_wpa_name, prof_5g_wpa_name_nat, prof_5g_wpa_name_vlan], "psk" : [psk_5g_wpa, psk_5g_wpa_nat, psk_5g_wpa_vlan]}, - "wpa2":{"info" : [ssid_5g_wpa2, prof_5g_wpa2_name, prof_5g_wpa2_name_nat, prof_5g_wpa_name_vlan], "psk" : [psk_2g_wpa2, psk_5g_wpa2_nat, psk_5g_wpa2_vlan]} - } - } - -obj = CreateAPProfiles(command_line_args, cloud=cloud, client= client) - -if not command_line_args.skip_profiles: - if not command_line_args.skip_radius: - obj.create_radius_profile(radius_name, rid, key) - obj.create_ssid_profiles(ssid_profile_data= ssid_profile_data, skip_wpa2=command_line_args.skip_wpa2, - skip_wpa=command_line_args.skip_wpa, skip_eap=command_line_args.skip_radius) - -print("Create AP with equipment-id: ", equipment_id) -obj.create_ap_bridge_profile(eq_id=equipment_id, fw_model=fw_model) -obj.validate_changes() - -print("Profiles Created") + + + base = UnitTestBase("skd-set-profile", parser) + + 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') + 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 + 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') + + ##Jfrog credentials + jfrog_user = command_line_args.jfrog_user_id # was os.getenv('JFROG_USER') + jfrog_pwd = command_line_args.jfrog_user_password # was os.getenv('JFROG_PWD') + + ##EAP Credentials + identity = command_line_args.eap_id # was os.getenv('EAP_IDENTITY') + ttls_password = command_line_args.ttls_password # was os.getenv('EAP_PWD') + + ## AP Credentials + ap_username = command_line_args.ap_username # was os.getenv('AP_USER') + + ##LANForge Information + lanforge_ip = command_line_args.lanforge_ip_address + lanforge_port = command_line_args.lanforge_port_number + lanforge_prefix = command_line_args.lanforge_prefix + lanforge_2g_radio = command_line_args.lanforge_2g_radio + lanforge_5g_radio = command_line_args.lanforge_5g_radio + + build = command_line_args.build_id + + logger = base.logger + hdlr = base.hdlr + + if command_line_args.testbed == None: + print("ERROR: Must specify --testbed argument for this test.") + sys.exit(1) + + client: TestRail_Client = TestRail_Client(command_line_args) + + ###Get Cloud Bearer Token + cloud: CloudSDK = CloudSDK(command_line_args) + bearer = cloud.get_bearer(cloudSDK_url, cloud_type) + + cloud.assert_bad_response = True + + model_id = command_line_args.model + equipment_id = command_line_args.equipment_id + + print("equipment-id: %s" % (equipment_id)) + + if equipment_id == "-1": + eq_id = ap_ssh_ovsh_nodec(command_line_args, 'id') + print("EQ Id: %s" % (eq_id)) + + # Now, query equipment to find something that matches. + eq = cloud.get_customer_equipment(cloudSDK_url, bearer, customer_id) + for item in eq: + for e in item['items']: + print(e['id'], " ", e['inventoryId']) + if e['inventoryId'].endswith("_%s" % (eq_id)): + print("Found equipment ID: %s inventoryId: %s" % (e['id'], e['inventoryId'])) + equipment_id = str(e['id']) + + if equipment_id == -1: + print("ERROR: Could not find equipment-id.") + sys.exit(1) + + ###Get Current AP Firmware and upgrade + try: + ap_cli_info = ssh_cli_active_fw(command_line_args) + ap_cli_fw = ap_cli_info['active_fw'] + except Exception as ex: + print(ex) + logging.error(logging.traceback.format_exc()) + ap_cli_info = "ERROR" + print("FAILED: Cannot Reach AP CLI."); + sys.exit(1) + + fw_model = ap_cli_fw.partition("-")[0] + + + print('Current Active AP FW from CLI:', ap_cli_fw) + + ###Find Latest FW for Current AP Model and Get FW ID + + ############################################################################ + #################### Create Report ######################################### + ############################################################################ + + # Create Report Folder for Today + today = str(date.today()) + try: + os.mkdir(report_path + today) + except OSError: + print("Creation of the directory %s failed" % report_path) + else: + print("Successfully created the directory %s " % report_path) + + logger.info('Report data can be found here: ' + report_path + today) + + ##Get Bearer Token to make sure its valid (long tests can require re-auth) + bearer = cloud.get_bearer(cloudSDK_url, cloud_type) + radius_name = "%s-%s-%s" % (command_line_args.testbed, fw_model, "Radius") + obj = CreateAPProfiles(command_line_args, cloud=cloud, client=client, fw_model=fw_model) + + + # Allow cmd-line to override + if command_line_args.psk_5g_wpa2: + obj.psk_data["5g"]["wpa2"]["name"] = command_line_args.psk_5g_wpa2 + obj.psk_data["5g"]["wpa2"]["nat"] = command_line_args.psk_5g_wpa2 + obj.psk_data["5g"]["wpa2"]["vlan"] = command_line_args.psk_5g_wpa2 + if command_line_args.psk_5g_wpa: + obj.psk_data["5g"]["wpa"]["name"] = command_line_args.psk_5g_wpa + obj.psk_data["5g"]["wpa"]["nat"] = command_line_args.psk_5g_wpa + obj.psk_data["5g"]["wpa"]["vlan"] = command_line_args.psk_5g_wpa + if command_line_args.psk_2g_wpa2: + obj.psk_data["2g"]["wpa2"]["name"] = command_line_args.psk_2g_wpa2 + obj.psk_data["2g"]["wpa2"]["nat"] = command_line_args.psk_2g_wpa2 + obj.psk_data["2g"]["wpa2"]["vlan"] =command_line_args.psk_2g_wpa2 + if command_line_args.psk_2g_wpa: + obj.psk_data["2g"]["wpa"]["name"] = command_line_args.psk_2g_wpa + obj.psk_data["2g"]["wpa"]["nat"] = command_line_args.psk_2g_wpa + obj.psk_data["2g"]["wpa"]["nat"] = command_line_args.psk_2g_wpa + if command_line_args.ssid_5g_wpa2: + obj.ssid_data["5g"]["wpa2"]["name"] = command_line_args.ssid_5g_wpa2 + obj.ssid_data["5g"]["wpa2"]["nat"] = command_line_args.ssid_5g_wpa2 + obj.ssid_data["5g"]["wpa2"]["vlan"] = command_line_args.ssid_5g_wpa2 + if command_line_args.ssid_5g_wpa: + obj.ssid_data["5g"]["wpa"]["name"] = command_line_args.ssid_5g_wpa + obj.ssid_data["5g"]["wpa"]["nat"] = command_line_args.ssid_5g_wpa + obj.ssid_data["5g"]["wpa"]["vlan"] = command_line_args.ssid_5g_wpa + if command_line_args.ssid_2g_wpa2: + obj.ssid_data["2g"]["wpa2"]["name"] = command_line_args.ssid_2g_wpa2 + obj.ssid_data["2g"]["wpa2"]["nat"] = command_line_args.ssid_2g_wpa2 + obj.ssid_data["2g"]["wpa2"]["vlan"] = command_line_args.ssid_2g_wpa2 + if command_line_args.ssid_2g_wpa: + obj.ssid_data["2g"]["wpa"]["name"] = command_line_args.ssid_2g_wpa + obj.ssid_data["2g"]["wpa"]["nat"] = command_line_args.ssid_2g_wpa + obj.ssid_data["2g"]["wpa"]["vlan"] = command_line_args.ssid_2g_wpa + + print("creating Profiles") + ssid_template = "TipWlan-Cloud-Wifi" + + + + if not command_line_args.skip_profiles: + if not command_line_args.skip_radius: + obj.create_radius_profile(radius_name, rid, key) + obj.create_ssid_profiles(ssid_template=ssid_template, skip_wpa2=command_line_args.skip_wpa2, + skip_wpa=command_line_args.skip_wpa, skip_eap=command_line_args.skip_radius) + + print("Create AP with equipment-id: ", equipment_id) + obj.create_ap_bridge_profile(eq_id=equipment_id, fw_model=fw_model) + obj.validate_changes() + + print("Profiles Created") + +main() +