@@ -118,7 +118,14 @@ def test_get_local_queue_exists_fail(mocker):
118118 )
119119 mocker .patch (
120120 "kubernetes.client.CustomObjectsApi.list_namespaced_custom_object" ,
121- return_value = get_local_queue ("kueue.x-k8s.io" , "v1beta1" , "ns" , "localqueues" ),
121+ return_value = {
122+ "items" : [
123+ {
124+ "metadata" : {"name" : "local-queue-default" },
125+ "status" : {"flavors" : [{"name" : "default" }]},
126+ }
127+ ]
128+ },
122129 )
123130 config = create_cluster_config ()
124131 config .name = "unit-test-aw-kueue"
@@ -267,15 +274,99 @@ def test_add_queue_label_with_valid_local_queue(mocker):
267274 assert item ["metadata" ]["labels" ] == {"kueue.x-k8s.io/queue-name" : "valid-queue" }
268275
269276
270- def test_add_queue_label_with_invalid_local_queue (mocker ):
277+ def test_add_queue_label_with_invalid_local_queue_shows_available_queues (mocker ):
271278 # Mock the kubernetes.client.CustomObjectsApi and its response
272279 mock_api_instance = mocker .patch ("kubernetes.client.CustomObjectsApi" )
273280 mock_api_instance .return_value .list_namespaced_custom_object .return_value = {
274281 "items" : [
275- {"metadata" : {"name" : "valid-queue" }},
282+ {"metadata" : {"name" : "queue1" }, "status" : {"flavors" : [{"name" : "default" }]}},
283+ {"metadata" : {"name" : "queue2" }, "status" : {"flavors" : [{"name" : "default" }]}},
284+ ]
285+ }
286+
287+ # Mock the local_queue_exists function to return False
288+ mocker .patch ("codeflare_sdk.common.kueue.local_queue_exists" , return_value = False )
289+
290+ # Define input item and parameters
291+ item = {"metadata" : {}}
292+ namespace = "test-namespace"
293+ local_queue = "invalid-queue"
294+
295+ # Call the function and expect a warning with available queues in the message
296+ with pytest .warns (
297+ UserWarning ,
298+ match = f"Local queue '{ local_queue } ' does not exist in namespace '{ namespace } '. Available queues are: queue1, queue2" ,
299+ ):
300+ add_queue_label (item , namespace , local_queue )
301+
302+ # Assert that no label is added
303+ assert "labels" not in item ["metadata" ]
304+
305+
306+ def test_add_queue_label_with_no_local_queue (mocker ):
307+ # Mock the kubernetes.client.CustomObjectsApi and its response
308+ mock_api_instance = mocker .patch ("kubernetes.client.CustomObjectsApi" )
309+ mock_api_instance .return_value .list_namespaced_custom_object .return_value = {
310+ "items" : []
311+ }
312+
313+ # Mock get_default_kueue_name to return None
314+ mocker .patch (
315+ "codeflare_sdk.common.kueue.get_default_kueue_name" ,
316+ return_value = None ,
317+ )
318+
319+ # Define input item and parameters
320+ item = {"metadata" : {}}
321+ namespace = "test-namespace"
322+ local_queue = None
323+
324+ # Call the function
325+ add_queue_label (item , namespace , local_queue )
326+
327+ # Assert that no label is added
328+ assert "labels" not in item ["metadata" ]
329+
330+
331+ def test_add_queue_label_with_default_queue (mocker ):
332+ # Mock the kubernetes.client.CustomObjectsApi and its response
333+ mock_api_instance = mocker .patch ("kubernetes.client.CustomObjectsApi" )
334+ mock_api_instance .return_value .list_namespaced_custom_object .return_value = {
335+ "items" : [
336+ {
337+ "metadata" : {
338+ "name" : "default-queue" ,
339+ "annotations" : {"kueue.x-k8s.io/default-queue" : "true" }
340+ }
341+ }
276342 ]
277343 }
278344
345+ # Mock get_default_kueue_name to return a default queue
346+ mocker .patch (
347+ "codeflare_sdk.common.kueue.get_default_kueue_name" ,
348+ return_value = "default-queue" ,
349+ )
350+
351+ # Define input item and parameters
352+ item = {"metadata" : {}}
353+ namespace = "test-namespace"
354+ local_queue = None
355+
356+ # Call the function
357+ add_queue_label (item , namespace , local_queue )
358+
359+ # Assert that the default queue label is added
360+ assert item ["metadata" ]["labels" ] == {"kueue.x-k8s.io/queue-name" : "default-queue" }
361+
362+
363+ def test_add_queue_label_with_invalid_local_queue_and_no_available_queues (mocker ):
364+ # Mock the kubernetes.client.CustomObjectsApi and its response
365+ mock_api_instance = mocker .patch ("kubernetes.client.CustomObjectsApi" )
366+ mock_api_instance .return_value .list_namespaced_custom_object .return_value = {
367+ "items" : [] # Empty list instead of None
368+ }
369+
279370 # Mock the local_queue_exists function to return False
280371 mocker .patch ("codeflare_sdk.common.kueue.local_queue_exists" , return_value = False )
281372
@@ -284,13 +375,16 @@ def test_add_queue_label_with_invalid_local_queue(mocker):
284375 namespace = "test-namespace"
285376 local_queue = "invalid-queue"
286377
287- # Call the function and expect a ValueError
288- with pytest .raises (
289- ValueError ,
290- match = "local_queue provided does not exist or is not in this namespace " ,
378+ # Call the function and expect a warning about unavailable queues
379+ with pytest .warns (
380+ UserWarning ,
381+ match = f"Local queue ' { local_queue } ' does not exist in namespace ' { namespace } '. Available queues are: " ,
291382 ):
292383 add_queue_label (item , namespace , local_queue )
293384
385+ # Assert that no label is added
386+ assert "labels" not in item ["metadata" ]
387+
294388
295389# Make sure to always keep this function last
296390def test_cleanup ():
0 commit comments