11"""Test the LangfuseResourceManager and get_client() function."""
22
33from queue import Queue
4+ from types import SimpleNamespace
45from unittest .mock import Mock
56
67from langfuse import Langfuse
@@ -125,7 +126,7 @@ def test_score_ingestion_consumer_pause_wakes_blocked_thread():
125126 assert not consumer .is_alive ()
126127
127128
128- def test_media_upload_consumer_pause_wakes_blocked_thread ():
129+ def test_media_upload_consumer_signal_shutdown_wakes_blocked_thread ():
129130 media_manager = MediaManager (
130131 api_client = Mock (),
131132 httpx_client = Mock (),
@@ -135,6 +136,41 @@ def test_media_upload_consumer_pause_wakes_blocked_thread():
135136
136137 consumer .start ()
137138 consumer .pause ()
139+ media_manager .signal_shutdown ()
138140 consumer .join (timeout = 0.5 )
139141
140142 assert not consumer .is_alive ()
143+
144+
145+ def test_stop_and_join_consumer_threads_broadcasts_media_shutdown_after_pausing_all ():
146+ events = []
147+
148+ class FakeConsumer :
149+ def __init__ (self , identifier ):
150+ self ._identifier = identifier
151+
152+ def pause (self ):
153+ events .append (("pause" , self ._identifier ))
154+
155+ def join (self ):
156+ events .append (("join" , self ._identifier ))
157+
158+ class FakeMediaManager :
159+ def signal_shutdown (self , * , count ):
160+ events .append (("signal_shutdown" , count ))
161+
162+ fake_resource_manager = SimpleNamespace (
163+ _media_upload_consumers = [FakeConsumer (0 ), FakeConsumer (1 )],
164+ _ingestion_consumers = [],
165+ _media_manager = FakeMediaManager (),
166+ )
167+
168+ LangfuseResourceManager ._stop_and_join_consumer_threads (fake_resource_manager )
169+
170+ assert events == [
171+ ("pause" , 0 ),
172+ ("pause" , 1 ),
173+ ("signal_shutdown" , 2 ),
174+ ("join" , 0 ),
175+ ("join" , 1 ),
176+ ]
0 commit comments