From a61f8e5f585d9445a254c0d26ebccf1dd29b7659 Mon Sep 17 00:00:00 2001 From: Logan Lipke Date: Mon, 19 Oct 2020 17:59:14 -0700 Subject: [PATCH] Updated to use arguments for min_read/write, updated testing WIP --- py-scripts/test_fileio.py | 110 +++++++++++++++++++++++++++----------- 1 file changed, 78 insertions(+), 32 deletions(-) diff --git a/py-scripts/test_fileio.py b/py-scripts/test_fileio.py index 13854a43..c80f23f6 100755 --- a/py-scripts/test_fileio.py +++ b/py-scripts/test_fileio.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 import sys - +import re if sys.version_info[0] != 3: print("This script requires Python 3") exit(1) @@ -21,9 +21,9 @@ import datetime class IPV4FIO(LFCliBase): def __init__(self, host, port, ssid, security, password, station_list, - number_template="00000", radio="wiphy0", fio_type="fe_nfs4", min_read=0, max_read=0, min_write=10000000000, + number_template="00000", radio="wiphy0", fio_type="fe_nfs4", min_read=0, max_read=0, min_write="1G", max_write=0, directory="AUTO", test_duration="5m", upstream_port="eth1", server_mount="10.40.0.1:/var/tmp/test", - _debug_on=False, + _debug_on=False, min_tx_bps="100Mbps", min_rx_bps="1Gbps", _exit_on_error=False, _exit_on_fail=False): super().__init__(host, port, _debug=_debug_on, _halt_on_error=_exit_on_error, _exit_on_fail=_exit_on_fail) @@ -37,6 +37,8 @@ class IPV4FIO(LFCliBase): self.number_template = number_template self.sta_list = station_list self.test_duration = test_duration + self.min_tx_bps = self.parse_size_bps(min_tx_bps) + self.min_rx_bps = self.parse_size_bps(min_rx_bps) self.local_realm = realm.Realm(lfclient_host=self.host, lfclient_port=self.port) self.station_profile = self.local_realm.new_station_profile() @@ -44,34 +46,77 @@ class IPV4FIO(LFCliBase): self.station_profile.lfclient_url = self.lfclient_url self.station_profile.ssid = self.ssid - self.station_profile.ssid_pass = self.password, + self.station_profile.ssid_pass = self.password self.station_profile.security = self.security self.station_profile.number_template_ = self.number_template self.station_profile.mode = 0 self.cx_profile.fio_type = fio_type - self.cx_profile.min_read = min_read - self.cx_profile.max_read = max_read - self.cx_profile.min_write = min_write - self.cx_profile.max_write = max_write + self.cx_profile.min_read = self.parse_size(min_read) + self.cx_profile.max_read = self.parse_size(max_read) + self.cx_profile.min_write = self.parse_size(min_write) + self.cx_profile.max_write = self.parse_size(max_write) self.cx_profile.directory = directory self.cx_profile.server_mount = server_mount self.ro_profile = self.cx_profile.create_ro_profile() - def __compare_vals(self, old_list, new_list): + def parse_size_bps(self, size_string): + if isinstance(size_string, str): + size_string.upper() + # print(size_string) + pattern = re.compile(r"^(\d+)([MGKmgk]?)bps$") + td = pattern.match(size_string) + if td is not None: + size = int(td.group(1)) + unit = str(td.group(2)).lower() + # print(1, size, unit) + if unit == 'g': + size *= 10000000 + elif unit == 'm': + size *= 100000 + elif unit == 'k': + size *= 1000 + # print(2, size, unit) + return size + else: + return size_string + + def parse_size(self, size_string): + if isinstance(size_string, str): + size_string.upper() + pattern = re.compile(r"^(\d+)([MGKmgk]?b?$)") + td = pattern.match(size_string) + if td is not None: + size = int(td.group(1)) + unit = str(td.group(2)).lower() + # print(1, size, unit) + if unit == 'g': + size *= 10000000 + elif unit == 'm': + size *= 100000 + elif unit == 'k': + size *= 1000 + # print(2, size, unit) + return size + else: + return size_string + + def __compare_vals(self, val_list): passes = 0 expected_passes = 0 - for item in old_list: - expected_passes += 2 - if item not in new_list: - raise ValueError("%s not found. Have the stations changed?" % item) + print(val_list) + for item in val_list: + expected_passes += 1 + print(item) + if item[0] == 'r': + print("TEST", item, val_list[item]['read-bps'], self.min_rx_bps, val_list[item]['read-bps'] > self.min_rx_bps) + if val_list[item]['read-bps'] > self.min_rx_bps: + passes += 1 else: - if old_list[item]['bps rx'] < new_list[item]['bps rx']: + print("TEST", item, val_list[item]['write-bps'], self.min_tx_bps, val_list[item]['write-bps'] > self.min_tx_bps) + if val_list[item]['write-bps'] > self.min_tx_bps: passes += 1 - if old_list[item]['bps tx'] < new_list[item]['bps tx']: - passes += 1 - if passes == expected_passes: return True else: @@ -81,23 +126,23 @@ class IPV4FIO(LFCliBase): def __get_values(self): time.sleep(3) - names = "" - for name in self.station_profile.station_names: - names += self.local_realm.name_to_eid(name)[2] + "," - names = names[0:len(names)-1] - cx_list = self.json_get("port/1/1/%s?fields=alias,port,bps+tx,bps+rx" % names, debug_=self.debug) + cx_list = self.json_get("fileio/%s,%s?fields=write-bps,read-bps" % (','.join(self.cx_profile.created_cx.keys()), ','.join(self.ro_profile.created_cx.keys())), + debug_=self.debug) + # print(cx_list) # print("==============\n", cx_list, "\n==============") cx_map = {} if cx_list is not None: - cx_list = cx_list['interfaces'] + cx_list = cx_list['endpoint'] for i in cx_list: for item, value in i.items(): # print(item, value) - cx_map[self.local_realm.name_to_eid(item)[2]] = {"bps rx": value['bps rx'], "bps tx": value['bps tx']} + cx_map[self.local_realm.name_to_eid(item)[2]] = {"read-bps": value['read-bps'], "write-bps": value['write-bps']} + # print(cx_map) return cx_map def build(self): # Build stations + # print(self.min_tx_bps, self.min_rx_bps) self.station_profile.use_security(self.security, self.ssid, self.password) self.station_profile.set_number_template(self.number_template) print("Creating stations") @@ -121,9 +166,7 @@ class IPV4FIO(LFCliBase): self._pass("All stations got IPs", print_pass) else: self._fail("Stations failed to get IPs", print_fail) - exit(1) cur_time = datetime.datetime.now() - old_rx_values = self.__get_values() # print("Got Values") end_time = self.local_realm.parse_time(self.test_duration) + cur_time self.cx_profile.start_cx() @@ -140,17 +183,17 @@ class IPV4FIO(LFCliBase): new_rx_values = self.__get_values() # exit(1) - print(old_rx_values, new_rx_values) + # print(new_rx_values) # print("\n-----------------------------------") # print(cur_time, end_time, cur_time + datetime.timedelta(minutes=1)) # print("-----------------------------------\n") expected_passes += 1 - if self.__compare_vals(old_rx_values, new_rx_values): + if self.__compare_vals(new_rx_values): passes += 1 else: self._fail("FAIL: Not all stations increased traffic", print_fail) - break - old_rx_values = new_rx_values + # break + # old_rx_values = new_rx_values cur_time = datetime.datetime.now() if passes == expected_passes: self._pass("PASS: All tests passes", print_pass) @@ -198,8 +241,10 @@ def main(): parser.add_argument('--fio_type', help='--fio_type endpoint type', default="fe_nfs4") parser.add_argument('--min_read', help='--min_read sets the minimum bps read rate', default=0) parser.add_argument('--max_read', help='--max_read sets the maximum bps read rate', default=0) - parser.add_argument('--min_write', help='--min_write sets the minimum bps write rate', default=10000000000) + parser.add_argument('--min_write', help='--min_write sets the minimum bps write rate', default="1G") parser.add_argument('--max_write', help='--max_write sets the maximum bps write rate', default=0) + parser.add_argument('--min_tx_bps', help='--min_tx_bps sets threshold for write bps test', default="100Mbps") + parser.add_argument('--min_rx_bps', help='--min_rx_bps sets threshold for read bps test', default="100Mbps") parser.add_argument('--directory', help='--directory directory to read/write in. Absolute path suggested', default="AUTO") parser.add_argument('--server_mount', help='--server_mount The server to mount, ex: 192.168.100.5/exports/test1', default="10.40.0.1:/var/tmp/test") @@ -213,7 +258,7 @@ def main(): test_duration=args.test_duration, upstream_port=args.upstream_port, _debug_on=args.debug, fio_type=args.fio_type, min_read=args.min_read, max_read=args.max_read, min_write=args.min_write, max_write=args.max_write, - directory=args.directory) + directory=args.directory, min_rx_bps=args.min_rx_bps, min_tx_bps=args.min_tx_bps) ip_test.cleanup(station_list) ip_test.build() if not ip_test.passes(): @@ -225,6 +270,7 @@ def main(): print(ip_test.get_fail_message()) exit(1) time.sleep(30) + exit(1) ip_test.cleanup(station_list) if ip_test.passes(): print("Full test passed, all endpoints had increased bytes-rd throughout test duration")