from yaml import load, SafeLoader
from glob import glob
from docker import from_env
-from requests import get
+from requests import get, codes
from requests.exceptions import MissingSchema, InvalidSchema, InvalidURL, ConnectionError, ConnectTimeout
def validate_url(url):
log_lvl = logging.INFO
sim_config = 'config/config.yml'
+ sim_port = 5000
+ sim_base_url = 'http://{}:' + str(sim_port) + '/simulator'
+ sim_container_name = 'pnf-simulator'
def __init__(self, args):
self.args = args
self.logger.setLevel(self.log_lvl)
self.sim_dirname_pattern = "pnf-sim-lw-"
self.mvn_build_cmd = 'mvn clean package docker:build -Dcheckstyle.skip'
+ self.docker_compose_status_cmd = 'docker-compose ps'
self.existing_sim_instances = self._enum_sim_instances()
# Validate 'trigger_custom' subcommand options
def start(self):
pass
- @_MassPnfSim_Decorators.do_action('Getting', './simulator.sh status')
def status(self):
- pass
+ if not self.args.count:
+ iter_range = [self.existing_sim_instances]
+ else:
+ iter_range = [self.args.count]
+ for i in range(*iter_range):
+ self.logger.info(f'Getting {self.sim_dirname_pattern}{i} instance status:')
+ if f"{self.sim_container_name}-{i}" in self._get_docker_containers():
+ try:
+ sim_ip = self._get_sim_instance_data(i)
+ self.logger.info(f' PNF-Sim IP: {sim_ip}')
+ self._run_cmd(self.docker_compose_status_cmd, f"{self.sim_dirname_pattern}{i}")
+ sim_response = get('{}/status'.format(self.sim_base_url).format(sim_ip))
+ if sim_response.status_code == codes.ok:
+ self.logger.info(sim_response.text)
+ else:
+ self.logger.error(f'Simulator request returned http code {sim_response.status_code}')
+ except KeyError:
+ self.logger.error(f'Unable to get sim instance IP from {self.sim_config}')
+ else:
+ self.logger.info(' Simulator containers are down')
@_MassPnfSim_Decorators.do_action('Stopping', './simulator.sh stop')
def stop(self):
start_port += 2
print(yml['ippnfsim'])
-def test_bootstrap_status(args_status, capfd):
+def test_bootstrap_status(args_status, caplog):
MassPnfSim(args_status).status()
- msg = capfd.readouterr()
for _ in range(SIM_INSTANCES):
- assert 'Simulator containers are down' in msg.out
- assert 'Simulator response' not in msg.out
+ assert 'Simulator containers are down' in caplog.text
+ assert 'Simulator response' not in caplog.text
+ caplog.clear()
def test_start(args_start, caplog, capfd):
MassPnfSim(args_start).start()
assert 'Starting simulator containers' in msg.out
caplog.clear()
-def test_start_status(args_status, docker_containers, capfd):
+def test_start_status(args_status, docker_containers, caplog):
sleep(5) # Wait for the simulator to settle
MassPnfSim(args_status).status()
- msg = capfd.readouterr()
for instance in range(SIM_INSTANCES):
- assert '"simulatorStatus":"NOT RUNNING"' in msg.out
- assert '"simulatorStatus":"RUNNING"' not in msg.out
+ assert '"simulatorStatus":"NOT RUNNING"' in caplog.text
+ assert '"simulatorStatus":"RUNNING"' not in caplog.text
assert f"{PNF_SIM_CONTAINER_NAME}{instance}" in docker_containers
+ caplog.clear()
def test_start_idempotence(args_start, capfd):
'''Verify start idempotence'''
assert 'Simulator started' in msg.out
caplog.clear()
-def test_trigger_status(args_status, capfd):
+def test_trigger_status(args_status, capfd, caplog):
MassPnfSim(args_status).status()
msg = capfd.readouterr()
for _ in range(SIM_INSTANCES):
- assert '"simulatorStatus":"RUNNING"' in msg.out
- assert '"simulatorStatus":"NOT RUNNING"' not in msg.out
+ assert '"simulatorStatus":"RUNNING"' in caplog.text
+ assert '"simulatorStatus":"NOT RUNNING"' not in caplog.text
assert 'Up' in msg.out
assert 'Exit' not in msg.out
+ caplog.clear()
def test_trigger_idempotence(args_trigger, capfd):
MassPnfSim(args_trigger).trigger()