diff options
Diffstat (limited to 'test/mocks/mass-pnf-sim/MassPnfSim.py')
-rwxr-xr-x | test/mocks/mass-pnf-sim/MassPnfSim.py | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/test/mocks/mass-pnf-sim/MassPnfSim.py b/test/mocks/mass-pnf-sim/MassPnfSim.py new file mode 100755 index 000000000..1901cb0aa --- /dev/null +++ b/test/mocks/mass-pnf-sim/MassPnfSim.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python3 +import logging +import subprocess +import time +from json import dumps + +class MassPnfSim(): + + log_lvl = logging.INFO + + def __init__(self, args): + self.args = args + self.logger = logging.getLogger(__name__) + self.logger.setLevel(self.log_lvl) + + def bootstrap(self): + self.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(self.args.count): + self.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(self.args.ipstart + ip_offset + instance_ip_offset)}) + ip_offset += 1 + + self.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) + self.logger.info(f'\tCreating folder: {completed.stdout}') + completed = subprocess.run( + 'cp -r pnf-sim-lightweight/* ' + + foldername, + shell=True) + self.logger.info(f'\tCloning folder: {completed.stdout}') + + composercmd = " ".join([ + "./simulator.sh compose", + ip['gw'], + ip['subnet'], + str(i), + self.args.urlves, + ip['PnfSim'], + str(self.args.ipfileserver), + self.args.typefileserver, + str(PortSftp), + str(PortFtps), + ip['ftps'], + ip['sftp'], + str(ftps_pasv_port_start), + str(ftps_pasv_port_end) + ]) + self.logger.debug(f"Script cmdline: {composercmd}") + + completed = subprocess.run( + 'set -x; cd ' + + foldername + + '; ' + + composercmd, + shell=True) + self.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 + + self.logger.info(f'Done setting up instance #{i}') + + completed = subprocess.run('set -x; cd pnf-sim-lightweight; ./simulator.sh build ', shell=True) + self.logger.info(f"Build docker image: {completed.stdout}") + + def clean(self): + completed = subprocess.run('rm -rf ./pnf-sim-lw-*', shell=True) + self.logger.info(f'Deleting: {completed.stdout}') + + def start(self): + for i in range(self.args.count): + foldername = f"pnf-sim-lw-{i}" + + completed = subprocess.run( + 'set -x ; cd ' + + foldername + + "; bash -x ./simulator.sh start", + shell=True) + self.logger.info(f'Starting: {completed.stdout}') + time.sleep(5) + + def status(self): + for i in range(self.args.count): + foldername = f"pnf-sim-lw-{i}" + + completed = subprocess.run( + 'cd ' + + foldername + + "; ./simulator.sh status", + shell=True) + self.logger.info(f'Status: {completed.stdout}') + + def stop(self): + for i in range(self.args.count): + foldername = f"pnf-sim-lw-{i}" + + completed = subprocess.run( + 'cd ' + + foldername + + f"; ./simulator.sh stop {i}", + shell=True) + self.logger.info(f'Stopping: {completed.stdout}') + + def trigger(self): + self.logger.info("Triggering VES sending:") + + for i in range(self.args.count): + foldername = f"pnf-sim-lw-{i}" + + completed = subprocess.run( + 'cd ' + + foldername + + "; ./simulator.sh trigger-simulator", + shell=True) + self.logger.info(f'Status: {completed.stdout}') + + def trigger_custom(self): + self.logger.info("Triggering VES sending by a range of simulators:") + + for i in range(self.args.triggerstart, self.args.triggerend+1): + foldername = f"pnf-sim-lw-{i}" + self.logger.info(f"Instance being processed: {i}") + + completed = subprocess.run( + 'cd ' + + foldername + + "; ./simulator.sh trigger-simulator", + shell=True) + self.logger.info(f'Status: {completed.stdout}') |