Skip to content

Commit 8b72c90

Browse files
authored
wait readiness (#435)
1 parent a423a25 commit 8b72c90

File tree

1 file changed

+35
-2
lines changed

1 file changed

+35
-2
lines changed

automated_tests/features/steps/pktvisor.py

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,12 @@ def run_pktvisor(context, status_port, role):
2626
assert_that(context.container_id, not_(equal_to(None)), "Failed to provision pktvisor container")
2727
if context.container_id not in context.containers_id.keys():
2828
context.containers_id[context.container_id] = str(context.pkt_port)
29-
event = threading.Event()
30-
event.wait(1)
29+
if availability[status_port]:
30+
message = f"web server listening on localhost:{context.pkt_port}"
31+
else:
32+
message = f"unable to bind to localhost:{context.pkt_port}"
33+
server_listening, logs = get_logs_and_check(context.container_id, message)
34+
assert_that(server_listening, equal_to(True), f"Message {message} not found on pkt logs: {logs}")
3135

3236

3337
@step("that a pktvisor instance is running on port {status_port} with {role} permission")
@@ -203,3 +207,32 @@ def check_successful_packets(return_command_tcpreplay):
203207
equal_to(int(return_command_tcpreplay['Successfulpackets'])), "Some packet may have failure")
204208

205209
return return_command_tcpreplay
210+
211+
212+
@threading_wait_until
213+
def get_logs_and_check(container_id, expected_message, event=None):
214+
"""
215+
216+
:param container_id: pktvisor container ID
217+
:param (str) expected_message: message that we expect to find in the logs
218+
:param (obj) event: threading.event
219+
:return: (bool) if the expected message is found return True, if not, False
220+
"""
221+
logs = get_pkt_logs(container_id)
222+
for log in logs:
223+
if expected_message in log:
224+
event.set()
225+
return event.is_set(), logs
226+
return event.is_set(), logs
227+
228+
229+
def get_pkt_logs(container_id):
230+
"""
231+
Gets the logs from pkt container
232+
233+
:param (str) container_id: pktvisor container ID
234+
:returns: (list) of log lines
235+
"""
236+
docker_client = docker.from_env()
237+
container = docker_client.containers.get(container_id)
238+
return container.logs().decode("utf-8").split("\n")

0 commit comments

Comments
 (0)