Support setting custom username/password for the file server service
[integration.git] / test / mocks / mass-pnf-sim / test_lifecycle.py
index 9c5ff89..d98ea48 100644 (file)
@@ -1,6 +1,6 @@
 from MassPnfSim import MassPnfSim
 from glob import glob
-from os import popen
+from os import popen, stat
 from yaml import load, SafeLoader
 from ipaddress import ip_address
 from test_settings import *
@@ -11,8 +11,8 @@ from time import sleep
 # thus they require that no simulator instances are bootstrapped and running
 # prior to running tests
 
-@pytest.mark.parametrize("action", ['start', 'stop', 'trigger', 'status'])
-def test_not_bootstrapped(action, caplog, args_start, args_stop, args_trigger, args_status): # pylint: disable=W0613
+@pytest.mark.parametrize("action", ['start', 'stop', 'trigger', 'status', 'stop_simulator'])
+def test_not_bootstrapped(action, caplog, args_start, args_stop, args_trigger, args_status, args_stop_simulator): # pylint: disable=W0613
     try:
         m = getattr(MassPnfSim(eval(f'args_{action}')), action)
         m()
@@ -54,75 +54,147 @@ def test_bootstrap(args_bootstrap, parser, caplog):
             yml = load(f, Loader=SafeLoader)
         assert URLVES == yml['urlves']
         assert TYPEFILESERVER == yml['typefileserver']
-        assert f'sftp://onap:pano@{IPFILESERVER}:{start_port + 1}' in yml['urlsftp']
-        assert f'ftps://onap:pano@{IPFILESERVER}:{start_port + 2}' in yml['urlftps']
+        assert f'sftp://{FILESERVER_USER}:{FILESERVER_PASSWORD}@{IPFILESERVER}:{start_port + 1}' in yml['urlsftp']
+        assert f'ftps://{FILESERVER_USER}:{FILESERVER_PASSWORD}@{IPFILESERVER}:{start_port + 2}' in yml['urlftps']
         assert str(ip_address(IPSTART) + ip_offset + instance_ip_offset) == yml['ippnfsim']
         start_port += 2
         print(yml['ippnfsim'])
 
-def test_start(args_start, caplog, capfd):
+    # Verify vsftpd config file has proper permissions
+    for cfg in glob(f'{sim_dirname_pattern}*/config/vsftpd_ssl.conf'):
+        assert stat(cfg).st_uid == 0
+
+def test_bootstrap_status(args_status, caplog):
+    MassPnfSim(args_status).status()
+    for _ in range(SIM_INSTANCES):
+        assert 'Simulator containers are down' in caplog.text
+        assert 'Simulator response' not in caplog.text
+    caplog.clear()
+
+def test_start(args_start, caplog):
     MassPnfSim(args_start).start()
-    msg = capfd.readouterr()
     for instance in range(SIM_INSTANCES):
         instance_ip_offset = instance * 16
         ip_offset = 2
         assert f'Starting pnf-sim-lw-{instance} instance:' in caplog.text
-        assert f'PNF-Sim IP:  {str(ip_address(IPSTART) + ip_offset + instance_ip_offset)}' in msg.out
-        assert 'Starting simulator containers' in msg.out
+        assert f'PNF-Sim IP: {str(ip_address(IPSTART) + ip_offset + instance_ip_offset)}' in caplog.text
+        assert 'Starting simulator containers' in caplog.text
+    caplog.clear()
+
+def test_start_status(args_status, docker_containers, caplog):
+    sleep(5) # Wait for the simulator to settle
+    MassPnfSim(args_status).status()
+    for instance in range(SIM_INSTANCES):
+        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):
+def test_start_idempotence(args_start, caplog):
     '''Verify start idempotence'''
     MassPnfSim(args_start).start()
-    msg = capfd.readouterr()
-    assert 'Simulator containers are already up' in msg.out
-    assert 'Starting simulator containers' not in msg.out
+    assert 'containers are already up' in caplog.text
+    assert 'Starting simulator containers' not in caplog.text
+    caplog.clear()
 
-def test_trigger(args_trigger, caplog, capfd):
-    sleep(5) # Wait for the simulator to settle
+def test_trigger(args_trigger, caplog):
     MassPnfSim(args_trigger).trigger()
-    msg = capfd.readouterr()
     for instance in range(SIM_INSTANCES):
         instance_ip_offset = instance * 16
         ip_offset = 2
         assert f'Triggering pnf-sim-lw-{instance} instance:' in caplog.text
-        assert f'PNF-Sim IP:  {str(ip_address(IPSTART) + ip_offset + instance_ip_offset)}' in msg.out
-        assert 'Simulator started' in msg.out
+        assert f'PNF-Sim IP: {str(ip_address(IPSTART) + ip_offset + instance_ip_offset)}' in caplog.text
+        assert 'Simulator started' in caplog.text
+    caplog.clear()
+
+def test_trigger_status(args_status, capfd, caplog):
+    MassPnfSim(args_status).status()
+    msg = capfd.readouterr()
+    for _ in range(SIM_INSTANCES):
+        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):
+def test_trigger_idempotence(args_trigger, caplog):
     MassPnfSim(args_trigger).trigger()
+    assert "Cannot start simulator since it's already running" in caplog.text
+    assert 'Simulator started' not in caplog.text
+    caplog.clear()
+
+def test_stop_simulator(args_stop_simulator, caplog):
+    MassPnfSim(args_stop_simulator).stop_simulator()
+    for instance in range(SIM_INSTANCES):
+        instance_ip_offset = instance * 16
+        ip_offset = 2
+        assert f'Stopping pnf-sim-lw-{instance} instance:' in caplog.text
+        assert f'PNF-Sim IP: {str(ip_address(IPSTART) + ip_offset + instance_ip_offset)}' in caplog.text
+        assert "Simulator successfully stopped" in caplog.text
+        assert "not running" not in caplog.text
+    caplog.clear()
+
+def test_stop_simulator_status(args_status, capfd, caplog):
+    MassPnfSim(args_status).status()
     msg = capfd.readouterr()
-    assert "Cannot start simulator since it's already running" in msg.out
-    assert 'Simulator started' not in msg.out
+    for _ in range(SIM_INSTANCES):
+        assert '"simulatorStatus":"RUNNING"' not in caplog.text
+        assert '"simulatorStatus":"NOT RUNNING"' in caplog.text
+        assert 'Up' in msg.out
+        assert 'Exit' not in msg.out
+    caplog.clear()
+
+def test_stop_simulator_idempotence(args_stop_simulator, caplog):
+    MassPnfSim(args_stop_simulator).stop_simulator()
+    for instance in range(SIM_INSTANCES):
+        instance_ip_offset = instance * 16
+        ip_offset = 2
+        assert f'Stopping pnf-sim-lw-{instance} instance:' in caplog.text
+        assert f'PNF-Sim IP: {str(ip_address(IPSTART) + ip_offset + instance_ip_offset)}' in caplog.text
+        assert "Cannot stop simulator, because it's not running" in caplog.text
+        assert "Simulator successfully stopped" not in caplog.text
+    caplog.clear()
 
-def test_trigger_custom(args_trigger_custom, caplog, capfd):
+def test_trigger_custom(args_trigger_custom, caplog):
     MassPnfSim(args_trigger_custom).trigger_custom()
-    msg = capfd.readouterr()
     for instance in range(SIM_INSTANCES):
         instance_ip_offset = instance * 16
         ip_offset = 2
         assert f'Triggering pnf-sim-lw-{instance} instance:' in caplog.text
-        assert f'PNF-Sim IP:  {str(ip_address(IPSTART) + ip_offset + instance_ip_offset)}' in msg.out
-        assert 'Simulator started' not in msg.out
-        assert "Cannot start simulator since it's already running" in msg.out
+        assert f'PNF-Sim IP: {str(ip_address(IPSTART) + ip_offset + instance_ip_offset)}' in caplog.text
+        assert 'Simulator started' in caplog.text
+        assert "Cannot start simulator since it's already running" not in caplog.text
     caplog.clear()
 
-def test_stop(args_stop, caplog, capfd):
+def test_stop(args_stop, caplog):
     MassPnfSim(args_stop).stop()
-    msg = capfd.readouterr()
     for instance in range(SIM_INSTANCES):
         instance_ip_offset = instance * 16
         ip_offset = 2
         assert f'Stopping pnf-sim-lw-{instance} instance:' in caplog.text
-        assert f'PNF-Sim IP:  {str(ip_address(IPSTART) + ip_offset + instance_ip_offset)}' in msg.out
+        assert f'PNF-Sim IP: {str(ip_address(IPSTART) + ip_offset + instance_ip_offset)}' in caplog.text
+        assert f'ROP_file_creator.sh {instance} successfully killed' in caplog.text
         assert f"ROP_file_creator.sh {instance}" not in popen('ps afx').read()
     caplog.clear()
 
-def test_stop_idempotence(args_stop, caplog, capfd):
+def test_stop_status(args_status, docker_containers, caplog):
+    MassPnfSim(args_status).status()
+    for instance in range(SIM_INSTANCES):
+        assert f"{PNF_SIM_CONTAINER_NAME}{instance}" not in docker_containers
+        assert 'Simulator containers are down' in caplog.text
+    caplog.clear()
+
+def test_stop_idempotence(args_stop, caplog, docker_containers):
     MassPnfSim(args_stop).stop()
-    msg = capfd.readouterr()
     for instance in range(SIM_INSTANCES):
         assert f'Stopping pnf-sim-lw-{instance} instance:' in caplog.text
-        assert 'ROP_file_creator.sh already not running' in msg.out
-        assert 'Simulator containers are already down' in msg.out
+        assert f'ROP_file_creator.sh {instance} already not running' in caplog.text
+        assert 'Simulator containers are already down' in caplog.text
+        assert f"ROP_file_creator.sh {instance}" not in popen('ps afx').read()
+        assert f"{PNF_SIM_CONTAINER_NAME}{instance}" not in docker_containers
+    caplog.clear()
+
+def test_clean(args_clean):
+    m = MassPnfSim(args_clean)
+    m.clean()
+    assert not glob(f"{m.sim_dirname_pattern}*")