Skip to content

Commit 925329d

Browse files
authored
fix: wait_for_logs can now fail early when the container stops (#682)
Addresses my suggestion made in [issue 681](#681). This PR adds a flag that checks is the status is not `running` and raises a `RuntimeError` to avoid waiting for logs after the container already has exited. The idea is to save wait time when there is a long startup time in case the container fails early. ```python from testcontainers.core import container, waiting_utils if __name__ == "__main__": waiting_utils.wait_for_logs( container.DockerContainer("flyway/flyway").start(), r"Successfully applied \d+ migrations to schema", timeout=10, raise_on_exit=True, ) # > RuntimeError(f"Container exited before emitting logs satisfying predicate") # ( Raised almost immediately ) ```
1 parent c7d9b81 commit 925329d

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

core/testcontainers/core/waiting_utils.py

+3
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ def wait_for_logs(
8383
timeout: float = config.timeout,
8484
interval: float = 1,
8585
predicate_streams_and: bool = False,
86+
raise_on_exit: bool = False,
8687
#
8788
) -> float:
8889
"""
@@ -117,4 +118,6 @@ def wait_for_logs(
117118
return duration
118119
if duration > timeout:
119120
raise TimeoutError(f"Container did not emit logs satisfying predicate in {timeout:.3f} " "seconds")
121+
if raise_on_exit and container.get_wrapped_container().status != "running":
122+
raise RuntimeError("Container exited before emitting logs satisfying predicate")
120123
time.sleep(interval)

0 commit comments

Comments
 (0)