diff options
Diffstat (limited to 'VNFs/DPPD-PROX/helper-scripts/rapid/runrapid.py')
-rwxr-xr-x | VNFs/DPPD-PROX/helper-scripts/rapid/runrapid.py | 154 |
1 files changed, 100 insertions, 54 deletions
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/runrapid.py b/VNFs/DPPD-PROX/helper-scripts/rapid/runrapid.py index 3bdb91d1..7ec270a1 100755 --- a/VNFs/DPPD-PROX/helper-scripts/rapid/runrapid.py +++ b/VNFs/DPPD-PROX/helper-scripts/rapid/runrapid.py @@ -22,6 +22,7 @@ from __future__ import division from future import standard_library standard_library.install_aliases() from builtins import object +import os import sys import concurrent.futures from concurrent.futures import ALL_COMPLETED @@ -42,6 +43,12 @@ class RapidTestManager(object): """ RapidTestManager Class """ + def __init__(self): + """ + Init Function + """ + self.machines = [] + def __del__(self): for machine in self.machines: machine.close_prox() @@ -52,18 +59,26 @@ class RapidTestManager(object): def run_tests(self, test_params): test_params = RapidConfigParser.parse_config(test_params) - RapidLog.debug(test_params) monitor_gen = monitor_sut = False background_machines = [] sut_machine = gen_machine = None - self.machines = [] configonly = test_params['configonly'] + machine_names = [] + machine_counter = {} for machine_params in test_params['machines']: + if machine_params['name'] not in machine_names: + machine_names.append(machine_params['name']) + machine_counter[machine_params['name']] = 1 + else: + machine_counter[machine_params['name']] += 1 + machine_params['name'] = '{}_{}'.format(machine_params['name'], + machine_counter[machine_params['name']]) if 'gencores' in machine_params.keys(): machine = RapidGeneratorMachine(test_params['key'], - test_params['user'], test_params['vim_type'], - test_params['rundir'], test_params['resultsdir'], - machine_params, configonly, test_params['ipv6']) + test_params['user'], test_params['password'], + test_params['vim_type'], test_params['rundir'], + test_params['resultsdir'], machine_params, configonly, + test_params['ipv6']) if machine_params['monitor']: if monitor_gen: RapidLog.exception("Can only monitor 1 generator") @@ -75,8 +90,9 @@ class RapidTestManager(object): background_machines.append(machine) else: machine = RapidMachine(test_params['key'], test_params['user'], - test_params['vim_type'], test_params['rundir'], - test_params['resultsdir'], machine_params, configonly) + test_params['password'], test_params['vim_type'], + test_params['rundir'], test_params['resultsdir'], + machine_params, configonly) if machine_params['monitor']: if monitor_sut: RapidLog.exception("Can only monitor 1 sut") @@ -86,52 +102,76 @@ class RapidTestManager(object): if machine_params['prox_socket']: sut_machine = machine self.machines.append(machine) - prox_executor = concurrent.futures.ThreadPoolExecutor(max_workers=len(self.machines)) - self.future_to_prox = {prox_executor.submit(machine.start_prox): machine for machine in self.machines} - if configonly: - concurrent.futures.wait(self.future_to_prox,return_when=ALL_COMPLETED) - sys.exit() - with concurrent.futures.ThreadPoolExecutor(max_workers=len(self.machines)) as executor: - future_to_connect_prox = {executor.submit(machine.connect_prox): machine for machine in self.machines} + RapidLog.debug(test_params) + try: + prox_executor = concurrent.futures.ThreadPoolExecutor(max_workers=len(self.machines)) + self.future_to_prox = {prox_executor.submit(machine.start_prox): machine for machine in self.machines} + if configonly: + concurrent.futures.wait(self.future_to_prox,return_when=ALL_COMPLETED) + sys.exit() + socket_executor = concurrent.futures.ThreadPoolExecutor(max_workers=len(self.machines)) + future_to_connect_prox = {socket_executor.submit(machine.connect_prox): machine for machine in self.machines} concurrent.futures.wait(future_to_connect_prox,return_when=ALL_COMPLETED) - result = 0 - for test_param in test_params['tests']: - RapidLog.info(test_param['test']) - if test_param['test'] in ['flowsizetest', 'TST009test', - 'fixed_rate', 'increment_till_fail']: - test = FlowSizeTest(test_param, test_params['lat_percentile'], - test_params['runtime'], - test_params['TestName'], - test_params['environment_file'], gen_machine, - sut_machine, background_machines) - elif test_param['test'] in ['corestats']: - test = CoreStatsTest(test_param, test_params['runtime'], - test_params['TestName'], - test_params['environment_file'], self.machines) - elif test_param['test'] in ['portstats']: - test = PortStatsTest(test_param, test_params['runtime'], - test_params['TestName'], - test_params['environment_file'], self.machines) - elif test_param['test'] in ['impairtest']: - test = ImpairTest(test_param, test_params['lat_percentile'], - test_params['runtime'], - test_params['TestName'], - test_params['environment_file'], gen_machine, - sut_machine) - elif test_param['test'] in ['irqtest']: - test = IrqTest(test_param, test_params['runtime'], - test_params['TestName'], - test_params['environment_file'], self.machines) - elif test_param['test'] in ['warmuptest']: - test = WarmupTest(test_param, gen_machine) - else: - RapidLog.debug('Test name ({}) is not valid:'.format( - test_param['test'])) - single_test_result, result_details = test.run() - result = result + single_test_result - for machine in self.machines: - machine.close_prox() - concurrent.futures.wait(self.future_to_prox,return_when=ALL_COMPLETED) + result = 0 + for test_param in test_params['tests']: + RapidLog.info(test_param['test']) + if test_param['test'] in ['flowsizetest', 'TST009test', + 'fixed_rate', 'increment_till_fail']: + test = FlowSizeTest(test_param, + test_params['lat_percentile'], + test_params['runtime'], + test_params['TestName'], + test_params['environment_file'], + gen_machine, + sut_machine, background_machines, + test_params['sleep_time']) + elif test_param['test'] in ['corestatstest']: + test = CoreStatsTest(test_param, + test_params['runtime'], + test_params['TestName'], + test_params['environment_file'], + self.machines) + elif test_param['test'] in ['portstatstest']: + test = PortStatsTest(test_param, + test_params['runtime'], + test_params['TestName'], + test_params['environment_file'], + self.machines) + elif test_param['test'] in ['impairtest']: + test = ImpairTest(test_param, + test_params['lat_percentile'], + test_params['runtime'], + test_params['TestName'], + test_params['environment_file'], + gen_machine, + sut_machine, background_machines) + elif test_param['test'] in ['irqtest']: + test = IrqTest(test_param, + test_params['runtime'], + test_params['TestName'], + test_params['environment_file'], + self.machines) + elif test_param['test'] in ['warmuptest']: + test = WarmupTest(test_param, + gen_machine) + else: + RapidLog.debug('Test name ({}) is not valid:'.format( + test_param['test'])) + single_test_result, result_details = test.run() + result = result + single_test_result + for machine in self.machines: + machine.close_prox() + concurrent.futures.wait(self.future_to_prox, + return_when=ALL_COMPLETED) + except (ConnectionError, KeyboardInterrupt) as e: + result = result_details = None + socket_executor.shutdown(wait=False) + socket_executor._threads.clear() + prox_executor.shutdown(wait=False) + prox_executor._threads.clear() + concurrent.futures.thread._threads_queues.clear() + RapidLog.error("Test interrupted: {} {}".format( + type(e).__name__,e)) return (result, result_details) def main(): @@ -141,8 +181,14 @@ def main(): # When no cli is used, the process_cli can be replaced by code modifying # test_params test_params = RapidCli.process_cli(test_params) - log_file = 'RUN{}.{}.log'.format(test_params['environment_file'], - test_params['test_file']) + _, test_file_name = os.path.split(test_params['test_file']) + _, environment_file_name = os.path.split(test_params['environment_file']) + if 'resultsdir' in test_params: + res_dir = test_params['resultsdir'] + log_file = '{}/RUN{}.{}.log'.format(res_dir,environment_file_name, + test_file_name) + else: + log_file = 'RUN{}.{}.log'.format(environment_file_name, test_file_name) RapidLog.log_init(log_file, test_params['loglevel'], test_params['screenloglevel'] , test_params['version'] ) test_manager = RapidTestManager() |