Drop shell wrapper for getting simulators status 19/108619/2
authorBartek Grzybowski <b.grzybowski@partner.samsung.com>
Mon, 1 Jun 2020 10:38:49 +0000 (12:38 +0200)
committerMorgan Richomme <morgan.richomme@orange.com>
Tue, 2 Jun 2020 15:13:29 +0000 (15:13 +0000)
Change-Id: Id7c3c614d472d8ee01533e9bd146f258813e7cbe
Issue-ID: INT-1606
Signed-off-by: Bartek Grzybowski <b.grzybowski@partner.samsung.com>
test/mocks/mass-pnf-sim/MassPnfSim.py
test/mocks/mass-pnf-sim/test_lifecycle.py

index f932c82..d106867 100755 (executable)
@@ -10,7 +10,7 @@ from json import dumps
 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):
@@ -107,6 +107,9 @@ class MassPnfSim:
 
     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
@@ -114,6 +117,7 @@ class MassPnfSim:
         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
@@ -250,9 +254,27 @@ class MassPnfSim:
     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):
index 581b022..c61b72d 100644 (file)
@@ -60,12 +60,12 @@ def test_bootstrap(args_bootstrap, parser, caplog):
         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()
@@ -78,14 +78,14 @@ def test_start(args_start, caplog, capfd):
         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'''
@@ -105,14 +105,15 @@ def test_trigger(args_trigger, caplog, capfd):
         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()