@@ -341,3 +341,59 @@ def mock_build_scannable_object(item, container, kind):
341341
342342 assert len (api_group ._api_resource ._grouped_jobs ) == 1
343343 assert api_group ._api_resource ._grouped_jobs [0 ].name == "job-2"
344+
345+
346+ @pytest .mark .asyncio
347+ async def test_groupedjobs_respects_global_batch_limit_across_namespaces (mock_kubernetes_loader , mock_config ):
348+ """Verify batch_count is global: when limit reached, subsequent namespaces are not processed."""
349+ mock_config .namespaces = ["ns-1" , "ns-2" ]
350+ mock_config .discovery_job_max_batches = 1
351+
352+ calls = []
353+
354+ async def mock_batched_method (* args , ** kwargs ):
355+ calls .append (kwargs .get ("namespace" ))
356+ # return empty batch and no continue token
357+ return ([], None )
358+
359+ mock_kubernetes_loader ._list_namespaced_or_global_objects_batched = mock_batched_method
360+
361+ with patch ("robusta_krr.core.integrations.kubernetes.settings" , mock_config ):
362+ result = await mock_kubernetes_loader ._list_all_groupedjobs ()
363+
364+ # No results; with empty batches not counted, both namespaces are attempted
365+ assert result == []
366+ assert calls == ["ns-1" , "ns-2" ]
367+
368+
369+ @pytest .mark .asyncio
370+ async def test_groupedjobs_calls_each_explicit_namespace (mock_kubernetes_loader , mock_config ):
371+ """Ensure explicit namespaces list is iterated and passed to the batched call."""
372+ mock_config .namespaces = ["namespace-a" , "namespace-b" ]
373+ mock_config .discovery_job_max_batches = 10
374+
375+ seen_namespaces = []
376+
377+ # Return one simple job per call and terminate with no continue token
378+ async def mock_batched_method (* args , ** kwargs ):
379+ ns = kwargs .get ("namespace" )
380+ seen_namespaces .append (ns )
381+ job = create_mock_job ("job-1" , ns if ns != "*" else "default" , {"app" : "frontend" })
382+ return ([job ], None )
383+
384+ mock_kubernetes_loader ._list_namespaced_or_global_objects_batched = mock_batched_method
385+
386+ def mock_build_scannable_object (item , container , kind ):
387+ obj = MagicMock ()
388+ obj ._api_resource = MagicMock ()
389+ obj .container = container .name
390+ return obj
391+
392+ mock_kubernetes_loader ._ClusterLoader__build_scannable_object = mock_build_scannable_object
393+
394+ with patch ("robusta_krr.core.integrations.kubernetes.settings" , mock_config ):
395+ result = await mock_kubernetes_loader ._list_all_groupedjobs ()
396+
397+ # We expect one grouped object per namespace
398+ assert len (result ) == 2
399+ assert set (seen_namespaces ) == {"namespace-a" , "namespace-b" }
0 commit comments