From d2a2e15cf5750e36884e76259deb659da8dcb9f1 Mon Sep 17 00:00:00 2001 From: mateo-berri <277851410+mateo-berri@users.noreply.github.com> Date: Wed, 17 Jun 2026 03:39:23 +0000 Subject: [PATCH] test(google_genai): cover trailing SSE event flush in streaming iterator Add sync and async regression tests for a final event that arrives without a trailing SSE delimiter, exercising the end-of-stream flush so the last event is never dropped. --- .../test_google_genai_streaming_iterator.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/test_litellm/google_genai/test_google_genai_streaming_iterator.py b/tests/test_litellm/google_genai/test_google_genai_streaming_iterator.py index 36246bb8942..ab23230e2a8 100644 --- a/tests/test_litellm/google_genai/test_google_genai_streaming_iterator.py +++ b/tests/test_litellm/google_genai/test_google_genai_streaming_iterator.py @@ -149,3 +149,21 @@ async def test_async_iterator_preserves_multi_field_and_comment_events(): frames = [frame async for frame in iterator] assert frames == [multi_field, comment] + + +@pytest.mark.asyncio +async def test_async_iterator_flushes_trailing_event_without_delimiter(): + """A final event missing its trailing delimiter must still be emitted.""" + tail = b'data: {"text":"last"}' + iterator = _build_iterator(_chunk_bytes(tail, 5), is_async=True) + + frames = [frame async for frame in iterator] + + assert frames == [tail] + + +def test_sync_iterator_flushes_trailing_event_without_delimiter(): + tail = b'data: {"text":"last"}' + iterator = _build_iterator(_chunk_bytes(tail, 5), is_async=False) + + assert list(iterator) == [tail]