aboutsummaryrefslogtreecommitdiffstats
path: root/test/mocks/mass-pnf-sim/MassPnfSim.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/mocks/mass-pnf-sim/MassPnfSim.py')
-rwxr-xr-xtest/mocks/mass-pnf-sim/MassPnfSim.py157
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}')