@@ -132,3 +132,113 @@ def test_no_reload_calls_worker_main_directly(self, worker_main_mock: MagicMock)
132132 start_worker ()
133133
134134 worker_main_mock .assert_called_once ()
135+
136+
137+ class TestWorkerDisableFlags :
138+ """Tests for the individual worker_disable_heartbeat/gossip/mingle config flags."""
139+
140+ @pytest .fixture (autouse = True )
141+ def mock_celery_config (self ):
142+ """Provide a mock CONFIG.celery with the three disable flags."""
143+ mock_config = MagicMock ()
144+ mock_config .celery .worker_disable_heartbeat = False
145+ mock_config .celery .worker_disable_gossip = False
146+ mock_config .celery .worker_disable_mingle = False
147+ mock_config .celery .worker_concurrency = 2
148+ with patch ("fides.api.worker.CONFIG" , mock_config ):
149+ yield mock_config
150+
151+ @pytest .fixture
152+ def worker_main_mock (self ):
153+ with patch ("fides.api.worker.celery_app.worker_main" ) as mock :
154+ yield mock
155+
156+ def test_no_without_flags_when_all_disabled_false (
157+ self , mock_celery_config , worker_main_mock : MagicMock
158+ ):
159+ """Default: no --without-* flags when all flags are False."""
160+ start_worker ()
161+
162+ call_args = worker_main_mock .call_args
163+ argv = call_args .kwargs ["argv" ]
164+ assert "--without-heartbeat" not in argv
165+ assert "--without-gossip" not in argv
166+ assert "--without-mingle" not in argv
167+
168+ @pytest .mark .parametrize (
169+ "flag_name" ,
170+ [
171+ "worker_disable_heartbeat" ,
172+ "worker_disable_gossip" ,
173+ "worker_disable_mingle" ,
174+ ],
175+ )
176+ def test_single_flag_enabled (
177+ self , mock_celery_config , worker_main_mock : MagicMock , flag_name : str
178+ ):
179+ """When a disable flag is True, the matching --without-* appears in argv."""
180+ setattr (mock_celery_config .celery , flag_name , True )
181+ start_worker ()
182+
183+ call_args = worker_main_mock .call_args
184+ argv = call_args .kwargs ["argv" ]
185+ flag_to_arg = {
186+ "worker_disable_heartbeat" : "--without-heartbeat" ,
187+ "worker_disable_gossip" : "--without-gossip" ,
188+ "worker_disable_mingle" : "--without-mingle" ,
189+ }
190+ assert flag_to_arg [flag_name ] in argv
191+
192+ def test_all_three_flags_enabled (
193+ self , mock_celery_config , worker_main_mock : MagicMock
194+ ):
195+ """All three flags together produces all --without-* flags."""
196+ mock_celery_config .celery .worker_disable_heartbeat = True
197+ mock_celery_config .celery .worker_disable_gossip = True
198+ mock_celery_config .celery .worker_disable_mingle = True
199+
200+ start_worker ()
201+
202+ call_args = worker_main_mock .call_args
203+ argv = call_args .kwargs ["argv" ]
204+ assert "--without-heartbeat" in argv
205+ assert "--without-gossip" in argv
206+ assert "--without-mingle" in argv
207+
208+
209+ class TestWorkerConcurrency :
210+ """Tests for CONFIG.celery.worker_concurrency."""
211+
212+ @pytest .fixture (autouse = True )
213+ def mock_celery_config (self ):
214+ mock_config = MagicMock ()
215+ mock_config .celery .worker_disable_heartbeat = False
216+ mock_config .celery .worker_disable_gossip = False
217+ mock_config .celery .worker_disable_mingle = False
218+ mock_config .celery .worker_concurrency = 2
219+ with patch ("fides.api.worker.CONFIG" , mock_config ):
220+ yield mock_config
221+
222+ @pytest .fixture
223+ def worker_main_mock (self ):
224+ with patch ("fides.api.worker.celery_app.worker_main" ) as mock :
225+ yield mock
226+
227+ def test_default_concurrency_in_argv (
228+ self , mock_celery_config : MagicMock , worker_main_mock : MagicMock
229+ ):
230+ start_worker ()
231+ argv = worker_main_mock .call_args .kwargs ["argv" ]
232+ assert "--concurrency=2" in argv
233+
234+ @pytest .mark .parametrize ("concurrency" , [1 , 4 , 16 ])
235+ def test_custom_concurrency_in_argv (
236+ self ,
237+ mock_celery_config : MagicMock ,
238+ worker_main_mock : MagicMock ,
239+ concurrency : int ,
240+ ):
241+ mock_celery_config .celery .worker_concurrency = concurrency
242+ start_worker ()
243+ argv = worker_main_mock .call_args .kwargs ["argv" ]
244+ assert f"--concurrency={ concurrency } " in argv
0 commit comments