1 from MassPnfSim import MassPnfSim
4 from yaml import load, SafeLoader
5 from ipaddress import ip_address
6 from test_settings import *
10 # These test routines perform functional testing in current file tree context
11 # thus they require that no simulator instances are bootstrapped and running
12 # prior to running tests
14 @pytest.mark.parametrize("action", ['start', 'stop', 'trigger', 'status'])
15 def test_not_bootstrapped(action, caplog, args_start, args_stop, args_trigger, args_status): # pylint: disable=W0613
17 m = getattr(MassPnfSim(eval(f'args_{action}')), action)
19 except SystemExit as e:
21 assert 'No bootstrapped instance found' in caplog.text
24 def test_bootstrap(args_bootstrap, parser, caplog):
26 MassPnfSim(args_bootstrap).bootstrap()
27 for instance in range(SIM_INSTANCES):
28 assert f'Creating pnf-sim-lw-{instance}' in caplog.text
29 assert f'Done setting up instance #{instance}' in caplog.text
32 # Verify bootstrap idempotence
34 MassPnfSim(args_bootstrap).bootstrap()
35 except SystemExit as e:
37 assert 'Bootstrapped instances detected, not overwiriting, clean first' in caplog.text
40 # Verify simulator dirs created
41 sim_dirname_pattern = MassPnfSim(parser.parse_args([])).sim_dirname_pattern
42 assert len(glob(f"{sim_dirname_pattern}*")) == SIM_INSTANCES
44 # Verify ROP_file_creator.sh running
45 for instance in range(SIM_INSTANCES):
46 assert f"ROP_file_creator.sh {instance}" in popen('ps afx').read()
48 # Verify simulators configs content is valid
50 for instance in range(SIM_INSTANCES):
51 instance_ip_offset = instance * 16
53 with open(f"{sim_dirname_pattern}{instance}/{INSTANCE_CONFIG}") as f:
54 yml = load(f, Loader=SafeLoader)
55 assert URLVES == yml['urlves']
56 assert TYPEFILESERVER == yml['typefileserver']
57 assert f'sftp://onap:pano@{IPFILESERVER}:{start_port + 1}' in yml['urlsftp']
58 assert f'ftps://onap:pano@{IPFILESERVER}:{start_port + 2}' in yml['urlftps']
59 assert str(ip_address(IPSTART) + ip_offset + instance_ip_offset) == yml['ippnfsim']
61 print(yml['ippnfsim'])
63 def test_bootstrap_status(args_status, caplog):
64 MassPnfSim(args_status).status()
65 for _ in range(SIM_INSTANCES):
66 assert 'Simulator containers are down' in caplog.text
67 assert 'Simulator response' not in caplog.text
70 def test_start(args_start, caplog, capfd):
71 MassPnfSim(args_start).start()
72 msg = capfd.readouterr()
73 for instance in range(SIM_INSTANCES):
74 instance_ip_offset = instance * 16
76 assert f'Starting pnf-sim-lw-{instance} instance:' in caplog.text
77 assert f'PNF-Sim IP: {str(ip_address(IPSTART) + ip_offset + instance_ip_offset)}' in msg.out
78 assert 'Starting simulator containers' in msg.out
81 def test_start_status(args_status, docker_containers, caplog):
82 sleep(5) # Wait for the simulator to settle
83 MassPnfSim(args_status).status()
84 for instance in range(SIM_INSTANCES):
85 assert '"simulatorStatus":"NOT RUNNING"' in caplog.text
86 assert '"simulatorStatus":"RUNNING"' not in caplog.text
87 assert f"{PNF_SIM_CONTAINER_NAME}{instance}" in docker_containers
90 def test_start_idempotence(args_start, capfd):
91 '''Verify start idempotence'''
92 MassPnfSim(args_start).start()
93 msg = capfd.readouterr()
94 assert 'Simulator containers are already up' in msg.out
95 assert 'Starting simulator containers' not in msg.out
97 def test_trigger(args_trigger, caplog, capfd):
98 MassPnfSim(args_trigger).trigger()
99 msg = capfd.readouterr()
100 for instance in range(SIM_INSTANCES):
101 instance_ip_offset = instance * 16
103 assert f'Triggering pnf-sim-lw-{instance} instance:' in caplog.text
104 assert f'PNF-Sim IP: {str(ip_address(IPSTART) + ip_offset + instance_ip_offset)}' in msg.out
105 assert 'Simulator started' in msg.out
108 def test_trigger_status(args_status, capfd, caplog):
109 MassPnfSim(args_status).status()
110 msg = capfd.readouterr()
111 for _ in range(SIM_INSTANCES):
112 assert '"simulatorStatus":"RUNNING"' in caplog.text
113 assert '"simulatorStatus":"NOT RUNNING"' not in caplog.text
114 assert 'Up' in msg.out
115 assert 'Exit' not in msg.out
118 def test_trigger_idempotence(args_trigger, capfd):
119 MassPnfSim(args_trigger).trigger()
120 msg = capfd.readouterr()
121 assert "Cannot start simulator since it's already running" in msg.out
122 assert 'Simulator started' not in msg.out
124 def test_trigger_custom(args_trigger_custom, caplog, capfd):
125 MassPnfSim(args_trigger_custom).trigger_custom()
126 msg = capfd.readouterr()
127 for instance in range(SIM_INSTANCES):
128 instance_ip_offset = instance * 16
130 assert f'Triggering pnf-sim-lw-{instance} instance:' in caplog.text
131 assert f'PNF-Sim IP: {str(ip_address(IPSTART) + ip_offset + instance_ip_offset)}' in msg.out
132 assert 'Simulator started' not in msg.out
133 assert "Cannot start simulator since it's already running" in msg.out
136 def test_stop(args_stop, caplog):
137 MassPnfSim(args_stop).stop()
138 for instance in range(SIM_INSTANCES):
139 instance_ip_offset = instance * 16
141 assert f'Stopping pnf-sim-lw-{instance} instance:' in caplog.text
142 assert f'PNF-Sim IP: {str(ip_address(IPSTART) + ip_offset + instance_ip_offset)}' in caplog.text
143 assert f'ROP_file_creator.sh {instance} successfully killed' in caplog.text
144 assert f"ROP_file_creator.sh {instance}" not in popen('ps afx').read()
147 def test_stop_status(args_status, docker_containers, caplog):
148 MassPnfSim(args_status).status()
149 for instance in range(SIM_INSTANCES):
150 assert f"{PNF_SIM_CONTAINER_NAME}{instance}" not in docker_containers
151 assert 'Simulator containers are down' in caplog.text
154 def test_stop_idempotence(args_stop, caplog, docker_containers):
155 MassPnfSim(args_stop).stop()
156 for instance in range(SIM_INSTANCES):
157 assert f'Stopping pnf-sim-lw-{instance} instance:' in caplog.text
158 assert f'ROP_file_creator.sh {instance} already not running' in caplog.text
159 assert 'Simulator containers are already down' in caplog.text
160 assert f"ROP_file_creator.sh {instance}" not in popen('ps afx').read()
161 assert f"{PNF_SIM_CONTAINER_NAME}{instance}" not in docker_containers
164 def test_clean(args_clean):
165 m = MassPnfSim(args_clean)
167 assert not glob(f"{m.sim_dirname_pattern}*")