Refactoring : Nightly working bridge mode and nat mode working, Libraries are refactored too

This commit is contained in:
shivam
2021-02-09 17:23:24 +05:30
parent 4c1cc92add
commit d82858bf4c
7 changed files with 451 additions and 498 deletions

View File

@@ -3,15 +3,22 @@ import base64
import urllib.request
from bs4 import BeautifulSoup
import re
from ap_ssh import ssh_cli_active_fw
from lab_ap_info import *
###Class for jfrog Interaction
class GetBuild:
def __init__(self, jfrog_user, jfrog_passwd):
def __init__(self, jfrog_user, jfrog_passwd, build):
self.user = jfrog_user
self.password = jfrog_passwd
ssl._create_default_https_context = ssl._create_unverified_context
self.jfrog_url = 'https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/'
self.build = build
def get_latest_image(self, model):
url = self.jfrog_url + model + "/dev/"
def get_latest_image(self, url, build):
auth = str(
base64.b64encode(
bytes('%s:%s' % (self.user, self.password), 'utf-8')
@@ -26,10 +33,16 @@ class GetBuild:
response = urllib.request.urlopen(req)
html = response.read()
soup = BeautifulSoup(html, features="html.parser")
##find the last pending link on dev
last_link = soup.find_all('a', href=re.compile(build))[-1]
# find the last pending link on dev
last_link = soup.find_all('a', href=re.compile(self.build))[-1]
latest_file = last_link['href']
latest_fw = latest_file.replace('.tar.gz', '')
return latest_fw
def check_latest_fw(self, ap_model=None):
for model in ap_models:
if model == ap_model:
return self.get_latest_image(model)
else:
continue

View File

@@ -1,30 +1,8 @@
from lab_ap_info import *
from JfrogHelper import GetBuild
from ap_ssh import ssh_cli_active_fw
def check_latest_fw(jfrog=None,
ap_latest_dict=None,
buildid=None):
############################################################################
#################### Jfrog Firmware Check ##################################
############################################################################
for model in ap_models:
# cloudModel = cloud_sdk_models[model]
###Check Latest FW on jFrog
jfrog_url = 'https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/'
url = jfrog_url + model + "/dev/"
Build: GetBuild = GetBuild(jfrog["user"], jfrog["pass"])
latest_image = Build.get_latest_image(url, buildid)
print(model, "Latest FW on jFrog:", latest_image)
ap_latest_dict[model] = latest_image
return ap_latest_dict
def get_ap_info(args):
return ssh_cli_active_fw(args)
pass

View File

@@ -839,7 +839,6 @@ class CloudSDK:
# Library for creating AP Profiles
class CreateAPProfiles:
@@ -889,15 +888,33 @@ class CreateAPProfiles:
self.report_data['tests'] = dict.fromkeys(self.ap_models, "")
self.test_cases = {
"radius_profile": None,
"ssid_5g_eap_bridge": None,
"ssid_5g_wpa2_bridge": None,
"ssid_5g_wpa_bridge": None,
"ssid_2g_eap_bridge": None,
"ssid_2g_wpa2_bridge": None,
"ssid_2g_wpa_bridge": None,
"ssid_5g_eap_nat": None,
"ssid_5g_wpa2_nat": None,
"ssid_5g_wpa_nat": None,
"ssid_2g_eap_nat": None,
"ssid_2g_wpa2_nat": None,
"ssid_2g_wpa_nat": None,
"ap_bridge": None,
"ap_nat": None,
"ap_vlan": None,
"bridge_vifc": None,
"bridge_vifs": None
"bridge_vifs": None,
"nat_vifc": None,
"nat_vifs": None,
"vlan_vifc": None,
"vlan_vifs": None
}
self.profile_data, self.prof_names, self.prof_names_eap = self.create_profile_data(self.command_line_args,
self.fw_model)
@@ -958,47 +975,7 @@ class CreateAPProfiles:
return profile_data, prof_names, prof_names_eap
def create_ssid_data(self, args, fw_model):
ssid_data = {
"5g": {"eap":
{
"name": "%s-%s-%s" % (args.testbed, fw_model, "5G_EAP"),
"nat": "%s-%s-%s" % (args.testbed, fw_model, "5G_EAP_NAT"),
"vlan": "%s-%s-%s" % (args.testbed, fw_model, "5G_EAP_VLAN")
},
"wpa":
{
"name": "%s-%s-%s" % (args.testbed, fw_model, "5G_WPA"),
"nat": "%s-%s-%s" % (args.testbed, fw_model, "5G_WPA_NAT"),
"vlan": "%s-%s-%s" % (args.testbed, fw_model, "5G_WPA_VLAN")
},
"wpa2":
{
"name": "%s-%s-%s" % (args.testbed, fw_model, "5G_WPA2"),
"nat": "%s-%s-%s" % (args.testbed, fw_model, "5G_WPA2_NAT"),
"vlan": "%s-%s-%s" % (args.testbed, fw_model, "5G_WPA2_VLAN")
}
},
"2g": {
"eap":
{
"name": "%s-%s-%s" % (args.testbed, fw_model, "2G_EAP"),
"nat": "%s-%s-%s" % (args.testbed, fw_model, "2G_EAP_NAT"),
"vlan": "%s-%s-%s" % (args.testbed, fw_model, "2G_EAP_VLAN")
},
"wpa":
{
"name": "%s-%s-%s" % (args.testbed, fw_model, "2G_WPA"),
"nat": "%s-%s-%s" % (args.testbed, fw_model, "2G_WPA_NAT"),
"vlan": "%s-%s-%s" % (args.testbed, fw_model, "2G_WPA_VLAN")
},
"wpa2":
{
"name": "%s-%s-%s" % (args.testbed, fw_model, "2G_WPA2"),
"nat": "%s-%s-%s" % (args.testbed, fw_model, "2G_WPA2_NAT"),
"vlan": "%s-%s-%s" % (args.testbed, fw_model, "2G_WPA2_VLAN")
}
}
}
ssid_data = self.profile_data.copy()
psk_data = {
"5g":
@@ -1120,10 +1097,13 @@ class CreateAPProfiles:
msg='Failed to create RADIUS profile')
self.test_cases["radius_profile"] = "failed"
def create_ssid_profiles(self, ssid_template=None, skip_wpa2=False, skip_wpa=False, skip_eap=False):
def create_ssid_profiles(self, ssid_template=None, skip_wpa2=False, skip_wpa=False, skip_eap=False, mode="bridge"):
self.ssid_template = ssid_template
if mode == "bridge":
self.mode = "name"
if mode == "nat":
self.mode = "nat"
self.fiveG_eap = None
self.twoFourG_eap = None
self.fiveG_wpa2 = None
@@ -1135,197 +1115,207 @@ class CreateAPProfiles:
print("CreateAPProfile::create_ssid_profile, skip-wpa: ", skip_wpa, " skip-wpa2: ", skip_wpa2, " skip-eap: ",
skip_eap)
# 5G eap
if not skip_eap:
# 5G eap
try:
self.fiveG_eap = self.cloud.create_or_update_ssid_profile(self.command_line_args.sdk_base_url,
self.bearer, self.customer_id,
self.ssid_template,
self.profile_data['5g']['eap']['name'],
self.ssid_data['5g']['eap']['name'],
self.profile_data['5g']['eap'][self.mode],
self.ssid_data['5g']['eap'][self.mode],
None,
self.radius_name,
"wpa2OnlyRadius", "BRIDGE", 1,
"wpa2OnlyRadius", mode.upper(), 1,
["is5GHzU", "is5GHz", "is5GHzL"])
print("5G EAP SSID created successfully - bridge mode")
self.client.update_testrail(case_id=self.test_cases["ssid_5g_eap_bridge"], run_id=self.rid, status_id=1,
msg='5G EAP SSID created successfully - bridge mode')
self.test_cases["ssid_5g_eap_bridge"] = "passed"
print("5G EAP SSID created successfully - " + mode + " mode")
self.client.update_testrail(case_id=self.test_cases["ssid_5g_eap_" + mode],
run_id=self.rid,
status_id=1,
msg='5G EAP SSID created successfully - ' + mode + ' mode')
self.test_cases["ssid_5g_eap_" + mode] = "passed"
except Exception as ex:
print(ex)
logging.error(logging.traceback.format_exc())
self.fiveG_eap = None
print("5G EAP SSID create failed - bridge mode")
self.client.update_testrail(case_id=self.test_cases["ssid_5g_eap_bridge"], run_id=self.rid, status_id=5,
msg='5G EAP SSID create failed - bridge mode')
self.test_cases["ssid_5g_eap_bridge"] = "failed"
print("5G EAP SSID create failed - " + mode + " mode")
self.client.update_testrail(case_id=self.test_cases["ssid_5g_eap_" + mode], run_id=self.rid, status_id=5,
msg='5G EAP SSID create failed - ' + mode + ' mode')
self.test_cases["ssid_5g_eap_" + mode] = "failed"
# 2.4G eap
try:
self.twoFourG_eap = self.cloud.create_or_update_ssid_profile(self.command_line_args.sdk_base_url,
self.bearer, self.customer_id,
self.ssid_template,
self.profile_data['2g']['eap']['name'],
self.ssid_data['2g']['eap']['name'],
self.profile_data['2g']['eap'][self.mode],
self.ssid_data['2g']['eap'][self.mode],
None,
self.radius_name, "wpa2OnlyRadius",
"BRIDGE", 1,
mode.upper(), 1,
["is2dot4GHz"])
print("2.4G EAP SSID created successfully - bridge mode")
self.client.update_testrail(case_id=self.test_cases["ssid_2g_eap_bridge"], run_id=self.rid, status_id=1,
msg='2.4G EAP SSID created successfully - bridge mode')
self.test_cases["ssid_2g_eap_bridge"] = "passed"
print("2.4G EAP SSID created successfully - " + mode + " mode")
self.client.update_testrail(case_id=self.test_cases["ssid_5g_eap_" + mode], run_id=self.rid, status_id=1,
msg='2.4G EAP SSID created successfully - ' + mode + ' mode')
self.test_cases["ssid_5g_eap_" + mode] = "passed"
except Exception as ex:
print(ex)
logging.error(logging.traceback.format_exc())
self.twoFourG_eap = None
print("2.4G EAP SSID create failed - bridge mode")
self.client.update_testrail(case_id=self.test_cases["ssid_2g_eap_bridge"], run_id=self.rid, status_id=5,
self.client.update_testrail(case_id=self.test_cases["ssid_5g_eap_" + mode], run_id=self.rid, status_id=5,
msg='2.4G EAP SSID create failed - bridge mode')
self.test_cases["ssid_2g_eap_bridge"] = "failed"
self.test_cases["ssid_5g_eap_" + mode] = "failed"
# 5g wpa2
if not skip_wpa2:
# 5g wpa2
try:
self.fiveG_wpa2 = self.cloud.create_or_update_ssid_profile(self.command_line_args.sdk_base_url,
self.bearer, self.customer_id,
self.ssid_template,
self.profile_data['5g']['wpa2']['name'],
self.ssid_data['5g']['wpa2']['name'],
self.psk_data['5g']['wpa2']['name'],
self.profile_data['5g']['wpa2'][self.mode],
self.ssid_data['5g']['wpa2'][self.mode],
self.psk_data['5g']['wpa2'][self.mode],
"Radius-Accounting-Profile", "wpa2OnlyPSK",
"BRIDGE", 1,
mode.upper(), 1,
["is5GHzU", "is5GHz", "is5GHzL"])
print("5G WPA2 SSID created successfully - bridge mode")
self.client.update_testrail(case_id=self.test_cases["ssid_5g_wpa2_bridge"], run_id=self.rid,
print("5G WPA2 SSID created successfully - " + mode + " mode")
self.client.update_testrail(case_id=self.test_cases["ssid_5g_wpa2_" + mode], run_id=self.rid,
status_id=1,
msg='5G WPA2 SSID created successfully - bridge mode')
self.test_cases["ssid_5g_wpa2_bridge"] = "passed"
msg='5G WPA2 SSID created successfully - ' + mode + ' mode')
self.test_cases["ssid_5g_wpa2_" + mode] = "passed"
except Exception as ex:
print(ex)
logging.error(logging.traceback.format_exc())
self.fiveG_wpa2 = None
print("5G WPA2 SSID create failed - bridge mode")
self.client.update_testrail(case_id=test_cases["ssid_5g_wpa2_bridge"], run_id=self.rid, status_id=5,
msg='5G WPA2 SSID create failed - bridge mode')
self.test_cases["ssid_5g_wpa2_bridge"] = "failed"
print("5G WPA2 SSID create failed - " + mode + " mode")
self.client.update_testrail(case_id=self.test_cases["ssid_5g_wpa2_" + mode], run_id=self.rid, status_id=5,
msg='5G WPA2 SSID create failed - ' + mode + ' mode')
self.test_cases["ssid_5g_wpa2_" + mode] = "failed"
# 2.4G wpa2
try:
self.twoFourG_wpa2 = self.cloud.create_or_update_ssid_profile(self.command_line_args.sdk_base_url,
self.bearer, self.customer_id,
self.ssid_template,
self.profile_data['2g']['wpa2']['name'],
self.ssid_data['2g']['wpa2']['name'],
self.psk_data['2g']['wpa2']['name'],
self.profile_data['2g']['wpa2'][self.mode],
self.ssid_data['2g']['wpa2'][self.mode],
self.psk_data['2g']['wpa2'][self.mode],
"Radius-Accounting-Profile",
"wpa2OnlyPSK", "BRIDGE", 1,
"wpa2OnlyPSK", self.mode.upper(), 1,
["is2dot4GHz"])
print("2.4G WPA2 SSID created successfully - bridge mode")
self.client.update_testrail(case_id=self.test_cases["ssid_2g_wpa2_bridge"], run_id=self.rid,
print("2.4G WPA2 SSID created successfully - " + mode + " mode")
self.client.update_testrail(case_id=self.test_cases["ssid_2g_wpa2_" + mode], run_id=self.rid,
status_id=1,
msg='2.4G WPA2 SSID created successfully - bridge mode')
self.test_cases["ssid_2g_wpa2_bridge"] = "passed"
msg='2.4G WPA2 SSID created successfully - ' + mode + ' mode')
self.test_cases["ssid_2g_wpa2_" + mode] = "passed"
except Exception as ex:
print(ex)
logging.error(logging.traceback.format_exc())
self.twoFourG_wpa2 = None
print("2.4G WPA2 SSID create failed - bridge mode")
self.client.update_testrail(case_id=test_cases["ssid_2g_wpa2_bridge"], run_id=self.rid, status_id=5,
msg='2.4G WPA2 SSID create failed - bridge mode')
self.test_cases["ssid_2g_wpa2_bridge"] = "failed"
print("2.4G WPA2 SSID create failed - " + mode + " mode")
self.client.update_testrail(case_id=test_cases["ssid_2g_wpa2_" + mode], run_id=self.rid, status_id=5,
msg='2.4G WPA2 SSID create failed - ' + mode + ' mode')
self.test_cases["ssid_2g_wpa2_" + mode] = "failed"
# 5g wpa
if not skip_wpa:
# 5g wpa
try:
self.fiveG_wpa = self.cloud.create_or_update_ssid_profile(self.command_line_args.sdk_base_url,
self.bearer, self.customer_id,
self.ssid_template,
self.profile_data['5g']['wpa']['name'],
self.ssid_data['5g']['wpa']['name'],
self.psk_data['5g']['wpa']['name'],
self.profile_data['5g']['wpa'][self.mode],
self.ssid_data['5g']['wpa'][self.mode],
self.psk_data['5g']['wpa'][self.mode],
"Radius-Accounting-Profile", "wpaPSK",
"BRIDGE", 1,
mode.upper(), 1,
["is5GHzU", "is5GHz", "is5GHzL"])
print("5G WPA SSID created successfully - bridge mode")
self.client.update_testrail(case_id=self.test_cases["ssid_5g_wpa_bridge"], run_id=self.rid, status_id=1,
msg='5G WPA SSID created successfully - bridge mode')
self.test_cases["ssid_5g_wpa_bridge"] = "passed"
print("5G WPA SSID created successfully - " + mode + " mode")
self.client.update_testrail(case_id=self.test_cases["ssid_5g_wpa_" + mode],
run_id=self.rid,
status_id=1,
msg='5G WPA SSID created successfully - ' + mode + ' mode')
self.test_cases["ssid_5g_wpa_" + mode] = "passed"
except Exception as ex:
print(ex)
logging.error(logging.traceback.format_exc())
self.fiveG_wpa = None
print("5G WPA SSID create failed - bridge mode")
self.client.update_testrail(case_id=test_cases["ssid_5g_wpa_bridge"], run_id=self.rid, status_id=5,
msg='5G WPA SSID create failed - bridge mode')
self.test_cases["ssid_5g_wpa_bridge"] = "failed"
print("5G WPA SSID create failed - " + mode + " mode")
self.client.update_testrail(case_id=test_cases["ssid_5g_wpa_" + mode], run_id=self.rid, status_id=5,
msg='5G WPA SSID create failed - ' + mode + ' mode')
self.test_cases["ssid_5g_wpa_" + mode] = "failed"
# 2.4G wpa
try:
self.twoFourG_wpa = self.cloud.create_or_update_ssid_profile(self.command_line_args.sdk_base_url,
self.bearer, self.customer_id,
self.ssid_template,
self.profile_data['2g']['wpa']['name'],
self.ssid_data['2g']['wpa']['name'],
self.psk_data['2g']['wpa']['name'],
self.profile_data['2g']['wpa'][self.mode],
self.ssid_data['2g']['wpa'][self.mode],
self.psk_data['2g']['wpa'][self.mode],
"Radius-Accounting-Profile", "wpaPSK",
"BRIDGE", 1,
mode.upper(), 1,
["is2dot4GHz"])
print("2.4G WPA SSID created successfully - bridge mode")
self.client.update_testrail(case_id=self.test_cases["ssid_2g_wpa_bridge"], run_id=self.rid, status_id=1,
msg='2.4G WPA SSID created successfully - bridge mode')
self.test_cases["ssid_2g_wpa_bridge"] = "passed"
print("2.4G WPA SSID created successfully - " + mode + " mode")
self.client.update_testrail(case_id=self.test_cases["ssid_2g_wpa_" + mode], run_id=self.rid, status_id=1,
msg='2.4G WPA SSID created successfully - ' + mode + ' mode')
self.test_cases["ssid_2g_wpa_" + mode] = "passed"
except Exception as ex:
print(ex)
logging.error(logging.traceback.format_exc())
self.twoFourG_wpa = None
print("2.4G WPA SSID create failed - bridge mode")
self.client.update_testrail(case_id=self.test_cases["ssid_2g_wpa_bridge"], run_id=self.rid, status_id=5,
msg='2.4G WPA SSID create failed - bridge mode')
self.test_cases["ssid_2g_wpa_bridge"] = "failed"
print("2.4G WPA SSID create failed - " + mode + " mode")
self.client.update_testrail(case_id=self.test_cases["ssid_2g_wpa_" + mode], run_id=self.rid, status_id=5,
msg='2.4G WPA SSID create failed - ' + mode + ' mode')
self.test_cases["ssid_2g_wpa_" + mode] = "failed"
def create_ap_bridge_profile(self, eq_id=None, fw_model=None):
def create_ap_bridge_profile(self, eq_id=None, fw_model=None, mode="bridge"):
self.ssid_prof_config = []
self.ssid_config = []
self.fw_model = fw_model
self.rfProfileId = lab_ap_info.rf_profile
self.child_profiles = [self.rfProfileId]
if mode == "bridge":
self.mode = "name"
if mode == "nat":
self.mode = "nat"
if self.fiveG_wpa2:
self.child_profiles.append(self.fiveG_wpa2)
self.ssid_prof_config.append(self.profile_data['5g']['wpa2']['name'])
self.ssid_config.append(self.ssid_data['5g']['wpa2']['name'])
self.ssid_prof_config.append(self.profile_data['5g']['wpa2'][self.mode])
self.ssid_config.append(self.ssid_data['5g']['wpa2'][self.mode])
if self.twoFourG_wpa2:
self.child_profiles.append(self.twoFourG_wpa2)
self.ssid_prof_config.append(self.profile_data['2g']['wpa2']['name'])
self.ssid_config.append(self.ssid_data['2g']['wpa2']['name'])
self.ssid_prof_config.append(self.profile_data['2g']['wpa2'][self.mode])
self.ssid_config.append(self.ssid_data['2g']['wpa2'][self.mode])
if self.fiveG_eap:
self.child_profiles.append(self.fiveG_eap)
self.ssid_prof_config.append(self.profile_data['5g']['eap']['name'])
self.ssid_config.append(self.ssid_data['5g']['eap']['name'])
self.ssid_prof_config.append(self.profile_data['5g']['eap'][self.mode])
self.ssid_config.append(self.ssid_data['5g']['eap'][self.mode])
if self.twoFourG_eap:
self.child_profiles.append(self.twoFourG_eap)
self.ssid_prof_config.append(self.profile_data['2g']['eap']['name'])
self.ssid_config.append(self.ssid_data['2g']['eap']['name'])
self.ssid_prof_config.append(self.profile_data['2g']['eap'][self.mode])
self.ssid_config.append(self.ssid_data['2g']['eap'][self.mode])
if self.fiveG_wpa:
self.child_profiles.append(self.fiveG_wpa)
self.ssid_prof_config.append(self.profile_data['5g']['wpa']['name'])
self.ssid_config.append(self.ssid_data['5g']['wpa']['name'])
self.ssid_prof_config.append(self.profile_data['5g']['wpa'][self.mode])
self.ssid_config.append(self.ssid_data['5g']['wpa'][self.mode])
if self.twoFourG_wpa:
self.child_profiles.append(self.twoFourG_wpa)
self.ssid_prof_config.append(self.profile_data['2g']['wpa']['name'])
self.ssid_config.append(self.ssid_data['2g']['wpa']['name'])
self.ssid_prof_config.append(self.profile_data['2g']['wpa'][self.mode])
self.ssid_config.append(self.ssid_data['2g']['wpa'][self.mode])
if self.radius_profile is not None:
self.child_profiles.append(self.radius_profile)
# EAP ssid profiles would have been added above if they existed.
name = self.command_line_args.testbed + "-" + self.fw_model + "_bridge"
name = self.command_line_args.testbed + "-" + self.fw_model + "_" + mode
try:
self.create_ap_profile = self.cloud.create_or_update_ap_profile(self.command_line_args.sdk_base_url,
@@ -1335,24 +1325,25 @@ class CreateAPProfiles:
self.child_profiles)
self.test_profile_id = self.create_ap_profile
print("Test Profile ID for Test is:", self.test_profile_id)
self.client.update_testrail(case_id=self.test_cases["ap_bridge"], run_id=self.rid, status_id=1,
msg='AP profile for bridge tests created successfully')
self.test_cases["ap_bridge"] = "passed"
self.client.update_testrail(case_id=self.test_cases["ap_"+mode], run_id=self.rid, status_id=1,
msg='AP profile for ' + mode + ' tests created successfully')
self.test_cases["ap_"+mode] = "passed"
except Exception as ex:
print(ex)
logging.error(logging.traceback.format_exc())
create_ap_profile = "error"
print("Error creating AP profile for bridge tests. Will use existing AP profile")
self.client.update_testrail(case_id=self.test_cases["ap_bridge"], run_id=self.rid, status_id=5,
msg='AP profile for bridge tests could not be created using API')
self.test_cases["ap_bridge"] = "failed"
self.client.update_testrail(case_id=self.test_cases["ap_"+mode], run_id=self.rid, status_id=5,
msg='AP profile for ' + mode + ' tests could not be created using API')
self.test_cases["ap_"+mode] = "failed"
self.ap_profile = self.cloud.set_ap_profile(eq_id, self.test_profile_id, self.command_line_args.sdk_base_url,
self.bearer)
def cleanup_profile(self):
pass
def validate_changes(self):
def validate_changes(self, mode="bridge"):
ssid_list_ok = False
vif_state_ok = False
@@ -1375,23 +1366,23 @@ class CreateAPProfiles:
if set(ssid_list) == set(self.ssid_config):
print("SSIDs in Wifi_VIF_Config Match AP Profile Config")
self.client.update_testrail(case_id=self.test_cases["bridge_vifc"], run_id=self.rid, status_id=1,
self.client.update_testrail(case_id=self.test_cases[mode + "_vifc"], run_id=self.rid, status_id=1,
msg='SSIDs in VIF Config matches AP Profile Config')
self.test_cases["bridge_vifc"] = "passed"
self.test_cases[mode + "_vifc"] = "passed"
ssid_list_ok = True
else:
print("SSIDs in Wifi_VIF_Config do not match desired AP Profile Config")
self.client.update_testrail(case_id=self.test_cases["bridge_vifc"], run_id=self.rid, status_id=5,
self.client.update_testrail(case_id=self.test_cases[mode + "_vifc"], run_id=self.rid, status_id=5,
msg='SSIDs in VIF Config do not match AP Profile Config')
self.test_cases["bridge_vifc"] = "failed"
self.test_cases[mode + "_vifc"] = "failed"
except Exception as ex:
print(ex)
logging.error(logging.traceback.format_exc())
ssid_list = "ERROR"
print("Error accessing VIF Config from AP CLI")
self.client.update_testrail(case_id=self.test_cases["bridge_vifc"], run_id=self.rid, status_id=4,
self.client.update_testrail(case_id=self.test_cases[mode + "_vifc"], run_id=self.rid, status_id=4,
msg='Cannot determine VIF Config - re-test required')
self.test_cases["bridge_vifc"] = "error"
self.test_cases[mode + "_vifc"] = "error"
# VIF State
try:
@@ -1400,22 +1391,22 @@ class CreateAPProfiles:
if set(ssid_state) == set(self.ssid_config):
print("SSIDs properly applied on AP")
self.client.update_testrail(case_id=self.test_cases["bridge_vifs"], run_id=self.rid, status_id=1,
self.client.update_testrail(case_id=self.test_cases[mode + "_vifs"], run_id=self.rid, status_id=1,
msg='SSIDs in VIF Config applied to VIF State')
self.test_cases["bridge_vifs"] = "passed"
self.test_cases[mode + "_vifs"] = "passed"
vif_state_ok = True
else:
print("SSIDs not applied on AP")
self.client.update_testrail(case_id=self.test_cases["bridge_vifs"], run_id=self.rid, status_id=5,
self.client.update_testrail(case_id=self.test_cases[mode + "_vifs"], run_id=self.rid, status_id=5,
msg='SSIDs in VIF Config not applied to VIF State')
self.test_cases["bridge_vifs"] = "failed"
self.test_cases[mode + "_vifs"] = "failed"
except Exception as ex:
print(ex)
logging.error(logging.traceback.format_exc())
ssid_list = "ERROR"
print("Error accessing VIF State from AP CLI")
self.client.update_testrail(case_id=self.test_cases["bridge_vifs"], run_id=self.rid, status_id=4,
self.client.update_testrail(case_id=self.test_cases[mode + "_vifs"], run_id=self.rid, status_id=4,
msg='Cannot determine VIF State - re-test required')
self.test_cases["bridge_vifs"] = "error"
self.test_cases[mode + "_vifs"] = "error"
print("Profiles Created")

View File

@@ -6,9 +6,9 @@
if [ -d ../wlan-lanforge-scripts ]
then
rm -fr libs/lanforge/lanforge-scripts
rm -fr lanforge/lanforge-scripts
cp -ar ../wlan-lanforge-scripts libs/lanforge/lanforge-scripts
cp -ar ../wlan-lanforge-scripts lanforge/lanforge-scripts
fi
if [ -d tests/logs ]
then

View File

@@ -10,18 +10,19 @@ from UnitTestBase import *
class NightlySanity:
def __init__(self, args=None, base=None, lanforge_data=None, Test=None, reporting=None ):
def __init__(self, args=None, base=None, lanforge_data=None, test=None, reporting=None, build=None):
self.args = args
self.model = self.args.model
self.client: TestRail_Client = TestRail_Client(args)
self.logger = base.logger
###Get Cloud Bearer Token
self.rid = None
# Get Cloud Bearer Token
self.cloud: CloudSDK = CloudSDK(args)
cloud_type = "v1"
self.bearer = self.cloud.get_bearer(args.sdk_base_url, cloud_type)
self.customer_id = "2"
self.Test = Test
self.test = test
self.reporting = reporting
self.lanforge_data = lanforge_data
if lanforge_data is None:
@@ -33,10 +34,15 @@ class NightlySanity:
"ecw5410": "ECW5410",
"wf188n": "WF188N"
}
self.jfrog_build = build
self.ap_object = None
self.equipment_id = self.args.equipment_id
self.report_data = dict()
self.ap_cli_info = get_ap_info(self.args)
self.ap_current_fw = self.ap_cli_info['active_fw']
self.report_data = dict()
self.firmware = {}
if self.equipment_id == "-1":
eq_id = ap_ssh_ovsh_nodec(args, 'id')
@@ -55,37 +61,64 @@ class NightlySanity:
print("ERROR: Could not find equipment-id.")
exit()
def configure_dut(self):
def setup(self):
pass
# Check for latest Firmware
latest_fw = self.jfrog_build.check_latest_fw(self.model)
if latest_fw is None:
print("AP Model doesn't match the available Models")
exit()
self.firmware = {
"latest": latest_fw,
"current": self.ap_current_fw
}
def create_test_run_session(self):
today = str(date.today())
case_ids = list(test_cases.values())
projId = self.client.get_project_id(project_name=self.args.testrail_project)
test_run_name = self.args.testrail_run_prefix + self.model + "_" + today + "_" + self.firmware["latest"]
self.client.create_testrun(name=test_run_name, case_ids=case_ids, project_id=projId,
milestone_id=self.args.milestone,
description="Automated Nightly Sanity test run for new firmware build")
self.rid = self.client.get_run_id(
test_run_name=self.args.testrail_run_prefix + self.model + "_" + today + "_" + self.firmware["latest"])
print("TIP run ID is:", self.rid)
# Create Test session
self.create_test_run_session()
def start_test(self, do_upgrade=False):
# Check if AP needs Upgrade
if (self.firmware["current"] is not None) and self.firmware["latest"] != self.firmware["current"]:
do_upgrade = self.cloud.should_upgrade_ap_fw(self.bearer, self.args, self.report_data,
self.firmware["latest"],
self.args.model,
self.firmware["current"], self.logger)
elif (self.firmware["current"] is not None) and self.firmware["latest"] == self.firmware["current"]:
do_upgrade = False
print("AP ia already having Latest Firmware...")
else:
print("Skipping this Profile")
exit()
# Upgrade the Firmware on AP
if do_upgrade:
cloudModel = self.cloud_sdk_models[self.args.model]
cloud_model = self.cloud_sdk_models[self.args.model]
pf = self.cloud.do_upgrade_ap_fw(self.bearer, self.args, self.report_data, test_cases, self.client,
self.firmware["latest"], cloudModel, self.args.model,
self.firmware["latest"], cloud_model, self.args.model,
self.args.jfrog_user_id, self.args.jfrog_user_password, self.rid,
self.customer_id, self.equipment_id, self.logger)
print(self.report_data)
if not pf:
exit()
return self.firmware
def create_test_run_session(self):
today = str(date.today())
case_ids = list(test_cases.values())
proj_id = self.client.get_project_id(project_name=self.args.testrail_project)
test_run_name = self.args.testrail_run_prefix + self.model + "_" + today + "_" + self.firmware["latest"]
self.client.create_testrun(name=test_run_name, case_ids=case_ids, project_id=proj_id,
milestone_id=self.args.milestone,
description="Automated Nightly Sanity test run for new firmware build")
self.rid = self.client.get_run_id(test_run_name=self.args.testrail_run_prefix + self.model + "_" + today + "_" + self.firmware["latest"])
print("TIP run ID is:", self.rid)
def start_test(self):
if True:
###Check AP Manager Status
# Check AP Manager Status
manager_status = self.ap_cli_info['state']
print(manager_status)
@@ -98,7 +131,7 @@ class NightlySanity:
if manager_status != "active":
print("Manager status is", manager_status, "! Not connected to the cloud.")
print("Manager status fails multiple checks - failing test case.")
##fail cloud connectivity testcase
# fail cloud connectivity testcase
self.client.update_testrail(case_id=self.test_cases["cloud_connection"], run_id=self.rid,
status_id=5,
msg='CloudSDK connectivity failed')
@@ -127,15 +160,14 @@ class NightlySanity:
self.ap_object = CreateAPProfiles(self.args, cloud=self.cloud, client=self.client, fw_model=self.model)
# Logic to create AP Profiles (Bridge Mode)
self.ap_object.set_ssid_psk_data\
(ssid_2g_wpa="Nightly-SSID-2G-WPA",
ssid_5g_wpa="Nightly-SSID-5G-WPA",
psk_2g_wpa= "Nightly_2g_wpa",
psk_5g_wpa="Nightly_5g_wpa",
ssid_2g_wpa2="Nightly-SSID-2G-WPA2",
ssid_5g_wpa2="Nightly-SSID-5G-WPA2",
psk_2g_wpa2="Nightly_2g_wpa2",
psk_5g_wpa2="Nightly_5g_wpa2")
self.ap_object.set_ssid_psk_data(ssid_2g_wpa="Nightly-SSID-2G-WPA",
ssid_5g_wpa="Nightly-SSID-5G-WPA",
psk_2g_wpa="Nightly_2g_wpa",
psk_5g_wpa="Nightly_5g_wpa",
ssid_2g_wpa2="Nightly-SSID-2G-WPA2",
ssid_5g_wpa2="Nightly-SSID-5G-WPA2",
psk_2g_wpa2="Nightly_2g_wpa2",
psk_5g_wpa2="Nightly_5g_wpa2")
print("creating Profiles")
ssid_template = "TipWlan-Cloud-Wifi"
@@ -145,33 +177,29 @@ class NightlySanity:
# Radius Profile needs to be set here
# obj.create_radius_profile(radius_name, rid, key)
pass
self.ap_object.create_ssid_profiles(ssid_template=ssid_template, skip_eap=True)
self.ap_object.create_ssid_profiles(ssid_template=ssid_template, skip_eap=True, mode="bridge")
print("Create AP with equipment-id: ", self.equipment_id)
self.ap_object.create_ap_bridge_profile(eq_id=self.equipment_id, fw_model=self.model)
self.ap_object.validate_changes()
self.ap_object.create_ap_bridge_profile(eq_id=self.equipment_id, fw_model=self.model, mode="bridge")
self.ap_object.validate_changes(mode="bridge")
print("Profiles Created")
self.test_bridge_mode_2g()
self.test_bridge_mode_5g()
# Logic to check Single client Connectivity for EAP
# Logic to check Single client Connectivity for WPA
# Logic to check Single client Connectivity for WPA2
self.test_2g(mode="bridge")
self.test_5g(mode="bridge")
time.sleep(10)
self.reporting.update_json_report(report_data=self.ap_object.report_data)
# Logic to create AP Profiles (NAT Mode)
self.ap_object.set_ssid_psk_data\
(ssid_2g_wpa="Nightly-SSID-NAT-2G-WPA",
ssid_5g_wpa="Nightly-SSID-NAT-5G-WPA",
psk_2g_wpa= "Nightly_2g_nat_wpa",
psk_5g_wpa="Nightly_5g_nat_wpa",
ssid_2g_wpa2="Nightly-SSID-NAT-2G-WPA2",
ssid_5g_wpa2="Nightly-SSID-NAT-5G-WPA2",
psk_2g_wpa2="Nightly_2g_nat_wpa2",
psk_5g_wpa2="Nightly_5g_nat_wpa2")
self.ap_object.set_ssid_psk_data(ssid_2g_wpa="Nightly-SSID-NAT-2G-WPA",
ssid_5g_wpa="Nightly-SSID-NAT-5G-WPA",
psk_2g_wpa="Nightly_2g_nat_wpa",
psk_5g_wpa="Nightly_5g_nat_wpa",
ssid_2g_wpa2="Nightly-SSID-NAT-2G-WPA2",
ssid_5g_wpa2="Nightly-SSID-NAT-5G-WPA2",
psk_2g_wpa2="Nightly_2g_nat_wpa2",
psk_5g_wpa2="Nightly_5g_nat_wpa2")
print("creating Profiles")
ssid_template = "TipWlan-Cloud-Wifi"
@@ -181,14 +209,16 @@ class NightlySanity:
# Radius Profile needs to be set here
# obj.create_radius_profile(radius_name, rid, key)
pass
self.ap_object.create_ssid_profiles(ssid_template=ssid_template, skip_eap=True)
self.ap_object.create_ssid_profiles(ssid_template=ssid_template, skip_eap=True, mode="nat")
print("Create AP with equipment-id: ", self.equipment_id)
self.ap_object.create_ap_bridge_profile(eq_id=self.equipment_id, fw_model=self.model)
self.ap_object.validate_changes()
self.ap_object.create_ap_bridge_profile(eq_id=self.equipment_id, fw_model=self.model, mode="nat")
self.ap_object.validate_changes(mode="nat")
self.test_2g(mode="nat")
self.test_5g(mode="nat")
time.sleep(10)
self.reporting.update_json_report(report_data=self.ap_object.report_data)
def setup_report(self):
@@ -211,56 +241,103 @@ class NightlySanity:
self.reporting.update_json_report(report_data=self.report_data)
def check_fw(self, jfrog=None):
def test_2g(self, mode="bridge"):
# This can be kept as a global dictionary
ap_latest_dict = {
"ec420": "Unknown",
"ea8300": "Unknown",
"ecw5211": "unknown",
"ecw5410": "unknown"
}
self.ap_latest_dict = check_latest_fw(jfrog=jfrog,
ap_latest_dict=ap_latest_dict,
buildid=self.args.build_id)
try:
self.ap_cli_info = get_ap_info(self.args)
self.ap_current_fw = self.ap_cli_info['active_fw']
except Exception as ex:
print(ex)
self.ap_current_fw = None
logging.error(logging.traceback.format_exc())
ap_cli_info = "ERROR"
print("Cannot Reach AP CLI, will not test this variant");
self.firmware = {
"latest": self.ap_latest_dict[self.args.model],
"current": self.ap_current_fw
}
return self.firmware
# lanforge = {
# "ip": command_line_args.lanforge_ip_address,
# "port": command_line_args.lanforge_port_number,
# "prefix": command_line_args.lanforge_prefix,
# "2g_radio": command_line_args.lanforge_2g_radio,
# "5g_radio": command_line_args.lanforge_5g_radio
# }
# dev complete
def test_bridge_mode_2g(self):
if mode == "bridge":
mode_a = "name"
if mode == "nat":
mode_a = "nat"
if not self.args.skip_radius:
###Run Client Single Connectivity Test Cases for Bridge SSIDs
# Run Client Single Connectivity Test Cases for Bridge SSIDs
# TC5214 - 2.4 GHz WPA2-Enterprise
test_case = test_cases["2g_eap_bridge"]
test_case = test_cases["2g_eap_" + mode]
radio = lanforge_2g_radio
sta_list = [lanforge_prefix + "5214"]
ssid_name = ssid_2g_eap;
security = "wpa2"
eap_type = "TTLS"
try:
test_result = self.Test.Single_Client_EAP(port, sta_list, ssid_name, radio, security, eap_type,
test_result = self.test.Single_Client_EAP(port, sta_list, ssid_name, radio, security, eap_type,
identity, ttls_password, test_case, rid, client, logger)
except:
test_result = "error"
self.test.testrail_retest(test_case, rid, ssid_name, client, logger)
pass
report_data['tests'][key][int(test_case)] = test_result
print(report_data['tests'][key])
time.sleep(10)
# Run Client Single Connectivity Test Cases for Bridge SSIDs
# TC - 2.4 GHz WPA2
test_case = test_cases["2g_wpa2_" + mode]
station = [self.lanforge_data['prefix'] + "2237"]
ssid_name = self.ap_object.ssid_data['2g']['wpa2'][mode_a]
ssid_psk = self.ap_object.psk_data['2g']['wpa2'][mode_a]
security = "wpa2"
upstream_port = "eth2"
print(self.lanforge_data['port'])
try:
test_result = self.test.Single_Client_Connectivity(upstream_port=upstream_port,
radio=self.lanforge_data['2g_radio'],
ssid=ssid_name,
passkey=ssid_psk,
security=security,
station_name=station, test_case=test_case, rid=self.rid,
client=self.client, logger=self.logger)
except:
test_result = "error"
self.test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger)
pass
self.report_data['tests'][self.model][int(test_case)] = test_result
print(self.report_data['tests'][self.model])
time.sleep(10)
# TC - 2.4 GHz WPA
test_case = test_cases["2g_wpa_" + mode]
station = [self.lanforge_data['prefix'] + "2420"]
ssid_name = self.ap_object.ssid_data['2g']['wpa'][mode_a]
ssid_psk = self.ap_object.psk_data['2g']['wpa'][mode_a]
security = "wpa"
upstream_port = "eth2"
print(self.lanforge_data['port'])
try:
test_result = self.test.Single_Client_Connectivity(upstream_port=upstream_port,
radio=self.lanforge_data['2g_radio'],
ssid=ssid_name,
passkey=ssid_psk,
security=security,
station_name=station, test_case=test_case, rid=self.rid,
client=self.client, logger=self.logger)
except:
test_result = "error"
self.test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger)
pass
self.report_data['tests'][self.model][int(test_case)] = test_result
print(self.report_data['tests'][self.model])
time.sleep(10)
def test_5g(self, mode="bridge"):
if mode == "bridge":
mode_a = "name"
if mode == "nat":
mode_a = "nat"
if not self.args.skip_radius:
# TC - 5 GHz WPA2-Enterprise
test_case = self.test_cases["5g_eap_" + mode]
radio = lanforge_5g_radio
sta_list = [lanforge_prefix + "5215"]
ssid_name = ssid_5g_eap
security = "wpa2"
eap_type = "TTLS"
try:
test_result = Test.Single_Client_EAP(port, sta_list, ssid_name, radio, security, eap_type,
identity, ttls_password, test_case, rid, client, logger)
except:
test_result = "error"
@@ -271,90 +348,15 @@ class NightlySanity:
time.sleep(10)
###Run Client Single Connectivity Test Cases for Bridge SSIDs
# TC - 2.4 GHz WPA2
test_case = test_cases["2g_wpa2_bridge"]
station = [self.lanforge_data['prefix'] + "2237"]
ssid_name = self.ap_object.ssid_data['2g']['wpa2']['name']
ssid_psk = self.ap_object.psk_data['2g']['wpa2']['name']
security = "wpa2"
upstream_port = "eth2"
print(self.lanforge_data['port'])
try:
test_result = self.Test.Single_Client_Connectivity(upstream_port=upstream_port,
radio=self.lanforge_data['2g_radio'],
ssid=ssid_name,
passkey=ssid_psk,
security=security,
station_name=station, test_case=test_case, rid=self.rid, client=self.client, logger=self.logger)
except:
test_result = "error"
self.Test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger)
pass
self.report_data['tests'][self.model][int(test_case)] = test_result
print(self.report_data['tests'][self.model])
time.sleep(10)
# TC - 2.4 GHz WPA
test_case = test_cases["2g_wpa_bridge"]
station = [self.lanforge_data['prefix'] + "2420"]
ssid_name = self.ap_object.ssid_data['2g']['wpa']['name']
ssid_psk = self.ap_object.psk_data['2g']['wpa']['name']
security = "wpa"
upstream_port = "eth2"
print(self.lanforge_data['port'])
try:
test_result = self.Test.Single_Client_Connectivity(upstream_port=upstream_port,
radio=self.lanforge_data['2g_radio'],
ssid=ssid_name,
passkey=ssid_psk,
security=security,
station_name=station, test_case=test_case, rid=self.rid,
client=self.client, logger=self.logger)
except:
test_result = "error"
self.Test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger)
pass
self.report_data['tests'][self.model][int(test_case)] = test_result
print(self.report_data['tests'][self.model])
time.sleep(10)
# dev complete
def test_bridge_mode_5g(self):
if not self.args.skip_radius:
# TC - 5 GHz WPA2-Enterprise
test_case = self.test_cases["5g_eap_bridge"]
radio = lanforge_5g_radio
sta_list = [lanforge_prefix+"5215"]
ssid_name = ssid_5g_eap
security = "wpa2"
eap_type = "TTLS"
try:
test_result = Test.Single_Client_EAP(port, sta_list, ssid_name, radio, security, eap_type,
identity, ttls_password, test_case, rid, client, logger)
except:
test_result = "error"
Test.testrail_retest(test_case, rid, ssid_name, client, logger)
pass
report_data['tests'][key][int(test_case)] = test_result
print(report_data['tests'][key])
time.sleep(10)
# TC 5 GHz WPA2
test_case = test_cases["5g_wpa2_bridge"]
test_case = test_cases["5g_wpa2_" + mode]
station = [self.lanforge_data['prefix'] + "2236"]
ssid_name = self.ap_object.ssid_data['5g']['wpa2']['name']
ssid_psk = self.ap_object.psk_data['5g']['wpa2']['name']
ssid_name = self.ap_object.ssid_data['5g']['wpa2'][mode_a]
ssid_psk = self.ap_object.psk_data['5g']['wpa2'][mode_a]
security = "wpa2"
upstream_port = "eth2"
try:
test_result = self.Test.Single_Client_Connectivity(upstream_port=upstream_port,
test_result = self.test.Single_Client_Connectivity(upstream_port=upstream_port,
radio=self.lanforge_data['5g_radio'],
ssid=ssid_name,
passkey=ssid_psk,
@@ -363,7 +365,7 @@ class NightlySanity:
client=self.client, logger=self.logger)
except:
test_result = "error"
self.Test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger)
self.test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger)
pass
self.report_data['tests'][self.model][int(test_case)] = test_result
print(self.report_data['tests'][self.model])
@@ -371,14 +373,14 @@ class NightlySanity:
time.sleep(10)
# # TC - 5 GHz WPA
test_case = test_cases["5g_wpa_bridge"]
station = [self.lanforge_data['prefix']+"2419"]
ssid_name = self.ap_object.ssid_data['5g']['wpa']['name']
ssid_psk = self.ap_object.psk_data['5g']['wpa']['name']
test_case = test_cases["5g_wpa_" + mode]
station = [self.lanforge_data['prefix'] + "2419"]
ssid_name = self.ap_object.ssid_data['5g']['wpa'][mode_a]
ssid_psk = self.ap_object.psk_data['5g']['wpa'][mode_a]
security = "wpa"
upstream_port = "eth2"
try:
test_result = self.Test.Single_Client_Connectivity(upstream_port=upstream_port,
test_result = self.test.Single_Client_Connectivity(upstream_port=upstream_port,
radio=self.lanforge_data['5g_radio'],
ssid=ssid_name,
passkey=ssid_psk,
@@ -387,24 +389,13 @@ class NightlySanity:
client=self.client, logger=self.logger)
except:
test_result = "error"
self.Test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger)
self.test.testrail_retest(test_case, self.rid, ssid_name, self.client, self.logger)
pass
self.report_data['tests'][self.model][int(test_case)] = test_result
print(self.report_data['tests'][self.model])
time.sleep(10)
pass
def test_nat_mode(self):
pass
def test_vlan_mode(self):
pass
def main():
parser = argparse.ArgumentParser(description="Nightly Combined Tests", add_help=False)
@@ -427,36 +418,37 @@ def main():
command_line_args = base.command_line_args
# cmd line takes precedence over env-vars.
cloudSDK_url = command_line_args.sdk_base_url # was os.getenv('CLOUD_SDK_URL')
cloudsdk_url = command_line_args.sdk_base_url # was os.getenv('CLOUD_SDK_URL')
local_dir = command_line_args.local_dir # was os.getenv('SANITY_LOG_DIR')
report_path = command_line_args.report_path # was os.getenv('SANITY_REPORT_DIR')
report_template = command_line_args.report_template # was os.getenv('REPORT_TEMPLATE')
## TestRail Information
# TestRail Information
tr_user = command_line_args.testrail_user_id # was os.getenv('TR_USER')
tr_pw = command_line_args.testrail_user_password # was os.getenv('TR_PWD')
milestoneId = command_line_args.milestone # was os.getenv('MILESTONE')
projectId = command_line_args.testrail_project # was os.getenv('PROJECT_ID')
testRunPrefix = command_line_args.testrail_run_prefix # os.getenv('TEST_RUN_PREFIX')
milestone_id = command_line_args.milestone # was os.getenv('MILESTONE')
project_id = command_line_args.testrail_project # was os.getenv('PROJECT_ID')
test_run_prefix = command_line_args.testrail_run_prefix # os.getenv('TEST_RUN_PREFIX')
##Jfrog credentials
# Jfrog credentials
jfrog = {
"user": command_line_args.jfrog_user_id, # was os.getenv('JFROG_USER')
"pass": command_line_args.jfrog_user_password # was os.getenv('JFROG_PWD')
}
##EAP Credentials
# EAP Credentials
eap_cred = {
"identity": command_line_args.eap_id,
"ttls_password": command_line_args.ttls_password
}
## AP Credentials
# AP Credentials
ap_cred = {
"username": command_line_args.ap_username
}
##LANForge Information
# LANForge Information
lanforge = {
"ip": command_line_args.lanforge_ip_address,
"port": command_line_args.lanforge_port_number,
@@ -470,55 +462,31 @@ def main():
logger = base.logger
hdlr = base.hdlr
if command_line_args.testbed == None:
if command_line_args.testbed is None:
print("ERROR: Must specify --testbed argument for this test.")
sys.exit(1)
print("Start of Sanity Testing...")
print("Testing Latest Build with Tag: " + build)
if command_line_args.skip_upgrade == True:
if command_line_args.skip_upgrade:
print("Will skip upgrading AP firmware...")
######Testrail Project and Run ID Information ##############################
# Testrail Project and Run ID Information
Test = RunTest(lanforge_ip=lanforge["ip"], lanforge_port=lanforge["port"], lanforge_prefix=lanforge["prefix"])
test = RunTest(lanforge_ip=lanforge["ip"], lanforge_port=lanforge["port"], lanforge_prefix=lanforge["prefix"])
build_obj = GetBuild(jfrog['user'], jfrog['pass'], build)
# sanity_status = json.load(open("sanity_status.json"))
obj = NightlySanity(args=command_line_args, base=base, lanforge_data=lanforge, Test=Test, reporting=reporting)
obj = NightlySanity(args=command_line_args, base=base, lanforge_data=lanforge, Test=test, reporting=reporting,
build=build_obj)
obj.configure_dut()
projId = obj.client.get_project_id(project_name=projectId)
print("TIP WLAN Project ID is:", projId)
proj_id = obj.client.get_project_id(project_name=project_id)
print("TIP WLAN Project ID is:", proj_id)
logger.info('Start of Nightly Sanity')
# get latest revision
firmware = obj.check_fw(jfrog=jfrog)
report_data = dict()
# Check is current fw is there else will skip this variant test
if (firmware["current"] is not None) and firmware["latest"] != firmware["current"]:
do_upgrade = obj.cloud.should_upgrade_ap_fw(obj.bearer, obj.args, report_data, firmware["latest"],
command_line_args.model,
firmware["current"], logger)
elif (firmware["current"] is not None) and firmware["latest"] == firmware["current"]:
do_upgrade = False
print("AP ia already having Latest Firmware...")
else:
print("Skipping this Profile")
exit()
# exit()
# Test till here to verify all connectivity with cloud and ap and fe upgrade logics
# Create session for Test
obj.create_test_run_session()
# Setup Reporting
obj.setup_report()
# Start Test
obj.start_test(do_upgrade=do_upgrade)
obj.start_test()
if __name__ == "__main__":

View File

@@ -1,14 +1,16 @@
#!/usr/bin/python3
import sys
if sys.version_info[0] != 3:
print("This script requires Python 3")
exit(1)
import sys
for folder in 'py-json', 'py-scripts':
if folder not in sys.path:
sys.path.append(f'../libs/lanforge/lanforge-scripts/{folder}')
sys.path.append(f'../lanforge/lanforge-scripts/{folder}')
sys.path.append(f'../libs/lanforge')
sys.path.append(f'../libs/testrails')
@@ -58,14 +60,11 @@ import glob
# external_results_dir=/var/tmp/lanforge
# To run this from your home system to NOLA-01 testbed, use this command.
# This assumes you have set up an ssh tunnel logged to the cicd jumphost that can
# reach the lab.
# In separate console to set up the ssh tunnel:
#ssh -C -L 7220:lab-ctlr:22 ubuntu@3.130.51.163
# On local machine:
#./query_ssids.py --testrail-user-id NONE --model ecw5410 --ap-jumphost-address localhost --ap-jumphost-port 7220 --ap-jumphost-password secret --ap-jumphost-tty /dev/ttyAP1
# To run this from your home system to NOLA-01 testbed, use this command. This assumes you have set up an ssh tunnel
# logged to the cicd jumphost that can reach the lab. In separate console to set up the ssh tunnel: ssh -C -L
# 7220:lab-ctlr:22 ubuntu@3.130.51.163 On local machine:
# ./query_ssids.py --testrail-user-id NONE --model ecw5410
# --ap-jumphost-address localhost --ap-jumphost-port 7220 --ap-jumphost-password secret --ap-jumphost-tty /dev/ttyAP1
import testrail_api
@@ -86,7 +85,7 @@ from cloudsdk import CreateAPProfiles
import ap_ssh
from ap_ssh import *
##Import info for lab setup and APs under test
# Import info for lab setup and APs under test
import lab_ap_info
from lab_ap_info import cloud_sdk_models
from lab_ap_info import ap_models
@@ -95,34 +94,38 @@ from lab_ap_info import cloud_type
from lab_ap_info import test_cases
from lab_ap_info import radius_info
class UnitTestBase:
def __init__(self, log_name, args, reporting):
self.parser = argparse.ArgumentParser(description="Sanity Testing on Firmware Build", parents=[args])
self.parser.add_argument("-b", "--build-id", type=str, help="FW commit ID (latest pending build on dev is default)",
default = "pending")
self.parser.add_argument("-b", "--build-id", type=str,
help="FW commit ID (latest pending build on dev is default)",
default="pending")
self.parser.add_argument("--skip-upgrade", type=bool, help="Skip upgrading firmware",
default = False)
self.parser.add_argument("--force-upgrade", type=bool, help="Force upgrading firmware even if it is already current version",
default = False)
self.parser.add_argument("-m", "--model", type=str, choices=['ea8300', 'ecw5410', 'ecw5211', 'ec420', 'wf188n', 'None'],
help="AP model to be run", required=True)
default=False)
self.parser.add_argument("--force-upgrade", type=bool,
help="Force upgrading firmware even if it is already current version",
default=False)
self.parser.add_argument("-m", "--model", type=str,
choices=['ea8300', 'ecw5410', 'ecw5211', 'ec420', 'wf188n', 'None'],
help="AP model to be run", required=True)
self.parser.add_argument("--equipment_id", type=str,
help="AP model ID, as exists in the cloud-sdk. -1 to auto-detect.",
default = "-1")
default="-1")
self.parser.add_argument("--object_id", type=str,
help="Used when querying and deleting individual objects.",
default = None)
default=None)
self.parser.add_argument("--customer-id", type=str,
help="Specify cloud customer-id, default is 2",
default = "2")
default="2")
self.parser.add_argument("--testbed", type=str,
help="Testbed name, will be prefixed to profile names and similar",
default = None)
default=None)
self.parser.add_argument("--sdk-base-url", type=str, help="cloudsdk base url, default: https://wlan-portal-svc.cicd.lab.wlan.tip.build",
self.parser.add_argument("--sdk-base-url", type=str,
help="cloudsdk base url, default: https://wlan-portal-svc.cicd.lab.wlan.tip.build",
default="https://wlan-portal-svc.cicd.lab.wlan.tip.build")
self.parser.add_argument("--sdk-user-id", type=str, help="cloudsdk user id, default: support@example.conf",
default="support@example.com")
@@ -130,66 +133,72 @@ class UnitTestBase:
default="support")
self.parser.add_argument("--jfrog-base-url", type=str, help="jfrog base url",
default="tip.jFrog.io/artifactory/tip-wlan-ap-firmware")
default="tip.jFrog.io/artifactory/tip-wlan-ap-firmware")
self.parser.add_argument("--jfrog-user-id", type=str, help="jfrog user id",
default="tip-read")
default="tip-read")
self.parser.add_argument("--jfrog-user-password", type=str, help="jfrog user password",
default="tip-read")
default="tip-read")
self.parser.add_argument("--testrail-base-url", type=str, help="testrail base url", # was os.getenv('TESTRAIL_URL')
default="https://telecominfraproject.testrail.com")
self.parser.add_argument("--testrail-base-url", type=str, help="testrail base url",
# was os.getenv('TESTRAIL_URL')
default="https://telecominfraproject.testrail.com")
self.parser.add_argument("--testrail-project", type=str, help="testrail project name",
default="opsfleet-wlan")
self.parser.add_argument("--testrail-user-id", type=str, help="testrail user id. Use 'NONE' to disable use of testrails.",
default="gleb@opsfleet.com")
default="opsfleet-wlan")
self.parser.add_argument("--testrail-user-id", type=str,
help="testrail user id. Use 'NONE' to disable use of testrails.",
default="gleb@opsfleet.com")
self.parser.add_argument("--testrail-user-password", type=str, help="testrail user password",
default="password")
default="password")
self.parser.add_argument("--testrail-run-prefix", type=str, help="testrail run prefix",
default="prefix-1")
default="prefix-1")
self.parser.add_argument("--milestone", type=str, help="testrail milestone ID",
default="milestone-1")
default="milestone-1")
self.parser.add_argument("--lanforge-ip-address", type=str, help="ip address of the lanforge gui",
default="127.0.0.1")
default="127.0.0.1")
self.parser.add_argument("--lanforge-port-number", type=str, help="port of the lanforge gui",
default="8080")
default="8080")
self.parser.add_argument("--lanforge-prefix", type=str, help="LANforge api prefix string",
default="sdk")
default="sdk")
self.parser.add_argument("--lanforge-2g-radio", type=str, help="LANforge 2Ghz radio to use for testing",
default="1.1.wiphy0")
default="1.1.wiphy0")
self.parser.add_argument("--lanforge-5g-radio", type=str, help="LANforge 5Ghz radio to use for testing",
default="1.1.wiphy1")
default="1.1.wiphy1")
self.parser.add_argument("--local_dir", type=str, help="Sanity logging directory",
default="logs")
default="logs")
self.parser.add_argument("--report-path", type=str, help="Sanity report directory",
default="reports")
default="reports")
self.parser.add_argument("--report-template", type=str, help="Sanity report template",
default="reports/report_template.php")
default="reports/report_template.php")
self.parser.add_argument("--eap-id", type=str, help="EAP indentity",
default="lanforge")
default="lanforge")
self.parser.add_argument("--ttls-password", type=str, help="TTLS password",
default="lanforge")
default="lanforge")
self.parser.add_argument("--ap-ip", type=str, help="AP IP Address, for direct ssh access if not using jumphost",
default="127.0.0.1")
default="127.0.0.1")
self.parser.add_argument("--ap-username", type=str, help="AP username",
default="root")
default="root")
self.parser.add_argument("--ap-password", type=str, help="AP password",
default="root")
self.parser.add_argument("--ap-jumphost-address", type=str, help="IP of system that we can ssh in to get serial console access to AP",
default=None)
self.parser.add_argument("--ap-jumphost-port", type=str, help="SSH port to use in case we are using ssh tunneling or other non-standard ports",
default="22")
self.parser.add_argument("--ap-jumphost-username", type=str, help="User-ID for system that we can ssh in to get serial console access to AP",
default="lanforge")
self.parser.add_argument("--ap-jumphost-password", type=str, help="Passwort for system that we can ssh in to get serial console access to AP",
default="lanforge")
default="root")
self.parser.add_argument("--ap-jumphost-address", type=str,
help="IP of system that we can ssh in to get serial console access to AP",
default=None)
self.parser.add_argument("--ap-jumphost-port", type=str,
help="SSH port to use in case we are using ssh tunneling or other non-standard ports",
default="22")
self.parser.add_argument("--ap-jumphost-username", type=str,
help="User-ID for system that we can ssh in to get serial console access to AP",
default="lanforge")
self.parser.add_argument("--ap-jumphost-password", type=str,
help="Passwort for system that we can ssh in to get serial console access to AP",
default="lanforge")
self.parser.add_argument("--ap-jumphost-wlan-testing", type=str, help="wlan-testing repo dir on the jumphost",
default="git/wlan-testing")
default="git/wlan-testing")
self.parser.add_argument("--ap-jumphost-tty", type=str, help="Serial port for the AP we wish to talk to",
default="UNCONFIGURED-JUMPHOST-TTY")
default="UNCONFIGURED-JUMPHOST-TTY")
self.parser.add_argument('--skip-update-firmware', dest='update_firmware', action='store_false')
self.parser.set_defaults(update_firmware=True)
@@ -200,28 +209,28 @@ class UnitTestBase:
self.command_line_args = self.parser.parse_args()
# cmd line takes precedence over env-vars.
self.cloudSDK_url = self.command_line_args.sdk_base_url # was os.getenv('CLOUD_SDK_URL')
self.local_dir = self.command_line_args.local_dir # was os.getenv('SANITY_LOG_DIR')
self.report_path = self.command_line_args.report_path # was os.getenv('SANITY_REPORT_DIR')
self.cloudSDK_url = self.command_line_args.sdk_base_url # was os.getenv('CLOUD_SDK_URL')
self.local_dir = self.command_line_args.local_dir # was os.getenv('SANITY_LOG_DIR')
self.report_path = self.command_line_args.report_path # was os.getenv('SANITY_REPORT_DIR')
self.report_template = self.command_line_args.report_template # was os.getenv('REPORT_TEMPLATE')
## TestRail Information
self.tr_user = self.command_line_args.testrail_user_id # was os.getenv('TR_USER')
self.tr_pw = self.command_line_args.testrail_user_password # was os.getenv('TR_PWD')
self.milestoneId = self.command_line_args.milestone # was os.getenv('MILESTONE')
self.projectId = self.command_line_args.testrail_project # was os.getenv('PROJECT_ID')
self.testRunPrefix = self.command_line_args.testrail_run_prefix # os.getenv('TEST_RUN_PREFIX')
self.tr_user = self.command_line_args.testrail_user_id # was os.getenv('TR_USER')
self.tr_pw = self.command_line_args.testrail_user_password # was os.getenv('TR_PWD')
self.milestoneId = self.command_line_args.milestone # was os.getenv('MILESTONE')
self.projectId = self.command_line_args.testrail_project # was os.getenv('PROJECT_ID')
self.testRunPrefix = self.command_line_args.testrail_run_prefix # os.getenv('TEST_RUN_PREFIX')
##Jfrog credentials
self.jfrog_user = self.command_line_args.jfrog_user_id # was os.getenv('JFROG_USER')
self.jfrog_pwd = self.command_line_args.jfrog_user_password # was os.getenv('JFROG_PWD')
self.jfrog_user = self.command_line_args.jfrog_user_id # was os.getenv('JFROG_USER')
self.jfrog_pwd = self.command_line_args.jfrog_user_password # was os.getenv('JFROG_PWD')
##EAP Credentials
self.identity = self.command_line_args.eap_id # was os.getenv('EAP_IDENTITY')
self.ttls_password = self.command_line_args.ttls_password # was os.getenv('EAP_PWD')
self.identity = self.command_line_args.eap_id # was os.getenv('EAP_IDENTITY')
self.ttls_password = self.command_line_args.ttls_password # was os.getenv('EAP_PWD')
## AP Credentials
self.ap_username = self.command_line_args.ap_username # was os.getenv('AP_USER')
self.ap_username = self.command_line_args.ap_username # was os.getenv('AP_USER')
##LANForge Information
self.lanforge_ip = self.command_line_args.lanforge_ip_address

View File

@@ -1,9 +1,9 @@
import os
from datetime import date, datetime
from shutil import copyfile
import json
class Reporting:
def __init__(self, reports_root="../reports/"):
@@ -11,7 +11,7 @@ class Reporting:
self.reports_root = reports_root
self.report_id = self.create_report_id()
self.report_path = self.reports_root + self.report_id
self.templates_root = os.path.abspath(self.reports_root+"../templates")
self.templates_root = os.path.abspath(self.reports_root + "../templates")
try:
os.mkdir(self.report_path)
print("Successfully created the directory %s " % self.report_path)
@@ -23,10 +23,9 @@ class Reporting:
except:
print("No report template created. Report data will still be saved. Continuing with tests...")
def create_report_id(self):
today = str(date.today())
now = str(datetime.now()).split(" ")[1].split(".")[0].replace(":","-")
now = str(datetime.now()).split(" ")[1].split(".")[0].replace(":", "-")
id = today + "-" + now
return id
@@ -38,15 +37,10 @@ class Reporting:
except Exception as e:
print(e)
def update_report_instance(self):
pass
def cleanup_report_instance(self):
pass
def main():
Reporting()
if __name__ == '__main__':
main()