lf_check.py : white space only , pep8 (line length 150)

Signed-off-by: Chuck SmileyRekiere <chuck.smileyrekiere@candelatech.com>
This commit is contained in:
Chuck SmileyRekiere
2021-10-12 11:01:44 -06:00
parent 346fa3f78d
commit 3da1b702c2

View File

@@ -7,10 +7,11 @@ PURPOSE: lf_check.py run tests based on test rig json input, test dut json input
EXAMPLE: EXAMPLE:
./lf_check.py --json_rig <test rig json> --json_dut <dut_json> --json_test <tests json> --test_suite <suite_name> --path <path to results and db, db table> ./lf_check.py --json_rig <rig_json> --json_dut <dut_json> --json_test <tests json> --test_suite <suite_name> --path <path to results>
./lf_check.py --json_rig <test rig json> --json_dut <dut_json> --json_test <tests json> --test_suite <suite_name> --path <path to results> --production ./lf_check.py --json_rig <rig_json> --json_dut <dut_json> --json_test <tests json> --test_suite <suite_name> --path <path to results> --production
./lf_check.py --json_rig ct_us_001_rig.json --json_dut ct_001_AX88U_dut.json --json_test ct_us_001_tests.json --suite "suite_wc_dp" --path '/home/lanforge/html-reports/ct-us-001' ./lf_check.py --json_rig ct_us_001_rig.json --json_dut ct_001_AX88U_dut.json
--json_test ct_us_001_tests.json --suite "suite_wc_dp" --path '/home/lanforge/html-reports/ct-us-001'
rig is the LANforge rig is the LANforge
@@ -86,6 +87,7 @@ Starting LANforge:
''' '''
import datetime import datetime
import sys import sys
import traceback import traceback
@@ -112,7 +114,7 @@ import requests
dir_path = os.path.dirname(os.path.realpath(__file__)) dir_path = os.path.dirname(os.path.realpath(__file__))
parent_dir_path = os.path.abspath(os.path.join(dir_path, os.pardir)) parent_dir_path = os.path.abspath(os.path.join(dir_path, os.pardir))
sys.path.insert(0, parent_dir_path) sys.path.insert(0, parent_dir_path)
# NOTE leave this line here for now
from lf_report import lf_report from lf_report import lf_report
sys.path.append('/') sys.path.append('/')
@@ -177,7 +179,6 @@ class lf_check():
self.lf_mgr_pass = "lanforge" self.lf_mgr_pass = "lanforge"
self.upstream_port = "" self.upstream_port = ""
# results # results
self.database_sqlite = "" self.database_sqlite = ""
self.test_start_time = "" self.test_start_time = ""
@@ -244,12 +245,15 @@ class lf_check():
self.lf_mgr_user = "lanforge" self.lf_mgr_user = "lanforge"
self.lf_mgr_pass = "lanforge" self.lf_mgr_pass = "lanforge"
''' '''
def get_lanforge_radio_information(self): def get_lanforge_radio_information(self):
# https://docs.python-requests.org/en/latest/ # https://docs.python-requests.org/en/latest/
# https://stackoverflow.com/questions/26000336/execute-curl-command-within-a-python-script - use requests # https://stackoverflow.com/questions/26000336/execute-curl-command-within-a-python-script - use requests
# curl --user "lanforge:lanforge" -H 'Accept: application/json' http://192.168.100.116:8080/radiostatus/all | json_pp , where --user "USERNAME:PASSWORD" # curl --user "lanforge:lanforge" -H 'Accept: application/json'
request_command = 'http://{lfmgr}:{port}/radiostatus/all'.format(lfmgr=self.lf_mgr_ip,port=self.lf_mgr_port) # http://192.168.100.116:8080/radiostatus/all | json_pp , where --user
request = requests.get(request_command, auth=(self.lf_mgr_user,self.lf_mgr_pass)) # "USERNAME:PASSWORD"
request_command = 'http://{lfmgr}:{port}/radiostatus/all'.format(lfmgr=self.lf_mgr_ip, port=self.lf_mgr_port)
request = requests.get(request_command, auth=(self.lf_mgr_user, self.lf_mgr_pass))
print("radio request command: {request_command}".format(request_command=request_command)) print("radio request command: {request_command}".format(request_command=request_command))
print("radio request status_code {status}".format(status=request.status_code)) print("radio request status_code {status}".format(status=request.status_code))
lanforge_radio_json = request.json() lanforge_radio_json = request.json()
@@ -258,7 +262,6 @@ class lf_check():
print("radio request.test: {text}".format(text=lanforge_radio_text)) print("radio request.test: {text}".format(text=lanforge_radio_text))
return lanforge_radio_json, lanforge_radio_text return lanforge_radio_json, lanforge_radio_text
def get_lanforge_system_node_version(self): def get_lanforge_system_node_version(self):
ssh = paramiko.SSHClient() # creating shh client object we use this object to connect to router ssh = paramiko.SSHClient() # creating shh client object we use this object to connect to router
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # automatically adds the missing host key ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # automatically adds the missing host key
@@ -292,7 +295,7 @@ class lf_check():
self.lanforge_server_version_full = stdout.readlines() self.lanforge_server_version_full = stdout.readlines()
self.lanforge_server_version_full = [line.replace('\n', '') for line in self.lanforge_server_version_full] self.lanforge_server_version_full = [line.replace('\n', '') for line in self.lanforge_server_version_full]
print("lanforge_server_version_full: {lanforge_server_version_full}".format(lanforge_server_version_full=self.lanforge_server_version_full)) print("lanforge_server_version_full: {lanforge_server_version_full}".format(lanforge_server_version_full=self.lanforge_server_version_full))
self.lanforge_server_version = self.lanforge_server_version_full[0].split('Version:',maxsplit=1)[-1].split(maxsplit=1)[0] self.lanforge_server_version = self.lanforge_server_version_full[0].split('Version:', maxsplit=1)[-1].split(maxsplit=1)[0]
self.lanforge_server_version = self.lanforge_server_version.strip() self.lanforge_server_version = self.lanforge_server_version.strip()
print("lanforge_server_version: {lanforge_server_version}".format(lanforge_server_version=self.lanforge_server_version)) print("lanforge_server_version: {lanforge_server_version}".format(lanforge_server_version=self.lanforge_server_version))
ssh.close() ssh.close()
@@ -304,31 +307,31 @@ class lf_check():
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # automatically adds the missing host key ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # automatically adds the missing host key
ssh.connect(hostname=self.lf_mgr_ip, port=22, username=self.lf_mgr_user, password=self.lf_mgr_pass, ssh.connect(hostname=self.lf_mgr_ip, port=22, username=self.lf_mgr_user, password=self.lf_mgr_pass,
allow_agent=False, look_for_keys=False, banner_timeout=600) allow_agent=False, look_for_keys=False, banner_timeout=600)
stdin, stdout, stderr = ssh.exec_command('curl -H "Accept: application/json" http://{lanforge_ip}:8080 | json_pp | grep -A 7 "VersionInfo"'.format(lanforge_ip=self.lf_mgr_ip)) stdin, stdout, stderr = ssh.exec_command(
'curl -H "Accept: application/json" http://{lanforge_ip}:8080 | json_pp | grep -A 7 "VersionInfo"'.format(lanforge_ip=self.lf_mgr_ip))
self.lanforge_gui_version_full = stdout.readlines() self.lanforge_gui_version_full = stdout.readlines()
#print("lanforge_gui_version_full pre: {lanforge_gui_version_full}".format(lanforge_gui_version_full=self.lanforge_gui_version_full)) # print("lanforge_gui_version_full pre: {lanforge_gui_version_full}".format(lanforge_gui_version_full=self.lanforge_gui_version_full))
self.lanforge_gui_version_full = [line.replace('\n', '') for line in self.lanforge_gui_version_full] self.lanforge_gui_version_full = [line.replace('\n', '') for line in self.lanforge_gui_version_full]
#print("lanforge_gui_version_full: {lanforge_gui_version_full}".format(lanforge_gui_version_full=self.lanforge_gui_version_full)) # print("lanforge_gui_version_full: {lanforge_gui_version_full}".format(lanforge_gui_version_full=self.lanforge_gui_version_full))
for element in self.lanforge_gui_version_full: for element in self.lanforge_gui_version_full:
if "BuildVersion" in element: if "BuildVersion" in element:
ver_str = str(element) ver_str = str(element)
self.lanforge_gui_version = ver_str.split(':',maxsplit=1)[-1].replace(',','') self.lanforge_gui_version = ver_str.split(':', maxsplit=1)[-1].replace(',', '')
self.lanforge_gui_version = self.lanforge_gui_version.strip().replace('"','') self.lanforge_gui_version = self.lanforge_gui_version.strip().replace('"', '')
print("BuildVersion {}".format(self.lanforge_gui_version)) print("BuildVersion {}".format(self.lanforge_gui_version))
if "BuildDate" in element: if "BuildDate" in element:
gui_str = str(element) gui_str = str(element)
self.lanforge_gui_build_date = gui_str.split(':',maxsplit=1)[-1].replace(',','') self.lanforge_gui_build_date = gui_str.split(':', maxsplit=1)[-1].replace(',', '')
print("BuildDate {}".format(self.lanforge_gui_build_date)) print("BuildDate {}".format(self.lanforge_gui_build_date))
if "GitVersion" in element: if "GitVersion" in element:
git_sha_str = str(element) git_sha_str = str(element)
self.lanforge_gui_git_sha = git_sha_str.split(':',maxsplit=1)[-1].replace(',','') self.lanforge_gui_git_sha = git_sha_str.split(':', maxsplit=1)[-1].replace(',', '')
print("GitVersion {}".format(self.lanforge_gui_git_sha)) print("GitVersion {}".format(self.lanforge_gui_git_sha))
ssh.close() ssh.close()
time.sleep(1) time.sleep(1)
return self.lanforge_gui_version_full, self.lanforge_gui_version, self.lanforge_gui_build_date, self.lanforge_gui_git_sha return self.lanforge_gui_version_full, self.lanforge_gui_version, self.lanforge_gui_build_date, self.lanforge_gui_git_sha
def send_results_email(self, report_file=None): def send_results_email(self, report_file=None):
if (report_file is None): if (report_file is None):
print("No report file, not sending email.") print("No report file, not sending email.")
@@ -336,7 +339,7 @@ class lf_check():
report_url = report_file.replace('/home/lanforge/', '') report_url = report_file.replace('/home/lanforge/', '')
if report_url.startswith('/'): if report_url.startswith('/'):
report_url = report_url[1:] report_url = report_url[1:]
qa_url = self.qa_report_html.replace('home/lanforge','') qa_url = self.qa_report_html.replace('home/lanforge', '')
if qa_url.startswith('/'): if qa_url.startswith('/'):
qa_url = qa_url[1:] qa_url = qa_url[1:]
# following recommendation # following recommendation
@@ -352,21 +355,21 @@ class lf_check():
if hostname.find('.') < 1: if hostname.find('.') < 1:
hostname = ip hostname = ip
message_txt ="" message_txt = ""
if (self.email_txt != ""): if (self.email_txt != ""):
message_txt = """{email_txt} lanforge target {lf_mgr_ip} message_txt = """{email_txt} lanforge target {lf_mgr_ip}
Results from {hostname}: Results from {hostname}:
http://{hostname}/{report} http://{hostname}/{report}
""".format(email_txt=self.email_txt,lf_mgr_ip=self.lf_mgr_ip,hostname=hostname,report=report_url) """.format(email_txt=self.email_txt, lf_mgr_ip=self.lf_mgr_ip, hostname=hostname, report=report_url)
else: else:
message_txt = """Results from {hostname}: message_txt = """Results from {hostname}:
http://{hostname}/{report}""".format(hostname=hostname,report=report_url) http://{hostname}/{report}""".format(hostname=hostname, report=report_url)
# Put in report information current two methods supported, # Put in report information current two methods supported,
message_txt +=""" message_txt += """
QA Report Dashboard: QA Report Dashboard:
http://{ip_qa}/{qa_url} http://{ip_qa}/{qa_url}
NOTE: Diagrams are links in dashboard""".format(ip_qa=ip,qa_url=qa_url) NOTE: Diagrams are links in dashboard""".format(ip_qa=ip, qa_url=qa_url)
if (self.email_title_txt != ""): if (self.email_title_txt != ""):
mail_subject = "{} [{hostname}] {date}".format(self.email_title_txt, hostname=hostname, mail_subject = "{} [{hostname}] {date}".format(self.email_title_txt, hostname=hostname,
@@ -479,7 +482,7 @@ NOTE: Diagrams are links in dashboard""".format(ip_qa=ip,qa_url=qa_url)
self.logger.info("EXITING ERROR test_suites not in json test") self.logger.info("EXITING ERROR test_suites not in json test")
exit(1) exit(1)
#TODO change code so if parameter is not present then implied to be false # TODO change code so if parameter is not present then implied to be false
def read_test_rig_parameters(self): def read_test_rig_parameters(self):
if "TEST_RIG" in self.json_rig["test_rig_parameters"]: if "TEST_RIG" in self.json_rig["test_rig_parameters"]:
self.test_rig = self.json_rig["test_rig_parameters"]["TEST_RIG"] self.test_rig = self.json_rig["test_rig_parameters"]["TEST_RIG"]
@@ -600,7 +603,7 @@ NOTE: Diagrams are links in dashboard""".format(ip_qa=ip,qa_url=qa_url)
try: try:
os.chdir(self.scripts_wd) os.chdir(self.scripts_wd)
# self.logger.info("Current Working Directory {}".format(os.getcwd())) # self.logger.info("Current Working Directory {}".format(os.getcwd()))
except: except BaseException:
self.logger.info("failed to change to {}".format(self.scripts_wd)) self.logger.info("failed to change to {}".format(self.scripts_wd))
# no spaces after FACTORY_DFLT # no spaces after FACTORY_DFLT
@@ -619,7 +622,7 @@ NOTE: Diagrams are links in dashboard""".format(ip_qa=ip,qa_url=qa_url)
def load_BLANK_database(self): def load_BLANK_database(self):
try: try:
os.chdir(self.scripts_wd) os.chdir(self.scripts_wd)
except: except BaseException:
self.logger.info("failed to change to {}".format(self.scripts_wd)) self.logger.info("failed to change to {}".format(self.scripts_wd))
# no spaces after FACTORY_DFLT # no spaces after FACTORY_DFLT
@@ -638,7 +641,7 @@ NOTE: Diagrams are links in dashboard""".format(ip_qa=ip,qa_url=qa_url)
def load_custom_database(self, custom_db): def load_custom_database(self, custom_db):
try: try:
os.chdir(self.scripts_wd) os.chdir(self.scripts_wd)
except: except BaseException:
self.logger.info("failed to change to {}".format(self.scripts_wd)) self.logger.info("failed to change to {}".format(self.scripts_wd))
# no spaces after FACTORY_DFLT # no spaces after FACTORY_DFLT
@@ -663,7 +666,7 @@ NOTE: Diagrams are links in dashboard""".format(ip_qa=ip,qa_url=qa_url)
self.logger.info("test: {} skipped".format(test)) self.logger.info("test: {} skipped".format(test))
# load the default database # load the default database
elif self.test_dict[test]['enabled'] == "TRUE": elif self.test_dict[test]['enabled'] == "TRUE":
#TODO Place test interations here # TODO Place test interations here
if 'iterations' in self.test_dict[test]: if 'iterations' in self.test_dict[test]:
self.logger.info("iterations : {}".format(self.test_dict[test]['iterations'])) self.logger.info("iterations : {}".format(self.test_dict[test]['iterations']))
self.test_iterations = int(self.test_dict[test]['iterations']) self.test_iterations = int(self.test_dict[test]['iterations'])
@@ -677,30 +680,33 @@ NOTE: Diagrams are links in dashboard""".format(ip_qa=ip,qa_url=qa_url)
# The network arguments need to be changed when in a list # The network arguments need to be changed when in a list
for index, args_list_element in enumerate(self.test_dict[test]['args_list']): for index, args_list_element in enumerate(self.test_dict[test]['args_list']):
if 'ssid_idx=' in args_list_element: if 'ssid_idx=' in args_list_element:
#print("args_list_element {}".format(args_list_element)) # print("args_list_element {}".format(args_list_element))
# get ssid_idx used in the test as an index for the dictionary # get ssid_idx used in the test as an index for the dictionary
ssid_idx_number = args_list_element.split('ssid_idx=')[-1].split()[0] ssid_idx_number = args_list_element.split('ssid_idx=')[-1].split()[0]
print("ssid_idx_number: {}".format(ssid_idx_number)) print("ssid_idx_number: {}".format(ssid_idx_number))
idx = "ssid_idx={}".format(ssid_idx_number) # index into the DUT network index idx = "ssid_idx={}".format(ssid_idx_number) # index into the DUT network index
print("idx: {}".format(idx)) print("idx: {}".format(idx))
if 'SSID_USED' in args_list_element: if 'SSID_USED' in args_list_element:
self.test_dict[test]['args_list'][index] = self.test_dict[test]['args_list'][index].replace('SSID_USED', self.wireless_network_dict[idx]['SSID_USED']) self.test_dict[test]['args_list'][index] = self.test_dict[test]['args_list'][index].replace(
'SSID_USED', self.wireless_network_dict[idx]['SSID_USED'])
if 'SECURITY_USED' in args_list_element: if 'SECURITY_USED' in args_list_element:
self.test_dict[test]['args_list'][index] = self.test_dict[test]['args_list'][index].replace('SECURITY_USED', self.wireless_network_dict[idx]['SECURITY_USED']) self.test_dict[test]['args_list'][index] = self.test_dict[test]['args_list'][index].replace(
'SECURITY_USED', self.wireless_network_dict[idx]['SECURITY_USED'])
if 'SSID_PW_USED' in args_list_element: if 'SSID_PW_USED' in args_list_element:
self.test_dict[test]['args_list'][index] = self.test_dict[test]['args_list'][index].replace('SSID_PW_USED', self.wireless_network_dict[idx]['SSID_PW_USED']) self.test_dict[test]['args_list'][index] = self.test_dict[test]['args_list'][index].replace(
'SSID_PW_USED', self.wireless_network_dict[idx]['SSID_PW_USED'])
if 'BSSID' in args_list_element: if 'BSSID' in args_list_element:
self.test_dict[test]['args_list'][index] = self.test_dict[test]['args_list'][index].replace('BSSID', self.wireless_network_dict[idx]['BSSID']) self.test_dict[test]['args_list'][index] = self.test_dict[test]['args_list'][index].replace(
'BSSID', self.wireless_network_dict[idx]['BSSID'])
# use_ssid_idx is ephemeral and used only for variable replacement , remove # use_ssid_idx is ephemeral and used only for variable replacement , remove
tmp_idx = "use_ssid_idx={}".format(ssid_idx_number) tmp_idx = "use_ssid_idx={}".format(ssid_idx_number)
if tmp_idx in args_list_element: if tmp_idx in args_list_element:
self.test_dict[test]['args_list'][index] = self.test_dict[test]['args_list'][index].replace(tmp_idx,'') self.test_dict[test]['args_list'][index] = self.test_dict[test]['args_list'][index].replace(tmp_idx, '')
# leave in for checking the command line arguments # leave in for checking the command line arguments
print("self.test_dict[test]['args_list']: {}".format(self.test_dict[test]['args_list'])) print("self.test_dict[test]['args_list']: {}".format(self.test_dict[test]['args_list']))
# Walk all the args in the args list then construct the arguments # Walk all the args in the args list then construct the arguments
if self.test_dict[test]['args'] == "": if self.test_dict[test]['args'] == "":
self.test_dict[test]['args'] = self.test_dict[test]['args'].replace(self.test_dict[test]['args'], self.test_dict[test]['args'] = self.test_dict[test]['args'].replace(self.test_dict[test]['args'],
@@ -769,7 +775,7 @@ NOTE: Diagrams are links in dashboard""".format(ip_qa=ip,qa_url=qa_url)
self.test_dict[test]['load_db']).lower() != "skip": self.test_dict[test]['load_db']).lower() != "skip":
try: try:
self.load_custom_database(self.test_dict[test]['load_db']) self.load_custom_database(self.test_dict[test]['load_db'])
except: except BaseException:
self.logger.info("custom database failed to load check existance and location: {}".format( self.logger.info("custom database failed to load check existance and location: {}".format(
self.test_dict[test]['load_db'])) self.test_dict[test]['load_db']))
else: else:
@@ -783,8 +789,8 @@ NOTE: Diagrams are links in dashboard""".format(ip_qa=ip,qa_url=qa_url)
if self.use_custom_db == "TRUE": if self.use_custom_db == "TRUE":
try: try:
self.load_custom_database(self.custom_db) self.load_custom_database(self.custom_db)
self.logger.info("{} loaded between tests with scenario.py --load {}".format(self.custom_db,self.custom_db)) self.logger.info("{} loaded between tests with scenario.py --load {}".format(self.custom_db, self.custom_db))
except: except BaseException:
self.logger.info("custom database failed to load check existance and location: {}".format(self.custom_db)) self.logger.info("custom database failed to load check existance and location: {}".format(self.custom_db))
else: else:
self.logger.info("no db loaded between tests: {}".format(self.use_custom_db)) self.logger.info("no db loaded between tests: {}".format(self.use_custom_db))
@@ -792,7 +798,7 @@ NOTE: Diagrams are links in dashboard""".format(ip_qa=ip,qa_url=qa_url)
try: try:
os.chdir(self.scripts_wd) os.chdir(self.scripts_wd)
# self.logger.info("Current Working Directory {}".format(os.getcwd())) # self.logger.info("Current Working Directory {}".format(os.getcwd()))
except: except BaseException:
self.logger.info("failed to change to {}".format(self.scripts_wd)) self.logger.info("failed to change to {}".format(self.scripts_wd))
cmd_args = "{}".format(self.test_dict[test]['args']) cmd_args = "{}".format(self.test_dict[test]['args'])
command = "./{} {}".format(self.test_dict[test]['command'], cmd_args) command = "./{} {}".format(self.test_dict[test]['command'], cmd_args)
@@ -800,10 +806,10 @@ NOTE: Diagrams are links in dashboard""".format(ip_qa=ip,qa_url=qa_url)
self.logger.info("cmd_args {}".format(cmd_args)) self.logger.info("cmd_args {}".format(cmd_args))
if self.outfile_name is not None: if self.outfile_name is not None:
stdout_log_txt = os.path.join(self.log_path, "{}-{}-stdout.txt".format(self.outfile_name,test)) stdout_log_txt = os.path.join(self.log_path, "{}-{}-stdout.txt".format(self.outfile_name, test))
self.logger.info("stdout_log_txt: {}".format(stdout_log_txt)) self.logger.info("stdout_log_txt: {}".format(stdout_log_txt))
stdout_log = open(stdout_log_txt, 'a') stdout_log = open(stdout_log_txt, 'a')
stderr_log_txt = os.path.join(self.log_path, "{}-{}-stderr.txt".format(self.outfile_name,test)) stderr_log_txt = os.path.join(self.log_path, "{}-{}-stderr.txt".format(self.outfile_name, test))
self.logger.info("stderr_log_txt: {}".format(stderr_log_txt)) self.logger.info("stderr_log_txt: {}".format(stderr_log_txt))
stderr_log = open(stderr_log_txt, 'a') stderr_log = open(stderr_log_txt, 'a')
@@ -812,7 +818,7 @@ NOTE: Diagrams are links in dashboard""".format(ip_qa=ip,qa_url=qa_url)
command_to_run = command command_to_run = command
command_to_run = shlex.split(command_to_run) command_to_run = shlex.split(command_to_run)
print("running {command_to_run}".format(command_to_run=command_to_run)) print("running {command_to_run}".format(command_to_run=command_to_run))
self.test_start_time = str(datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")).replace(':','-') self.test_start_time = str(datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")).replace(':', '-')
print("Test start: {time}".format(time=self.test_start_time)) print("Test start: {time}".format(time=self.test_start_time))
start_time = datetime.datetime.now() start_time = datetime.datetime.now()
try: try:
@@ -828,17 +834,17 @@ NOTE: Diagrams are links in dashboard""".format(ip_qa=ip,qa_url=qa_url)
process.terminate() process.terminate()
self.test_result = "TIMEOUT" self.test_result = "TIMEOUT"
except: except BaseException:
print("No such file or directory with command: {}".format(command)) print("No such file or directory with command: {}".format(command))
self.logger.info("No such file or directory with command: {}".format(command)) self.logger.info("No such file or directory with command: {}".format(command))
end_time = datetime.datetime.now() end_time = datetime.datetime.now()
self.test_end_time = str(datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")).replace(':','-') self.test_end_time = str(datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")).replace(':', '-')
print("Test end time {time}".format(time=self.test_end_time)) print("Test end time {time}".format(time=self.test_end_time))
time_delta = end_time - start_time time_delta = end_time - start_time
self.duration = "{day}d {seconds}s {msec} ms".format( self.duration = "{day}d {seconds}s {msec} ms".format(
day=time_delta.days,seconds=time_delta.seconds,msec=time_delta.microseconds) day=time_delta.days, seconds=time_delta.seconds, msec=time_delta.microseconds)
# If collect meta data is set # If collect meta data is set
meta_data_path = "" meta_data_path = ""
@@ -846,19 +852,19 @@ NOTE: Diagrams are links in dashboard""".format(ip_qa=ip,qa_url=qa_url)
stdout_log_size = os.path.getsize(stdout_log_txt) stdout_log_size = os.path.getsize(stdout_log_txt)
if stdout_log_size > 0: if stdout_log_size > 0:
stdout_log_fd = open(stdout_log_txt) stdout_log_fd = open(stdout_log_txt)
#"Report Location:::/home/lanforge/html-reports/wifi-capacity-2021-08-17-04-02-56" # "Report Location:::/home/lanforge/html-reports/wifi-capacity-2021-08-17-04-02-56"
# #
for line in stdout_log_fd: for line in stdout_log_fd:
if "Report Location" in line: if "Report Location" in line:
meta_data_path = line.replace('"','') meta_data_path = line.replace('"', '')
meta_data_path = meta_data_path.replace('Report Location:::','') meta_data_path = meta_data_path.replace('Report Location:::', '')
meta_data_path = meta_data_path.split('/')[-1] meta_data_path = meta_data_path.split('/')[-1]
meta_data_path = meta_data_path.strip() meta_data_path = meta_data_path.strip()
meta_data_path = self.report_path + '/' + meta_data_path + '/meta.txt' meta_data_path = self.report_path + '/' + meta_data_path + '/meta.txt'
break break
stdout_log_fd.close() stdout_log_fd.close()
if meta_data_path != "": if meta_data_path != "":
meta_data_fd = open(meta_data_path,'w+') meta_data_fd = open(meta_data_path, 'w+')
meta_data_fd.write('$ Generated by Candela Technologies LANforge network testing tool\n') meta_data_fd.write('$ Generated by Candela Technologies LANforge network testing tool\n')
meta_data_fd.write("test_run {test_run}\n".format(test_run=self.report_path)) meta_data_fd.write("test_run {test_run}\n".format(test_run=self.report_path))
meta_data_fd.write("file_meta {path}\n".format(path=meta_data_path)) meta_data_fd.write("file_meta {path}\n".format(path=meta_data_path))
@@ -867,16 +873,24 @@ NOTE: Diagrams are links in dashboard""".format(ip_qa=ip,qa_url=qa_url)
meta_data_fd.write('$ LANforge command\n') meta_data_fd.write('$ LANforge command\n')
meta_data_fd.write("command {command}\n".format(command=command)) meta_data_fd.write("command {command}\n".format(command=command))
# split command at test-tag , at rest of string once at the actual test-tag value # split command at test-tag , at rest of string once at the actual test-tag value
test_tag = command.split('test_tag',maxsplit=1)[-1].split(maxsplit=1)[0] test_tag = command.split('test_tag', maxsplit=1)[-1].split(maxsplit=1)[0]
test_tag = test_tag.replace("'","") test_tag = test_tag.replace("'", "")
meta_data_fd.write('$ LANforge test tag\n') meta_data_fd.write('$ LANforge test tag\n')
meta_data_fd.write("test_tag {test_tag}\n".format(test_tag=test_tag)) meta_data_fd.write("test_tag {test_tag}\n".format(test_tag=test_tag))
# LANforge information is a list thus [0] # LANforge information is a list thus [0]
meta_data_fd.write('$ LANforge Information\n') meta_data_fd.write('$ LANforge Information\n')
meta_data_fd.write("lanforge_system_node {lanforge_system_node}\n".format(lanforge_system_node=self.lanforge_system_node_version[0])) meta_data_fd.write(
meta_data_fd.write("lanforge_kernel_version {lanforge_kernel_version}\n".format(lanforge_kernel_version=self.lanforge_kernel_version[0])) "lanforge_system_node {lanforge_system_node}\n".format(
meta_data_fd.write("lanforge_gui_version_full {lanforge_gui_version_full}\n".format(lanforge_gui_version_full=self.lanforge_gui_version_full)) lanforge_system_node=self.lanforge_system_node_version[0]))
meta_data_fd.write("lanforge_server_version_full {lanforge_server_version_full}\n".format(lanforge_server_version_full=self.lanforge_server_version_full[0])) meta_data_fd.write(
"lanforge_kernel_version {lanforge_kernel_version}\n".format(
lanforge_kernel_version=self.lanforge_kernel_version[0]))
meta_data_fd.write(
"lanforge_gui_version_full {lanforge_gui_version_full}\n".format(
lanforge_gui_version_full=self.lanforge_gui_version_full))
meta_data_fd.write(
"lanforge_server_version_full {lanforge_server_version_full}\n".format(
lanforge_server_version_full=self.lanforge_server_version_full[0]))
meta_data_fd.close() meta_data_fd.close()
stderr_log_size = os.path.getsize(stderr_log_txt) stderr_log_size = os.path.getsize(stderr_log_txt)
@@ -926,7 +940,7 @@ NOTE: Diagrams are links in dashboard""".format(ip_qa=ip,qa_url=qa_url)
print("html_report: {report}".format(report=self.qa_report_html)) print("html_report: {report}".format(report=self.qa_report_html))
break break
self.qa_report_html = self.qa_report_html.replace('html report: ','') self.qa_report_html = self.qa_report_html.replace('html report: ', '')
# stdout_log_link is used for the email reporting to have the corrected path # stdout_log_link is used for the email reporting to have the corrected path
stdout_log_link = str(stdout_log_txt).replace('/home/lanforge', '') stdout_log_link = str(stdout_log_txt).replace('/home/lanforge', '')
@@ -954,7 +968,7 @@ NOTE: Diagrams are links in dashboard""".format(ip_qa=ip,qa_url=qa_url)
self.html_results += """<td></td>""" self.html_results += """<td></td>"""
self.html_results += """</tr>""" self.html_results += """</tr>"""
#TODO - plase copy button at end and selectable , so individual sections may be copied # TODO - plase copy button at end and selectable , so individual sections may be copied
if command != short_cmd: if command != short_cmd:
'''self.html_results += f"""<tr><td colspan='8' class='scriptdetails'> '''self.html_results += f"""<tr><td colspan='8' class='scriptdetails'>
<span class='copybtn'>Copy</span> <span class='copybtn'>Copy</span>
@@ -966,7 +980,7 @@ NOTE: Diagrams are links in dashboard""".format(ip_qa=ip,qa_url=qa_url)
</td></tr> </td></tr>
""".format(command=command) """.format(command=command)
#nocopy # nocopy
''' '''
self.html_results += f"""<tr><td colspan='8' class='scriptdetails'> self.html_results += f"""<tr><td colspan='8' class='scriptdetails'>
<tt>{command}</tt> <tt>{command}</tt>
@@ -1029,7 +1043,7 @@ note if all json data (rig,dut,tests) in same json file pass same json in for a
print("args.json_rig {rig}".format(rig=args.json_rig)) print("args.json_rig {rig}".format(rig=args.json_rig))
with open(args.json_rig, 'r') as json_rig_config: with open(args.json_rig, 'r') as json_rig_config:
json_rig = json.load(json_rig_config) json_rig = json.load(json_rig_config)
except: except BaseException:
print("Error reading {}".format(args.json_rig)) print("Error reading {}".format(args.json_rig))
json_dut = "" json_dut = ""
@@ -1037,7 +1051,7 @@ note if all json data (rig,dut,tests) in same json file pass same json in for a
print("args.json_dut {dut}".format(dut=args.json_dut)) print("args.json_dut {dut}".format(dut=args.json_dut))
with open(args.json_dut, 'r') as json_dut_config: with open(args.json_dut, 'r') as json_dut_config:
json_dut = json.load(json_dut_config) json_dut = json.load(json_dut_config)
except: except BaseException:
print("Error reading {}".format(args.json_dut)) print("Error reading {}".format(args.json_dut))
json_test = "" json_test = ""
@@ -1045,7 +1059,7 @@ note if all json data (rig,dut,tests) in same json file pass same json in for a
print("args.json_test {}".format(args.json_test)) print("args.json_test {}".format(args.json_test))
with open(args.json_test, 'r') as json_test_config: with open(args.json_test, 'r') as json_test_config:
json_test = json.load(json_test_config) json_test = json.load(json_test_config)
except: except BaseException:
print("Error reading {}".format(args.json_test)) print("Error reading {}".format(args.json_test))
# Test-rig information information # Test-rig information information
@@ -1067,7 +1081,7 @@ note if all json data (rig,dut,tests) in same json file pass same json in for a
print("Email to email list") print("Email to email list")
# create report class for reporting # create report class for reporting
report = lf_report(_path = __path, report = lf_report(_path=__path,
_results_dir_name=__dir, _results_dir_name=__dir,
_output_html="lf_check.html", _output_html="lf_check.html",
_output_pdf="lf-check.pdf") _output_pdf="lf-check.pdf")
@@ -1088,7 +1102,7 @@ note if all json data (rig,dut,tests) in same json file pass same json in for a
_production=production, _production=production,
_csv_results=csv_results, _csv_results=csv_results,
_outfile=outfile, _outfile=outfile,
_outfile_name = outfile_name, _outfile_name=outfile_name,
_report_path=report_path, _report_path=report_path,
_log_path=log_path) _log_path=log_path)
@@ -1107,7 +1121,7 @@ note if all json data (rig,dut,tests) in same json file pass same json in for a
logger.addHandler(logging.StreamHandler(sys.stdout)) # allows to logging to file and stdout logger.addHandler(logging.StreamHandler(sys.stdout)) # allows to logging to file and stdout
# read config and run tests # read config and run tests
check.read_json_rig() #check.read_config check.read_json_rig() # check.read_config
check.read_json_dut() check.read_json_dut()
check.read_json_test() check.read_json_test()
@@ -1116,63 +1130,63 @@ note if all json data (rig,dut,tests) in same json file pass same json in for a
try: try:
scripts_git_sha = check.get_scripts_git_sha() scripts_git_sha = check.get_scripts_git_sha()
print("git_sha {sha}".format(sha=scripts_git_sha)) print("git_sha {sha}".format(sha=scripts_git_sha))
except: except BaseException:
print("git_sha read exception ") print("git_sha read exception ")
try: try:
lanforge_system_node_version = check.get_lanforge_system_node_version() lanforge_system_node_version = check.get_lanforge_system_node_version()
print("lanforge_system_node_version {system_node_ver}".format(system_node_ver=lanforge_system_node_version)) print("lanforge_system_node_version {system_node_ver}".format(system_node_ver=lanforge_system_node_version))
except: except BaseException:
print("lanforge_system_node_version exception") print("lanforge_system_node_version exception")
try: try:
lanforge_kernel_version = check.get_lanforge_kernel_version() lanforge_kernel_version = check.get_lanforge_kernel_version()
print("lanforge_kernel_version {kernel_ver}".format(kernel_ver=lanforge_kernel_version)) print("lanforge_kernel_version {kernel_ver}".format(kernel_ver=lanforge_kernel_version))
except: except BaseException:
print("lanforge_kernel_version exception, tests aborted check lanforge ip") print("lanforge_kernel_version exception, tests aborted check lanforge ip")
exit(1) exit(1)
try: try:
lanforge_server_version_full = check.get_lanforge_server_version() lanforge_server_version_full = check.get_lanforge_server_version()
print("lanforge_server_version_full {lanforge_server_version_full}".format(lanforge_server_version_full=lanforge_server_version_full)) print("lanforge_server_version_full {lanforge_server_version_full}".format(lanforge_server_version_full=lanforge_server_version_full))
except: except BaseException:
print("lanforge_server_version exception, tests aborted check lanforge ip") print("lanforge_server_version exception, tests aborted check lanforge ip")
exit(1) exit(1)
try: try:
lanforge_gui_version_full, lanforge_gui_version, lanforge_gui_build_date, lanforge_gui_git_sha = check.get_lanforge_gui_version() lanforge_gui_version_full, lanforge_gui_version, lanforge_gui_build_date, lanforge_gui_git_sha = check.get_lanforge_gui_version()
print("lanforge_gui_version_full {lanforge_gui_version_full}".format(lanforge_gui_version_full=lanforge_gui_version_full)) print("lanforge_gui_version_full {lanforge_gui_version_full}".format(lanforge_gui_version_full=lanforge_gui_version_full))
except: except BaseException:
print("lanforge_gui_version exception, tests aborted check lanforge ip") print("lanforge_gui_version exception, tests aborted check lanforge ip")
exit(1) exit(1)
try: try:
lanforge_radio_json, lanforge_radio_text = check.get_lanforge_radio_information() lanforge_radio_json, lanforge_radio_text = check.get_lanforge_radio_information()
lanforge_radio_formatted_str = json.dumps(lanforge_radio_json, indent = 2) lanforge_radio_formatted_str = json.dumps(lanforge_radio_json, indent=2)
print("lanforge_radio_json: {lanforge_radio_json}".format(lanforge_radio_json=lanforge_radio_formatted_str)) print("lanforge_radio_json: {lanforge_radio_json}".format(lanforge_radio_json=lanforge_radio_formatted_str))
# note put into the meta data # note put into the meta data
lf_radio_df = pd.DataFrame(columns = ['Radio','WIFI-Radio Driver','Radio Capabilities','Firmware Version','max_sta','max_vap','max_vifs']) lf_radio_df = pd.DataFrame(columns=['Radio', 'WIFI-Radio Driver', 'Radio Capabilities', 'Firmware Version', 'max_sta', 'max_vap', 'max_vifs'])
for key in lanforge_radio_json: for key in lanforge_radio_json:
if 'wiphy' in key: if 'wiphy' in key:
#print("key {}".format(key)) # print("key {}".format(key))
#print("lanforge_radio_json[{}]: {}".format(key,lanforge_radio_json[key])) # print("lanforge_radio_json[{}]: {}".format(key,lanforge_radio_json[key]))
driver = lanforge_radio_json[key]['driver'].split('Driver:',maxsplit=1)[-1].split(maxsplit=1)[0] driver = lanforge_radio_json[key]['driver'].split('Driver:', maxsplit=1)[-1].split(maxsplit=1)[0]
try: try:
firmware_version = lanforge_radio_json[key]['firmware version'] firmware_version = lanforge_radio_json[key]['firmware version']
except: except BaseException:
print("5.4.3 radio fw version not in /radiostatus/all") print("5.4.3 radio fw version not in /radiostatus/all")
firmware_version = "5.4.3 N/A" firmware_version = "5.4.3 N/A"
lf_radio_df = lf_radio_df.append( lf_radio_df = lf_radio_df.append(
{'Radio':lanforge_radio_json[key]['entity id'], {'Radio': lanforge_radio_json[key]['entity id'],
'WIFI-Radio Driver': driver, 'WIFI-Radio Driver': driver,
'Radio Capabilities':lanforge_radio_json[key]['capabilities'], 'Radio Capabilities': lanforge_radio_json[key]['capabilities'],
'Firmware Version':firmware_version, 'Firmware Version': firmware_version,
'max_sta':lanforge_radio_json[key]['max_sta'], 'max_sta': lanforge_radio_json[key]['max_sta'],
'max_vap':lanforge_radio_json[key]['max_vap'], 'max_vap': lanforge_radio_json[key]['max_vap'],
'max_vifs':lanforge_radio_json[key]['max_vifs']}, ignore_index = True) 'max_vifs': lanforge_radio_json[key]['max_vifs']}, ignore_index=True)
print("lf_radio_df:: {lf_radio_df}".format(lf_radio_df=lf_radio_df)) print("lf_radio_df:: {lf_radio_df}".format(lf_radio_df=lf_radio_df))
except Exception as error: except Exception as error:
@@ -1221,7 +1235,7 @@ note if all json data (rig,dut,tests) in same json file pass same json in for a
print("html report: {}".format(html_report)) print("html report: {}".format(html_report))
try: try:
report.write_pdf_with_timestamp() report.write_pdf_with_timestamp()
except: except BaseException:
print("exception write_pdf_with_timestamp()") print("exception write_pdf_with_timestamp()")
print("lf_check_html_report: " + html_report) print("lf_check_html_report: " + html_report)