@@ -101,14 +101,8 @@ def assert_all_discovery_candidates_stable(
101101 _assert_container_stable (initial_state , current_state , index )
102102
103103 current_stdout , current_stderr = _get_container_logs (current_container_id )
104- # Diffed separately: stdout/stderr interleaving varies across calls, breaking a combined diff.
105- new_stdout = _diff_logs (previous_stdout , current_stdout )
106- new_stderr = _diff_logs (previous_stderr , current_stderr )
107- new_logs = new_stdout + new_stderr
108- for line in new_logs .splitlines ():
109- logging .debug ('New log line: %s' , line )
110- _assert_no_log_patterns (new_logs , log_patterns , index )
111- previous_stdout , previous_stderr = current_stdout , current_stderr
104+ previous_stdout = assert_no_new_log_patterns (previous_stdout , current_stdout , log_patterns , index )
105+ previous_stderr = assert_no_new_log_patterns (previous_stderr , current_stderr , log_patterns , index )
112106
113107
114108def _get_compose_container_id (
@@ -196,11 +190,6 @@ def _get_container_logs(container_id: str) -> tuple[str, str]:
196190 return result .stdout , result .stderr
197191
198192
199- def _diff_logs (previous : str , current : str ) -> str :
200- """Return the portion of `current` appended since `previous`."""
201- return current [len (previous ) :] if current .startswith (previous ) else current
202-
203-
204193def _assert_container_stable (
205194 initial_state : Mapping [str , Any ], current_state : Mapping [str , Any ], candidate_index : int
206195) -> None :
@@ -237,6 +226,17 @@ def _assert_no_log_patterns(logs: str, patterns: Sequence[str], candidate_index:
237226 )
238227
239228
229+ def assert_no_new_log_patterns (
230+ previous_logs : str , current_logs : str , patterns : Sequence [str ], candidate_index : int
231+ ) -> str :
232+ """Assert no dangerous pattern appears in the logs emitted since ``previous_logs``, returning the new baseline."""
233+ new_logs = current_logs [len (previous_logs ) :] if current_logs .startswith (previous_logs ) else current_logs
234+ for line in new_logs .splitlines ():
235+ logging .debug ('New log line: %s' , line )
236+ _assert_no_log_patterns (new_logs , patterns , candidate_index )
237+ return current_logs
238+
239+
240240def get_e2e_discovery_metadata (
241241 check_root : str | os .PathLike [str ] | None = None ,
242242) -> dict [str , list [str ]]:
0 commit comments