@@ -118,7 +118,14 @@ def test_get_local_queue_exists_fail(mocker):
118
118
)
119
119
mocker .patch (
120
120
"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
+ },
122
129
)
123
130
config = create_cluster_config ()
124
131
config .name = "unit-test-aw-kueue"
@@ -267,15 +274,99 @@ def test_add_queue_label_with_valid_local_queue(mocker):
267
274
assert item ["metadata" ]["labels" ] == {"kueue.x-k8s.io/queue-name" : "valid-queue" }
268
275
269
276
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 ):
271
278
# Mock the kubernetes.client.CustomObjectsApi and its response
272
279
mock_api_instance = mocker .patch ("kubernetes.client.CustomObjectsApi" )
273
280
mock_api_instance .return_value .list_namespaced_custom_object .return_value = {
274
281
"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
+ }
276
342
]
277
343
}
278
344
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
+
279
370
# Mock the local_queue_exists function to return False
280
371
mocker .patch ("codeflare_sdk.common.kueue.local_queue_exists" , return_value = False )
281
372
@@ -284,13 +375,16 @@ def test_add_queue_label_with_invalid_local_queue(mocker):
284
375
namespace = "test-namespace"
285
376
local_queue = "invalid-queue"
286
377
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: " ,
291
382
):
292
383
add_queue_label (item , namespace , local_queue )
293
384
385
+ # Assert that no label is added
386
+ assert "labels" not in item ["metadata" ]
387
+
294
388
295
389
# Make sure to always keep this function last
296
390
def test_cleanup ():
0 commit comments