From feb93cdb3e2e842affe1a5de171c1242b44add70 Mon Sep 17 00:00:00 2001 From: Bartek Grzybowski Date: Mon, 11 May 2020 04:51:37 -0700 Subject: Improve code testability A module is created with specific class methods to perform particular simulator services' lifecycle operations. Change-Id: I467360ab304a00f049bf53c3958e42f445f2d75b Issue-ID: INT-1577 Signed-off-by: Bartek Grzybowski --- test/mocks/mass-pnf-sim/mass-pnf-sim.py | 178 +++++--------------------------- 1 file changed, 23 insertions(+), 155 deletions(-) (limited to 'test/mocks/mass-pnf-sim/mass-pnf-sim.py') diff --git a/test/mocks/mass-pnf-sim/mass-pnf-sim.py b/test/mocks/mass-pnf-sim/mass-pnf-sim.py index dd2345c51..bce02532d 100755 --- a/test/mocks/mass-pnf-sim/mass-pnf-sim.py +++ b/test/mocks/mass-pnf-sim/mass-pnf-sim.py @@ -1,12 +1,10 @@ #!/usr/bin/env python3 import argparse import sys -import subprocess -import ipaddress -import time import logging +import ipaddress +from MassPnfSim import MassPnfSim from requests import get -from json import dumps from requests.exceptions import MissingSchema, InvalidSchema, InvalidURL, ConnectionError, ConnectTimeout def validate_url(url): @@ -72,162 +70,32 @@ def get_parser(): # General options parser parser.add_argument('--verbose', help='Verbosity level', choices=['info', 'debug'], type=str, default='debug') - return parser if __name__ == '__main__': parser = get_parser() args = parser.parse_args() + log_lvl = getattr(logging, args.verbose.upper()) logger = logging.getLogger(__name__) - logger.setLevel(getattr(logging, args.verbose.upper())) - - if args.subcommand is None: + logger.setLevel(log_lvl) + MassPnfSim.log_lvl = log_lvl + + if args.subcommand is not None: + sim = MassPnfSim(args) + if args.subcommand == 'bootstrap' : + sim.bootstrap() + if args.subcommand == 'clean': + sim.clean() + if args.subcommand == 'start': + sim.start() + if args.subcommand == 'status': + sim.status() + if args.subcommand == 'stop': + sim.stop() + if args.subcommand == 'trigger': + sim.trigger() + if args.subcommand == 'trigger-custom': + sim.trigger_custom() + else: parser.print_usage() - sys.exit(0) - - if args.subcommand == 'bootstrap' : - logger.info("Bootstrapping PNF instances") - - start_port = 2000 - ftps_pasv_port_start = 8000 - ftps_pasv_port_num_of_ports = 10 - - ftps_pasv_port_end = ftps_pasv_port_start + ftps_pasv_port_num_of_ports - - for i in range(args.count): - logger.info(f"PNF simulator instance: {i}") - - # The IP ranges are in distance of 16 compared to each other. - # This is matching the /28 subnet mask used in the dockerfile inside. - instance_ip_offset = i * 16 - ip_properties = [ - 'subnet', - 'gw', - 'PnfSim', - 'ftps', - 'sftp' - ] - - ip_offset = 0 - ip = {} - for prop in ip_properties: - ip.update({prop: str(args.ipstart + ip_offset + instance_ip_offset)}) - ip_offset += 1 - - logger.debug(f'Instance #{i} properties:\n {dumps(ip, indent=4)}') - - PortSftp = start_port + 1 - PortFtps = start_port + 2 - start_port += 2 - - foldername = f"pnf-sim-lw-{i}" - completed = subprocess.run('mkdir ' + foldername, shell=True) - logger.info(f'\tCreating folder: {completed.stdout}') - completed = subprocess.run( - 'cp -r pnf-sim-lightweight/* ' + - foldername, - shell=True) - logger.info(f'\tCloning folder: {completed.stdout}') - - composercmd = " ".join([ - "./simulator.sh compose", - ip['gw'], - ip['subnet'], - str(i), - args.urlves, - ip['PnfSim'], - str(args.ipfileserver), - args.typefileserver, - str(PortSftp), - str(PortFtps), - ip['ftps'], - ip['sftp'], - str(ftps_pasv_port_start), - str(ftps_pasv_port_end) - ]) - logger.debug(f"Script cmdline: {composercmd}") - - completed = subprocess.run( - 'set -x; cd ' + - foldername + - '; ' + - composercmd, - shell=True) - logger.info(f'Cloning: {completed.stdout}') - - ftps_pasv_port_start += ftps_pasv_port_num_of_ports + 1 - ftps_pasv_port_end += ftps_pasv_port_num_of_ports + 1 - - logger.info(f'Done setting up instance #{i}') - - completed = subprocess.run('set -x; cd pnf-sim-lightweight; ./simulator.sh build ', shell=True) - logger.info(f"Build docker image: {completed.stdout}") - - if args.subcommand == 'clean': - completed = subprocess.run('rm -rf ./pnf-sim-lw-*', shell=True) - logger.info(f'Deleting: {completed.stdout}') - - if args.subcommand == 'start': - - for i in range(args.count): - foldername = f"pnf-sim-lw-{i}" - - completed = subprocess.run( - 'set -x ; cd ' + - foldername + - "; bash -x ./simulator.sh start", - shell=True) - logger.info(f'Starting: {completed.stdout}') - time.sleep(5) - - if args.subcommand == 'status': - - for i in range(args.count): - foldername = f"pnf-sim-lw-{i}" - - completed = subprocess.run( - 'cd ' + - foldername + - "; ./simulator.sh status", - shell=True) - logger.info(f'Status: {completed.stdout}') - - if args.subcommand == 'stop': - for i in range(args.count): - foldername = f"pnf-sim-lw-{i}" - - completed = subprocess.run( - 'cd ' + - foldername + - f"; ./simulator.sh stop {i}", - shell=True) - logger.info(f'Stopping: {completed.stdout}') - - - if args.subcommand == 'trigger': - logger.info("Triggering VES sending:") - - for i in range(args.count): - foldername = f"pnf-sim-lw-{i}" - - completed = subprocess.run( - 'cd ' + - foldername + - "; ./simulator.sh trigger-simulator", - shell=True) - logger.info(f'Status: {completed.stdout}') - - if args.subcommand == 'trigger-custom': - logger.info("Triggering VES sending by a range of simulators:") - - for i in range(args.triggerstart, args.triggerend+1): - foldername = f"pnf-sim-lw-{i}" - logger.info(f"Instance being processed: {i}") - - completed = subprocess.run( - 'cd ' + - foldername + - "; ./simulator.sh trigger-simulator", - shell=True) - logger.info(f'Status: {completed.stdout}') -- cgit 1.2.3-korg