Merge branch 'master' of github.com:greearb/lanforge-scripts

This commit is contained in:
Dipti
2020-11-23 20:26:25 -08:00
3 changed files with 123 additions and 48 deletions

View File

@@ -733,6 +733,9 @@ class Realm(LFCliBase):
def new_mvlan_profile(self): def new_mvlan_profile(self):
return MACVLANProfile(self.lfclient_host, self.lfclient_port, local_realm=self, debug_=self.debug) return MACVLANProfile(self.lfclient_host, self.lfclient_port, local_realm=self, debug_=self.debug)
def new_test_group_profile(self):
return TestGroupProfile(self.lfclient_host, self.lfclient_port, local_realm=self, debug_=self.debug)
class MULTICASTProfile(LFCliBase): class MULTICASTProfile(LFCliBase):
def __init__(self, lfclient_host, lfclient_port, local_realm, def __init__(self, lfclient_host, lfclient_port, local_realm,
report_timer_=3000, name_prefix_="Unset", number_template_="00000", debug_=False): report_timer_=3000, name_prefix_="Unset", number_template_="00000", debug_=False):
@@ -2169,6 +2172,51 @@ class DUTProfile(LFCliBase):
"text-64": notebytes.decode('ascii') "text-64": notebytes.decode('ascii')
}, self.debug) }, self.debug)
class TestGroupProfile(LFCliBase):
def __init__(self, lfclient_host, lfclient_port, local_realm, test_group_name=None, debug_=False):
super().__init__(lfclient_host, lfclient_port, debug_, _halt_on_error=True)
self.local_realm = local_realm
self.test_group_name = test_group_name
self.cx_list = []
def start_group(self, group_name):
if group_name is not None:
if group_name == self.test_group_name:
self.local_realm.json_post("/cli-json/start_group", {"name": group_name})
else:
raise ValueError("test_group name must be set.")
def quiesce_group(self, group_name=None):
if group_name is not None:
if group_name == self.test_group_name:
self.local_realm.json_post("/cli-json/quiesce_group", {"name": group_name})
else:
raise ValueError("test_group name must be set.")
def stop_group(self, group_name=None):
if group_name is not None:
if group_name == self.test_group_name:
self.local_realm.json_post("/cli-json/stop_group", {"name": group_name})
else:
raise ValueError("test_group name must be set.")
def create_group(self, group_name=None):
if group_name is not None:
self.test_group_name = group_name
self.local_realm.json_post("/cli-json/add_group", {"name": self.test_group_name})
for i in self.cx_list:
self.local_realm.json_post("/cli-json/add_tgcx", {"tgname": self.test_group_name, "cxname": i})
time.sleep(1)
else:
raise ValueError("group_name must be specified.")
def remove_group(self, group_name=None):
if group_name is not None:
if group_name == self.test_group_name:
self.local_realm.json_post("/cli-json/rm_group", {"name": group_name})
else:
raise ValueError("test_group name must be set.")
class FIOEndpProfile(LFCliBase): class FIOEndpProfile(LFCliBase):
""" """
@@ -2212,7 +2260,6 @@ class FIOEndpProfile(LFCliBase):
self.created_cx = {} self.created_cx = {}
self.created_endp = [] self.created_endp = []
def start_cx(self): def start_cx(self):
print("Starting CXs...") print("Starting CXs...")
for cx_name in self.created_cx.keys(): for cx_name in self.created_cx.keys():
@@ -2304,12 +2351,13 @@ class FIOEndpProfile(LFCliBase):
"payload_pattern": self.pattern, "payload_pattern": self.pattern,
} }
# Read direction is copy of write only directory
if self.io_direction == "read": if self.io_direction == "read":
endp_data["prefix"] = "wo_" + name + "_fio" endp_data["prefix"] = "wo_" + name + "_fio"
endp_data["directory"] = "/mnt/lf/wo_" + name + "_fio" endp_data["directory"] = "/mnt/lf/wo_" + name + "_fio"
url = "cli-json/add_file_endp" url = "cli-json/add_file_endp"
self.local_realm.json_post(url, endp_data, debug_=debug_, suppress_related_commands_=suppress_related_commands_) self.local_realm.json_post(url, endp_data, debug_=True, suppress_related_commands_=suppress_related_commands_)
time.sleep(sleep_time) time.sleep(sleep_time)
data = { data = {
@@ -2320,6 +2368,13 @@ class FIOEndpProfile(LFCliBase):
self.local_realm.json_post("cli-json/set_fe_info", data, debug_=debug_, self.local_realm.json_post("cli-json/set_fe_info", data, debug_=debug_,
suppress_related_commands_=suppress_related_commands_) suppress_related_commands_=suppress_related_commands_)
self.local_realm.json_post("/cli-json/nc_show_endpoints", {"endpoint": "all"})
for port_name in ports:
if len(self.local_realm.name_to_eid(port_name)) == 3:
shelf = self.local_realm.name_to_eid(port_name)[0]
resource = self.local_realm.name_to_eid(port_name)[1]
name = self.local_realm.name_to_eid(port_name)[2]
endp_data = { endp_data = {
"alias": "CX_" + self.cx_prefix + name + "_fio", "alias": "CX_" + self.cx_prefix + name + "_fio",
"test_mgr": "default_tm", "test_mgr": "default_tm",
@@ -2329,6 +2384,7 @@ class FIOEndpProfile(LFCliBase):
cx_post_data.append(endp_data) cx_post_data.append(endp_data)
self.created_cx[self.cx_prefix + name + "_fio"] = "CX_" + self.cx_prefix + name + "_fio" self.created_cx[self.cx_prefix + name + "_fio"] = "CX_" + self.cx_prefix + name + "_fio"
# time.sleep(3)
for cx_data in cx_post_data: for cx_data in cx_post_data:
url = "/cli-json/add_cx" url = "/cli-json/add_cx"
self.local_realm.json_post(url, cx_data, debug_=debug_, suppress_related_commands_=suppress_related_commands_) self.local_realm.json_post(url, cx_data, debug_=debug_, suppress_related_commands_=suppress_related_commands_)
@@ -2481,7 +2537,7 @@ class MACVLANProfile(LFCliBase):
LFUtils.wait_until_ports_appear(base_url=self.lfclient_url, port_list=self.created_macvlans) LFUtils.wait_until_ports_appear(base_url=self.lfclient_url, port_list=self.created_macvlans)
print(self.created_macvlans) print(self.created_macvlans)
# time.sleep(sleep_time) time.sleep(5)
for i in range(len(self.created_macvlans)): for i in range(len(self.created_macvlans)):
eid = self.local_realm.name_to_eid(self.created_macvlans[i]) eid = self.local_realm.name_to_eid(self.created_macvlans[i])
@@ -2503,7 +2559,7 @@ class MACVLANProfile(LFCliBase):
self.local_realm.rm_port(port_eid, check_exists=True) self.local_realm.rm_port(port_eid, check_exists=True)
time.sleep(.2) time.sleep(.2)
# And now see if they are gone # And now see if they are gone
LFUtils.wait_until_ports_disappear(base_url=self.lfclient_url, port_list=self.created_macvlans)
def admin_up(self): def admin_up(self):
for macvlan in self.created_macvlans: for macvlan in self.created_macvlans:

View File

@@ -18,6 +18,7 @@ import argparse
import realm import realm
import time import time
import datetime import datetime
import pprint
class FileIOTest(LFCliBase): class FileIOTest(LFCliBase):
@@ -76,7 +77,7 @@ class FileIOTest(LFCliBase):
#self.max_write_rate_bps = self.parse_size_bps(max_write_rate_bps) #self.max_write_rate_bps = self.parse_size_bps(max_write_rate_bps)
self.local_realm = realm.Realm(lfclient_host=self.host, lfclient_port=self.port) self.local_realm = realm.Realm(lfclient_host=self.host, lfclient_port=self.port)
self.endp_profile = self.local_realm.new_fio_endp_profile() self.wo_profile = self.local_realm.new_fio_endp_profile()
self.mvlan_profile = self.local_realm.new_mvlan_profile() self.mvlan_profile = self.local_realm.new_mvlan_profile()
if len(self.sta_list) > 0: if len(self.sta_list) > 0:
@@ -88,19 +89,19 @@ class FileIOTest(LFCliBase):
self.station_profile.number_template_ = self.number_template self.station_profile.number_template_ = self.number_template
self.station_profile.mode = 0 self.station_profile.mode = 0
self.endp_profile.fs_type = fs_type self.wo_profile.fs_type = fs_type
self.endp_profile.min_rw_size = LFUtils.parse_size(min_rw_size) self.wo_profile.min_rw_size = LFUtils.parse_size(min_rw_size)
self.endp_profile.max_rw_size = LFUtils.parse_size(max_rw_size) self.wo_profile.max_rw_size = LFUtils.parse_size(max_rw_size)
self.endp_profile.min_file_size = LFUtils.parse_size(min_file_size) self.wo_profile.min_file_size = LFUtils.parse_size(min_file_size)
self.endp_profile.min_file_size = LFUtils.parse_size(min_file_size) self.wo_profile.min_file_size = LFUtils.parse_size(min_file_size)
self.endp_profile.min_read_rate_bps = LFUtils.parse_size(min_read_rate_bps) self.wo_profile.min_read_rate_bps = LFUtils.parse_size(min_read_rate_bps)
self.endp_profile.max_read_rate_bps = LFUtils.parse_size(max_read_rate_bps) self.wo_profile.max_read_rate_bps = LFUtils.parse_size(max_read_rate_bps)
self.endp_profile.min_write_rate_bps = LFUtils.parse_size(min_write_rate_bps) self.wo_profile.min_write_rate_bps = LFUtils.parse_size(min_write_rate_bps)
self.endp_profile.max_write_rate_bps = LFUtils.parse_size(max_write_rate_bps) self.wo_profile.max_write_rate_bps = LFUtils.parse_size(max_write_rate_bps)
self.endp_profile.directory = directory self.wo_profile.directory = directory
self.endp_profile.server_mount = server_mount self.wo_profile.server_mount = server_mount
self.ro_profile = self.endp_profile.create_ro_profile() self.ro_profile = self.wo_profile.create_ro_profile()
self.mvlan_profile.num_macvlans = int(num_ports) self.mvlan_profile.num_macvlans = int(num_ports)
self.mvlan_profile.desired_macvlans = self.port_list self.mvlan_profile.desired_macvlans = self.port_list
@@ -111,6 +112,11 @@ class FileIOTest(LFCliBase):
self.mvlan_profile.gateway = gateway self.mvlan_profile.gateway = gateway
self.created_ports = [] self.created_ports = []
self.ro_tg_profile = self.local_realm.new_test_group_profile()
self.ro_tg_profile.test_group_name = "ro_profile"
self.wo_tg_profile = self.local_realm.new_test_group_profile()
self.wo_tg_profile.test_group_name = "wo_profile"
def __compare_vals(self, val_list): def __compare_vals(self, val_list):
passes = 0 passes = 0
expected_passes = 0 expected_passes = 0
@@ -124,7 +130,7 @@ class FileIOTest(LFCliBase):
# self.endp_profile.min_read_rate_bps, # self.endp_profile.min_read_rate_bps,
# val_list[item]['read-bps'] > self.endp_profile.min_read_rate_bps) # val_list[item]['read-bps'] > self.endp_profile.min_read_rate_bps)
if val_list[item]['read-bps'] > self.endp_profile.min_read_rate_bps: if val_list[item]['read-bps'] > self.wo_profile.min_read_rate_bps:
passes += 1 passes += 1
else: else:
# print("TEST", item, # print("TEST", item,
@@ -132,7 +138,7 @@ class FileIOTest(LFCliBase):
# self.endp_profile.min_write_rate_bps, # self.endp_profile.min_write_rate_bps,
# val_list[item]['write-bps'] > self.endp_profile.min_write_rate_bps) # val_list[item]['write-bps'] > self.endp_profile.min_write_rate_bps)
if val_list[item]['write-bps'] > self.endp_profile.min_write_rate_bps: if val_list[item]['write-bps'] > self.wo_profile.min_write_rate_bps:
passes += 1 passes += 1
if passes == expected_passes: if passes == expected_passes:
return True return True
@@ -143,11 +149,12 @@ class FileIOTest(LFCliBase):
def __get_values(self): def __get_values(self):
time.sleep(3) time.sleep(3)
cx_list = self.json_get("fileio/%s,%s?fields=write-bps,read-bps" % (','.join(self.endp_profile.created_cx.keys()), ','.join(self.ro_profile.created_cx.keys())), cx_list = self.json_get("fileio/%s,%s?fields=write-bps,read-bps" % (','.join(self.wo_profile.created_cx.keys()), ','.join(self.ro_profile.created_cx.keys())),
debug_=self.debug) debug_=self.debug)
# print(cx_list) # print(cx_list)
# print("==============\n", cx_list, "\n==============") # print("==============\n", cx_list, "\n==============")
cx_map = {} cx_map = {}
# pprint.pprint(cx_list)
if cx_list is not None: if cx_list is not None:
cx_list = cx_list['endpoint'] cx_list = cx_list['endpoint']
for i in cx_list: for i in cx_list:
@@ -165,7 +172,7 @@ class FileIOTest(LFCliBase):
self.mvlan_profile.create(admin_down=True, sleep_time=.5, debug=self.debug) self.mvlan_profile.create(admin_down=True, sleep_time=.5, debug=self.debug)
self.created_ports += self.mvlan_profile.created_macvlans self.created_ports += self.mvlan_profile.created_macvlans
if len(self.sta_list) > 0: if not self.use_macvlans:
self.station_profile.use_security(self.security, self.ssid, self.password) self.station_profile.use_security(self.security, self.ssid, self.password)
self.station_profile.set_number_template(self.number_template) self.station_profile.set_number_template(self.number_template)
print("Creating stations") print("Creating stations")
@@ -177,17 +184,23 @@ class FileIOTest(LFCliBase):
self.created_ports += self.station_profile.station_names self.created_ports += self.station_profile.station_names
self.endp_profile.create(ports=self.created_ports, sleep_time=.5, debug_=self.debug, self.wo_profile.create(ports=self.created_ports, sleep_time=.5, debug_=self.debug,
suppress_related_commands_=None) suppress_related_commands_=None)
self.ro_profile.create(ports=self.created_ports, sleep_time=.5, debug_=self.debug, self.ro_profile.create(ports=self.created_ports, sleep_time=.5, debug_=self.debug,
suppress_related_commands_=None) suppress_related_commands_=None)
def start(self, print_pass=False, print_fail=False): self.ro_tg_profile.cx_list = self.ro_profile.created_cx.values()
self.wo_tg_profile.cx_list = self.wo_profile.created_cx.values()
self.ro_tg_profile.create_group(group_name="ro_group")
self.wo_tg_profile.create_group(group_name="wo_group")
def start(self, print_pass=True, print_fail=True):
temp_ports = self.port_list.copy() temp_ports = self.port_list.copy()
#temp_stas.append(self.local_realm.name_to_eid(self.upstream_port)[2]) #temp_stas.append(self.local_realm.name_to_eid(self.upstream_port)[2])
self.station_profile.admin_up() if not self.use_macvlans:
self.mvlan_profile.admin_up() self.station_profile.admin_up()
exit(1) else:
self.mvlan_profile.admin_up()
if self.local_realm.wait_for_ip(temp_ports): if self.local_realm.wait_for_ip(temp_ports):
self._pass("All ports got IPs", print_pass) self._pass("All ports got IPs", print_pass)
else: else:
@@ -195,9 +208,9 @@ class FileIOTest(LFCliBase):
cur_time = datetime.datetime.now() cur_time = datetime.datetime.now()
# print("Got Values") # print("Got Values")
end_time = self.local_realm.parse_time(self.test_duration) + cur_time end_time = self.local_realm.parse_time(self.test_duration) + cur_time
self.endp_profile.start_cx() self.ro_tg_profile.start_group(group_name="ro_group")
time.sleep(2) time.sleep(2)
self.ro_profile.start_cx() self.wo_tg_profile.start_group(group_name="wo_group")
passes = 0 passes = 0
expected_passes = 0 expected_passes = 0
print("Starting Test...") print("Starting Test...")
@@ -225,18 +238,28 @@ class FileIOTest(LFCliBase):
self._pass("PASS: All tests passes", print_pass) self._pass("PASS: All tests passes", print_pass)
def stop(self): def stop(self):
self.endp_profile.stop_cx() self.wo_tg_profile.stop_group(group_name="wo_group")
self.ro_profile.stop_cx() self.ro_tg_profile.stop_group(group_name="ro_group")
self.station_profile.admin_down() if not self.use_macvlans:
self.mvlan_profile.admin_down() self.station_profile.admin_down()
else:
self.mvlan_profile.admin_down()
def cleanup(self, sta_list=None): def cleanup(self, port_list=None):
self.endp_profile.cleanup() self.ro_tg_profile.remove_group(group_name="wo_group")
time.sleep(1)
self.wo_profile.cleanup()
self.ro_tg_profile.remove_group(group_name="ro_group")
time.sleep(1)
self.ro_profile.cleanup() self.ro_profile.cleanup()
if len(self.sta_list) > 0:
self.station_profile.cleanup(sta_list) if not self.use_macvlans:
LFUtils.wait_until_ports_disappear(base_url=self.lfclient_url, port_list=sta_list, debug=self.debug) self.station_profile.cleanup(port_list)
self.mvlan_profile.cleanup() else:
self.mvlan_profile.cleanup()
# LFUtils.wait_until_ports_disappear(base_url=self.lfclient_url, port_list=port_list, debug=self.debug)
def main(): def main():
@@ -253,9 +276,11 @@ def main():
test_fileio.py: test_fileio.py:
-------------------- --------------------
Generic command layout: Generic command layout:
python ./test_fileio.py --upstream_port <port> --radio <radio 0> <stations> <ssid> <ssid password> <security type: wpa2, open, wpa3> --debug ./test_fileio.py --security <security type: wpa2, open, wpa3> --macvlan_parent <port> --num_ports <num ports> --use_macvlans
--first_mvlan_ip <first ip in series> --netmask <netmask to use> --gateway <gateway ip addr>
python3 ./test_fileio.py --upstream_port eth1 --fio_type fe_nfs4 --min_read 1Mbps --min_write 1Gbps --server_mount 192.168.93.195:/tmp/test ./test_fileio.py --security wpa2 --macvlan_parent eth2 --num_ports 3 --use_macvlans --first_mvlan_ip 192.168.92.13
--netmask 255.255.255.0 --gateway 192.168.92.1
''') ''')
parser.add_argument('--test_duration', help='sets the duration of the test', default="5m") parser.add_argument('--test_duration', help='sets the duration of the test', default="5m")
@@ -315,7 +340,7 @@ python3 ./test_fileio.py --upstream_port eth1 --fio_type fe_nfs4 --min_read 1Mbp
dhcp = True dhcp = True
else: else:
dhcp = False dhcp = False
print(port_list) # print(port_list)
ip_test = FileIOTest(args.mgr, ip_test = FileIOTest(args.mgr,
args.mgr_port, args.mgr_port,
@@ -352,7 +377,6 @@ python3 ./test_fileio.py --upstream_port eth1 --fio_type fe_nfs4 --min_read 1Mbp
ip_test.build() ip_test.build()
if not ip_test.passes(): if not ip_test.passes():
print(ip_test.get_fail_message()) print(ip_test.get_fail_message())
exit(1)
ip_test.start(False, False) ip_test.start(False, False)
ip_test.stop() ip_test.stop()
if not ip_test.passes(): if not ip_test.passes():

View File

@@ -183,11 +183,6 @@ def main():
prog='test_ipv4_variable_time.py', prog='test_ipv4_variable_time.py',
# formatter_class=argparse.RawDescriptionHelpFormatter, # formatter_class=argparse.RawDescriptionHelpFormatter,
formatter_class=argparse.RawTextHelpFormatter, formatter_class=argparse.RawTextHelpFormatter,
epilog='''\
Useful Information:
1. TBD
''',
description='''\ description='''\
test_ipv4_variable_time.py: test_ipv4_variable_time.py:
-------------------- --------------------