From 741534da45c5222ec9ead2ec049acf5c2fbb7178 Mon Sep 17 00:00:00 2001 From: Chuck SmileyRekiere Date: Fri, 22 Oct 2021 15:58:32 -0600 Subject: [PATCH] asus_ap.py : initial place holder lf_check.py: fix meta.txt creation on interations added test_l3_longevity.py to ct_us_001_tests.json ct_us_004_tests.json Signed-off-by: Chuck SmileyRekiere --- py-scripts/asus_ap.py | 180 ++++++++++++++++++++++++++ py-scripts/tools/ct_us_001_tests.json | 34 ++++- py-scripts/tools/ct_us_004_tests.json | 70 ++++++++-- py-scripts/tools/lf_check.py | 16 ++- 4 files changed, 280 insertions(+), 20 deletions(-) create mode 100644 py-scripts/asus_ap.py diff --git a/py-scripts/asus_ap.py b/py-scripts/asus_ap.py new file mode 100644 index 00000000..cf010209 --- /dev/null +++ b/py-scripts/asus_ap.py @@ -0,0 +1,180 @@ +#!/usr/bin/python3 + +''' +NAME: +asus_ap.py + +PURPOSE: +Generic AP library that will work for the ASUS ap's + +EXAMPLE: + +./asus_ap.py --ap_port '/dev/ttyUSB0' --ap_baud '115200' --ap_cmd "wl -i wl1 bs_data" + +./asus_ap.py --ap_port '/dev/ttyUSB0' --ap_baud '115200' --ap_cmd "wl -i wl1 bs_data" --ap_file 'ap_file.txt' + + + +NOTES: + + + +''' + +import sys +if sys.version_info[0] != 3: + print("This script requires Python3") + exit() + +import argparse +import pexpect +import serial +from pexpect_serial import SerialSpawn + + +# see https://stackoverflow.com/a/13306095/11014343 +class FileAdapter(object): + def __init__(self, logger): + self.logger = logger + def write(self, data): + # NOTE: data can be a partial line, multiple lines + data = data.strip() # ignore leading/trailing whitespace + if data: # non-blank + self.logger.info(data) + def flush(self): + pass # leave it to logging to flush properly + + +class lf_ap(): + def __init__(self, + _ap_test_mode = False, + _ap_2G_interface = "wl0", + _ap_5G_interface = "wl1", + _ap_6G_interface = "wl2", + _ap_scheme = 'serial', + _ap_serial_port = '/dev/ttyUSB0', + _ap_ssh_port = "22", + _ap_telnet_port = "23", + _ap_serial_baud = '115200', + _ap_report_dir = "", + _ap_log_file = ""): + self.ap_test_mode = _ap_test_mode + self.ap_2G_interface = _ap_2G_interface + self.ap_5G_interface = _ap_5G_interface + self.ap_6G_interface = _ap_6G_interface + self.ap_scheme = _ap_scheme + self.ap_serial_port = _ap_serial_port + self.ap_telnet_port = _ap_ssh_port + self.ap_telnet = _ap_telnet_port + self.ap_serial_baud = _ap_serial_baud + self.ap_report_dir = _ap_report_dir + self.ap_log_file = _ap_log_file + + def ap_action(self): + + print("ap_cmd: {}".format(self.ap_cmd)) + try: + ser = serial.Serial(self.ap_port, int(self.ap_baud), timeout=5) + ss = SerialSpawn(ser) + ss.sendline(str(self.ap_cmd)) + ss.expect([pexpect.TIMEOUT], timeout=2) # do not detete line, waits for output + ap_results = ss.before.decode('utf-8','ignore') + print("ap_results {}".format(ap_results)) + except: + ap_results = "exception on accessing {} Command: {}\r\n".format(self.ap_port,self.ap_cmd) + print("{}".format(ap_results)) + + if(self.ap_file != None): + ap_file = open(str(self.ap_file),"a") + ap_file.write(ap_results) + ap_file.close() + print("ap file written {}".format(str(self.ap_file))) + + # ASUS + def ap_clear_stats(self,band): + pass + + # ASUS bs_data + def ap_ul_data(self,band): + pass + + # ASUS rx_report + def ap_dl_data(self,band): + pass + + # ASUS chanel info (channel utilization) + def ap_chanim(self,band): + pass + + def ap_ul_stats(self,band): + pass + + def ap_dl_stats(self,band): + pass + + def ap_store_dl_scheduler_stats(self,band): + if band is "6G": + + pass + + def ap_store_ul_scheduler_stats(self,band): + pass + + + def ap_ofdma_stats(self,band): + pass + +def main(): + + parser = argparse.ArgumentParser( + prog='lf_ap.py', + #formatter_class=argparse.RawDescriptionHelpFormatter, + formatter_class=argparse.RawTextHelpFormatter, + epilog='''\ + Useful Information: + 1. Useful Information goes here + ''', + + description='''\ +lf_ap.py: +-------------------- +Summary : +---------- +This file is used for verification + +Commands: (wl2 == 6GHz wl1 == 5GHz , wl0 == 24ghz) + +read ap data:: 'wl -i wl1 bs_data' +reset scheduler's counters:: 'wl -i wl1 dump_clear' +UL scheduler statistics:: 'wl -i wl1 dump umsched' +DL scheduler statistics:: 'wl -i wl1 dump msched' + +Generic command layout: +----------------------- + + ''') + parser.add_argument('--ap_test_mode', help='--ap_mode ',default=False) + parser.add_argument('--ap_port', help='--ap_port \'/dev/ttyUSB0\'',default='/dev/ttyUSB0') + parser.add_argument('--ap_baud', help='--ap_baud \'115200\'',default='115200') + parser.add_argument('--ap_cmd', help='--ap_cmd \'wl -i wl1 bs_data\'',default='wl -i wl1 bs_data') + parser.add_argument('--ap_file', help='--ap_file \'ap_file.txt\'') + + args = parser.parse_args() + + __ap_port = args.ap_port + __ap_baud = args.ap_baud + __ap_cmd = args.ap_cmd + __ap_file = args.ap_file + + ap_dut = lf_ap( + _ap_port = __ap_port, + _ap_baud = __ap_baud, + _ap_cmd = __ap_cmd , + _ap_file = __ap_file) + + ap_dut.ap_action() + +if __name__ == '__main__': + main() + + diff --git a/py-scripts/tools/ct_us_001_tests.json b/py-scripts/tools/ct_us_001_tests.json index ec93aead..0f14db81 100644 --- a/py-scripts/tools/ct_us_001_tests.json +++ b/py-scripts/tools/ct_us_001_tests.json @@ -181,6 +181,18 @@ " " ] }, + "test_l3_longevity":{ + "enabled":"TRUE", + "load_db":"skip", + "command":"test_l3_longevity.py", + "args":"", + "args_list":[ + " --lfmgr LF_MGR_IP --local_lf_report_dir REPORT_PATH --test_duration 15s --polling_interval 5s --upstream_port eth2 ", + " use_ssid_idx=1 --radio 'radio==wiphy1,stations==4,ssid==SSID_USED,ssid_pw==SSID_PW_USED,security==SECURITY_USED' ", + " --endp_type lf_udp --rates_are_totals --side_a_min_bps=20000 --side_b_min_bps=300000000", + " --test_rig TEST_RIG --test_tag 'l3_longevity'" + ] + }, "create_chamberview_dut_ATH10K_9984__wc":{ "enabled":"TRUE", "load_db":"skip", @@ -493,6 +505,18 @@ " " ] }, + "test_l3_longevity":{ + "enabled":"TRUE", + "load_db":"skip", + "command":"test_l3_longevity.py", + "args":"", + "args_list":[ + " --lfmgr LF_MGR_IP --local_lf_report_dir REPORT_PATH --test_duration 15s --polling_interval 5s --upstream_port eth2 ", + " use_ssid_idx=1 --radio 'radio==wiphy1,stations==4,ssid==SSID_USED,ssid_pw==SSID_PW_USED,security==SECURITY_USED' ", + " --endp_type lf_udp --rates_are_totals --side_a_min_bps=20000 --side_b_min_bps=300000000", + " --test_rig TEST_RIG --test_tag 'l3_longevity'" + ] + }, "create_chamberview_dut_ATH10K_9984__wc":{ "enabled":"TRUE", "load_db":"skip", @@ -520,7 +544,7 @@ "wifi_capacity_ATH10K_9984_":{ "enabled":"TRUE", "timeout":"600", - "iterations":"3", + "iterations":"1", "load_db":"skip", "command":"lf_wifi_capacity_test.py", "args":"", @@ -560,7 +584,7 @@ "enabled":"TRUE", "load_db":"skip", "timeout":"600", - "iterations":"3", + "iterations":"1", "command":"lf_dataplane_test.py", "args":"", "args_list":[ @@ -601,7 +625,7 @@ "wifi_capacity_AX210":{ "enabled":"TRUE", "timeout":"600", - "iterations":"3", + "iterations":"1", "load_db":"skip", "command":"lf_wifi_capacity_test.py", "args":"", @@ -640,7 +664,7 @@ "dataplane_AX210":{ "enabled":"TRUE", "load_db":"skip", - "iterations":"3", + "iterations":"1", "command":"lf_dataplane_test.py", "args":"", "args_list":[ @@ -720,7 +744,7 @@ "dataplane_mt7915e":{ "enabled":"TRUE", "load_db":"skip", - "iterations":"3", + "iterations":"1", "command":"lf_dataplane_test.py", "args":"", "args_list":[ diff --git a/py-scripts/tools/ct_us_004_tests.json b/py-scripts/tools/ct_us_004_tests.json index b01ab485..e9b99937 100644 --- a/py-scripts/tools/ct_us_004_tests.json +++ b/py-scripts/tools/ct_us_004_tests.json @@ -20,12 +20,24 @@ "test_l3_longevity":{ "enabled":"TRUE", "load_db":"skip", + "iterations":"2", "command":"test_l3_longevity.py", "args":"", "args_list":[ - " --lfmgr LF_MGR_IP --test_duration 15s --polling_interval 5s --upstream_port eth2 ", + " --lfmgr LF_MGR_IP --local_lf_report_dir REPORT_PATH --test_duration 15s --polling_interval 5s --upstream_port eth2 ", " use_ssid_idx=1 --radio 'radio==wiphy1,stations==4,ssid==SSID_USED,ssid_pw==SSID_PW_USED,security==SECURITY_USED' ", - " --endp_type lf_udp --rates_are_totals --side_a_min_bps=20000 --side_b_min_bps=300000000" + " --endp_type lf_udp --rates_are_totals --side_a_min_bps=20000 --side_b_min_bps=300000000", + " --test_rig TEST_RIG --test_tag 'l3_longevity'" + ] + }, + "lf_qa":{ + "enabled":"TRUE", + "timeout":"600", + "load_db":"skip", + "command":"./tools/lf_qa.py", + "args":"", + "args_list":[ + " --path REPORT_PATH --store --png --database DATABASE_SQLITE" ] } }, @@ -33,14 +45,26 @@ "test_l3_longevity":{ "enabled":"TRUE", "load_db":"skip", + "iterations":"1", "command":"test_l3_longevity.py", "args":"", "args_list":[ - " --lfmgr LF_MGR_IP --test_duration 15s --polling_interval 5s --upstream_port eth2 ", + " --lfmgr LF_MGR_IP --local_lf_report_dir REPORT_PATH --test_duration 15s --polling_interval 5s --upstream_port eth2 ", " use_ssid_idx=1 --radio 'radio==wiphy1,stations==4,ssid==SSID_USED,ssid_pw==SSID_PW_USED,security==SECURITY_USED' ", " --endp_type lf_udp --rates_are_totals --side_a_min_bps=20000 --side_b_min_bps=300000000", + " --test_rig TEST_RIG --test_tag 'l3_longevity'", " --ap_read --ap_test_mode" ] + }, + "lf_qa":{ + "enabled":"TRUE", + "timeout":"600", + "load_db":"skip", + "command":"./tools/lf_qa.py", + "args":"", + "args_list":[ + " --path REPORT_PATH --store --png --database DATABASE_SQLITE" + ] } }, "suite_wc_dp_shorter":{ @@ -145,6 +169,20 @@ " " ] }, + "test_l3_longevity":{ + "enabled":"TRUE", + "load_db":"skip", + "iterations":"1", + "command":"test_l3_longevity.py", + "args":"", + "args_list":[ + " --lfmgr LF_MGR_IP --local_lf_report_dir REPORT_PATH --test_duration 15s --polling_interval 5s --upstream_port eth2 ", + " use_ssid_idx=1 --radio 'radio==wiphy1,stations==4,ssid==SSID_USED,ssid_pw==SSID_PW_USED,security==SECURITY_USED' ", + " --endp_type lf_udp --rates_are_totals --side_a_min_bps=20000 --side_b_min_bps=300000000", + " --test_rig TEST_RIG --test_tag 'l3_longevity'", + " --ap_read --ap_test_mode" + ] + }, "create_chamberview_dut_ATH10K_9984_wc":{ "enabled":"TRUE", "load_db":"skip", @@ -457,6 +495,20 @@ " " ] }, + "test_l3_longevity":{ + "enabled":"TRUE", + "load_db":"skip", + "iterations":"1", + "command":"test_l3_longevity.py", + "args":"", + "args_list":[ + " --lfmgr LF_MGR_IP --local_lf_report_dir REPORT_PATH --test_duration 15s --polling_interval 5s --upstream_port eth2 ", + " use_ssid_idx=1 --radio 'radio==wiphy1,stations==4,ssid==SSID_USED,ssid_pw==SSID_PW_USED,security==SECURITY_USED' ", + " --endp_type lf_udp --rates_are_totals --side_a_min_bps=20000 --side_b_min_bps=300000000", + " --test_rig TEST_RIG --test_tag 'l3_longevity'", + " --ap_read --ap_test_mode" + ] + }, "create_chamberview_dut_ATH10K_9984_wc":{ "enabled":"TRUE", "load_db":"skip", @@ -484,7 +536,7 @@ "wifi_capacity_ATH10K_9984":{ "enabled":"TRUE", "timeout":"600", - "iterations":"3", + "iterations":"1", "load_db":"skip", "command":"lf_wifi_capacity_test.py", "args":"", @@ -524,7 +576,7 @@ "enabled":"TRUE", "load_db":"skip", "timeout":"600", - "iterations":"3", + "iterations":"1", "command":"lf_dataplane_test.py", "args":"", "args_list":[ @@ -565,7 +617,7 @@ "wifi_capacity_AX210":{ "enabled":"TRUE", "timeout":"600", - "iterations":"3", + "iterations":"1", "load_db":"skip", "command":"lf_wifi_capacity_test.py", "args":"", @@ -604,7 +656,7 @@ "dataplane_AX210":{ "enabled":"TRUE", "load_db":"skip", - "iterations":"3", + "iterations":"1", "command":"lf_dataplane_test.py", "args":"", "args_list":[ @@ -645,7 +697,7 @@ "wifi_capacity_mt7915e":{ "enabled":"TRUE", "timeout":"600", - "iterations":"3", + "iterations":"1", "load_db":"skip", "command":"lf_wifi_capacity_test.py", "args":"", @@ -684,7 +736,7 @@ "dataplane_mt7915e":{ "enabled":"TRUE", "load_db":"skip", - "iterations":"3", + "iterations":"1", "command":"lf_dataplane_test.py", "args":"", "args_list":[ diff --git a/py-scripts/tools/lf_check.py b/py-scripts/tools/lf_check.py index 53f69f59..5950228f 100755 --- a/py-scripts/tools/lf_check.py +++ b/py-scripts/tools/lf_check.py @@ -619,6 +619,7 @@ NOTE: Diagrams are links in dashboard""".format(ip_qa=ip, qa_url=qa_url) self.test_iterations = self.test_iterations_default iteration = 0 + report_index = 0 # log may contain multiple runs - this helps put the meta.txt in right directory for iteration in range(self.test_iterations): iteration += 1 @@ -783,14 +784,17 @@ NOTE: Diagrams are links in dashboard""".format(ip_qa=ip, qa_url=qa_url) stdout_log_fd = open(stdout_log_txt) # "Report Location:::/home/lanforge/html-reports/wifi-capacity-2021-08-17-04-02-56" # + for line in stdout_log_fd: if "Report Location" in line: - meta_data_path = line.replace('"', '') - meta_data_path = meta_data_path.replace('Report Location:::', '') - meta_data_path = meta_data_path.split('/')[-1] - meta_data_path = meta_data_path.strip() - meta_data_path = self.report_path + '/' + meta_data_path + '/meta.txt' - break + report_index += 1 + if iteration == report_index: + meta_data_path = line.replace('"', '') + meta_data_path = meta_data_path.replace('Report Location:::', '') + meta_data_path = meta_data_path.split('/')[-1] + meta_data_path = meta_data_path.strip() + meta_data_path = self.report_path + '/' + meta_data_path + '/meta.txt' + break stdout_log_fd.close() if meta_data_path != "": meta_data_fd = open(meta_data_path, 'w+')