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.py40
1 files changed, 32 insertions, 8 deletions
diff --git a/test/mocks/mass-pnf-sim/MassPnfSim.py b/test/mocks/mass-pnf-sim/MassPnfSim.py
index b6a32fe2f..42424e602 100755
--- a/test/mocks/mass-pnf-sim/MassPnfSim.py
+++ b/test/mocks/mass-pnf-sim/MassPnfSim.py
@@ -4,7 +4,7 @@ from subprocess import run, CalledProcessError
import argparse
import ipaddress
from sys import exit
-from os import chdir, getcwd, path
+from os import chdir, getcwd, path, popen, kill
from shutil import copytree, rmtree
from json import dumps
from yaml import load, SafeLoader
@@ -84,10 +84,6 @@ class MassPnfSim:
def do_action(action_string, cmd):
def action_decorator(method):
def action_wrap(self):
- cmd_local = cmd
- # Append instance # if action is 'stop'
- if method.__name__ == 'stop':
- cmd_local += " {}"
# Alter looping range if action is 'tigger_custom'
if method.__name__ == 'trigger_custom':
iter_range = [self.args.triggerstart, self.args.triggerend+1]
@@ -101,7 +97,7 @@ class MassPnfSim:
method(self)
for i in range(*iter_range):
self.logger.info(f'{action_string} {self.sim_dirname_pattern}{i} instance:')
- self._run_cmd(cmd_local.format(i), f"{self.sim_dirname_pattern}{i}")
+ self._run_cmd(cmd, f"{self.sim_dirname_pattern}{i}")
return action_wrap
return action_decorator
@@ -110,6 +106,7 @@ class MassPnfSim:
sim_port = 5000
sim_base_url = 'http://{}:' + str(sim_port) + '/simulator'
sim_container_name = 'pnf-simulator'
+ rop_script_name = 'ROP_file_creator.sh'
def __init__(self, args):
self.args = args
@@ -280,9 +277,36 @@ class MassPnfSim:
else:
self.logger.info(' Simulator containers are down')
- @_MassPnfSim_Decorators.do_action('Stopping', './simulator.sh stop')
def stop(self):
- pass
+ for i in range(*self._get_iter_range()):
+ self.logger.info(f'Stopping {self.sim_dirname_pattern}{i} instance:')
+ self.logger.info(f' PNF-Sim IP: {self._get_sim_instance_data(i)}')
+ # attempt killing ROP script
+ rop_pid = []
+ for ps_line in iter(popen(f'ps --no-headers -C {self.rop_script_name} -o pid,cmd').readline, ''):
+ # try getting ROP script pid
+ try:
+ ps_line_arr = ps_line.split()
+ assert self.rop_script_name in ps_line_arr[2]
+ assert ps_line_arr[3] == str(i)
+ rop_pid = ps_line_arr[0]
+ except AssertionError:
+ pass
+ else:
+ # get rop script childs, kill ROP script and all childs
+ childs = popen(f'pgrep -P {rop_pid}').read().split()
+ for pid in [rop_pid] + childs:
+ kill(int(pid), 15)
+ self.logger.info(f' ROP_file_creator.sh {i} successfully killed')
+ if not rop_pid:
+ # no process found
+ self.logger.warning(f' ROP_file_creator.sh {i} already not running')
+ # try tearing down docker-compose application
+ if f"{self.sim_container_name}-{i}" in self._get_docker_containers():
+ self._run_cmd('docker-compose down', self.sim_dirname_pattern + str(i))
+ self._run_cmd('docker-compose rm', self.sim_dirname_pattern + str(i))
+ else:
+ self.logger.warning(" Simulator containers are already down")
@_MassPnfSim_Decorators.do_action('Triggering', './simulator.sh trigger-simulator')
def trigger(self):