@@ -197,8 +197,13 @@ def test_config_creation():
197
197
return config
198
198
199
199
200
- def test_cluster_creation ():
200
+ def test_cluster_creation (mocker ):
201
+ mocker .patch (
202
+ "kubernetes.client.CustomObjectsApi.get_cluster_custom_object" ,
203
+ return_value = {"spec" : {"domain" : "" }},
204
+ )
201
205
cluster = Cluster (test_config_creation ())
206
+ mocker .patch ("kubernetes.config.load_kube_config" , return_value = "ignore" )
202
207
assert cluster .app_wrapper_yaml == "unit-test-cluster.yaml"
203
208
assert cluster .app_wrapper_name == "unit-test-cluster"
204
209
assert filecmp .cmp (
@@ -212,6 +217,10 @@ def test_default_cluster_creation(mocker):
212
217
"codeflare_sdk.cluster.cluster.get_current_namespace" ,
213
218
return_value = "opendatahub" ,
214
219
)
220
+ mocker .patch (
221
+ "kubernetes.client.CustomObjectsApi.get_cluster_custom_object" ,
222
+ return_value = {"spec" : {"domain" : "" }},
223
+ )
215
224
default_config = ClusterConfiguration (
216
225
name = "unit-test-default-cluster" ,
217
226
)
@@ -254,7 +263,11 @@ def test_cluster_up_down(mocker):
254
263
"kubernetes.client.CustomObjectsApi.delete_namespaced_custom_object" ,
255
264
side_effect = arg_check_del_effect ,
256
265
)
257
- cluster = test_cluster_creation ()
266
+ mocker .patch (
267
+ "kubernetes.client.CustomObjectsApi.get_cluster_custom_object" ,
268
+ return_value = {"spec" : {"domain" : "" }},
269
+ )
270
+ cluster = test_cluster_creation (mocker )
258
271
cluster .up ()
259
272
cluster .down ()
260
273
@@ -318,11 +331,15 @@ def uri_retreival(group, version, namespace, plural, *args):
318
331
def test_cluster_uris (mocker ):
319
332
mocker .patch ("kubernetes.config.load_kube_config" , return_value = "ignore" )
320
333
mocker .patch (
321
- "kubernetes.client.CustomObjectsApi.list_namespaced_custom_object" ,
322
- side_effect = uri_retreival ,
334
+ "kubernetes.client.CustomObjectsApi.get_cluster_custom_object" ,
335
+ return_value = {"spec" : {"domain" : "" }},
336
+ )
337
+ mocker .patch (
338
+ "kubernetes.client.NetworkingV1Api.list_namespaced_ingress" ,
339
+ return_value = ingress_retrieval (),
323
340
)
324
341
325
- cluster = test_cluster_creation ()
342
+ cluster = test_cluster_creation (mocker )
326
343
assert cluster .cluster_uri () == "ray://unit-test-cluster-head-svc.ns.svc:10001"
327
344
assert (
328
345
cluster .cluster_dashboard_uri ()
@@ -363,13 +380,38 @@ def ray_addr(self, *args):
363
380
return self ._address
364
381
365
382
383
+ def ingress_retrieval ():
384
+ mock_ingress = client .V1Ingress (
385
+ metadata = {"name" : "mock-ingress-1" },
386
+ spec = {
387
+ "rules" : [
388
+ {
389
+ "host" : "ray-dashboard-unit-test-cluster-ns.apps.cluster.awsroute.org" ,
390
+ "http" : {
391
+ "paths" : [
392
+ {
393
+ "path" : "/" ,
394
+ "backend" : {
395
+ "service_name" : "unit-test-cluster-head-svc"
396
+ },
397
+ }
398
+ ]
399
+ },
400
+ }
401
+ ]
402
+ },
403
+ )
404
+ mock_ingress_list = client .V1IngressList (items = [mock_ingress ])
405
+ return mock_ingress_list
406
+
407
+
366
408
def test_ray_job_wrapping (mocker ):
367
409
mocker .patch ("kubernetes.config.load_kube_config" , return_value = "ignore" )
368
410
mocker .patch (
369
- "kubernetes.client.CustomObjectsApi.list_namespaced_custom_object " ,
370
- side_effect = uri_retreival ,
411
+ "kubernetes.client.CustomObjectsApi.get_cluster_custom_object " ,
412
+ return_value = { "spec" : { "domain" : "" }} ,
371
413
)
372
- cluster = test_cluster_creation ()
414
+ cluster = test_cluster_creation (mocker )
373
415
374
416
mocker .patch (
375
417
"ray.job_submission.JobSubmissionClient._check_connection_and_version_with_url" ,
@@ -455,6 +497,10 @@ def test_print_appwrappers(capsys):
455
497
456
498
457
499
def test_ray_details (mocker , capsys ):
500
+ mocker .patch (
501
+ "kubernetes.client.CustomObjectsApi.get_cluster_custom_object" ,
502
+ return_value = {"spec" : {"domain" : "" }},
503
+ )
458
504
ray1 = RayCluster (
459
505
name = "raytest1" ,
460
506
status = RayClusterStatus .READY ,
@@ -1512,6 +1558,10 @@ def get_aw_obj(group, version, namespace, plural):
1512
1558
1513
1559
def test_get_cluster (mocker ):
1514
1560
mocker .patch ("kubernetes.config.load_kube_config" , return_value = "ignore" )
1561
+ mocker .patch (
1562
+ "kubernetes.client.CustomObjectsApi.get_cluster_custom_object" ,
1563
+ return_value = {"spec" : {"domain" : "" }},
1564
+ )
1515
1565
mocker .patch (
1516
1566
"kubernetes.client.CustomObjectsApi.list_namespaced_custom_object" ,
1517
1567
side_effect = get_ray_obj ,
@@ -1540,6 +1590,9 @@ def test_list_clusters(mocker, capsys):
1540
1590
"kubernetes.client.CustomObjectsApi.list_namespaced_custom_object" ,
1541
1591
side_effect = get_obj_none ,
1542
1592
)
1593
+ mocker .patch (
1594
+ "kubernetes.client.NetworkingV1Api.list_namespaced_ingress" ,
1595
+ )
1543
1596
list_all_clusters ("ns" )
1544
1597
captured = capsys .readouterr ()
1545
1598
assert captured .out == (
@@ -1612,6 +1665,10 @@ def test_list_queue(mocker, capsys):
1612
1665
1613
1666
def test_cluster_status (mocker ):
1614
1667
mocker .patch ("kubernetes.config.load_kube_config" , return_value = "ignore" )
1668
+ mocker .patch (
1669
+ "kubernetes.client.CustomObjectsApi.get_cluster_custom_object" ,
1670
+ return_value = {"spec" : {"domain" : "" }},
1671
+ )
1615
1672
fake_aw = AppWrapper (
1616
1673
"test" , AppWrapperStatus .FAILED , can_run = True , job_state = "unused"
1617
1674
)
@@ -1690,6 +1747,10 @@ def test_cluster_status(mocker):
1690
1747
1691
1748
1692
1749
def test_wait_ready (mocker , capsys ):
1750
+ mocker .patch (
1751
+ "kubernetes.client.CustomObjectsApi.get_cluster_custom_object" ,
1752
+ return_value = {"spec" : {"domain" : "" }},
1753
+ )
1693
1754
mocker .patch ("kubernetes.config.load_kube_config" , return_value = "ignore" )
1694
1755
mocker .patch ("codeflare_sdk.cluster.cluster._app_wrapper_status" , return_value = None )
1695
1756
mocker .patch ("codeflare_sdk.cluster.cluster._ray_cluster_status" , return_value = None )
@@ -1717,7 +1778,11 @@ def test_wait_ready(mocker, capsys):
1717
1778
)
1718
1779
1719
1780
1720
- def test_jobdefinition_coverage ():
1781
+ def test_jobdefinition_coverage (mocker ):
1782
+ mocker .patch (
1783
+ "kubernetes.client.CustomObjectsApi.get_cluster_custom_object" ,
1784
+ return_value = {"spec" : {"domain" : "" }},
1785
+ )
1721
1786
abstract = JobDefinition ()
1722
1787
cluster = Cluster (test_config_creation ())
1723
1788
abstract ._dry_run (cluster )
@@ -1730,7 +1795,11 @@ def test_job_coverage():
1730
1795
abstract .logs ()
1731
1796
1732
1797
1733
- def test_DDPJobDefinition_creation ():
1798
+ def test_DDPJobDefinition_creation (mocker ):
1799
+ mocker .patch (
1800
+ "kubernetes.client.CustomObjectsApi.get_cluster_custom_object" ,
1801
+ return_value = {"spec" : {"domain" : "" }},
1802
+ )
1734
1803
ddp = DDPJobDefinition (
1735
1804
script = "test.py" ,
1736
1805
m = None ,
@@ -1775,7 +1844,7 @@ def test_DDPJobDefinition_dry_run(mocker):
1775
1844
"codeflare_sdk.cluster.cluster.Cluster.cluster_dashboard_uri" ,
1776
1845
return_value = "" ,
1777
1846
)
1778
- ddp = test_DDPJobDefinition_creation ()
1847
+ ddp = test_DDPJobDefinition_creation (mocker )
1779
1848
cluster = Cluster (test_config_creation ())
1780
1849
ddp_job = ddp ._dry_run (cluster )
1781
1850
assert type (ddp_job ) == AppDryRunInfo
@@ -1811,7 +1880,7 @@ def test_DDPJobDefinition_dry_run_no_cluster(mocker):
1811
1880
return_value = "opendatahub" ,
1812
1881
)
1813
1882
1814
- ddp = test_DDPJobDefinition_creation ()
1883
+ ddp = test_DDPJobDefinition_creation (mocker )
1815
1884
ddp .image = "fake-image"
1816
1885
ddp_job = ddp ._dry_run_no_cluster ()
1817
1886
assert type (ddp_job ) == AppDryRunInfo
@@ -1844,6 +1913,10 @@ def test_DDPJobDefinition_dry_run_no_resource_args(mocker):
1844
1913
Test that the dry run correctly gets resources from the cluster object
1845
1914
when the job definition does not specify resources.
1846
1915
"""
1916
+ mocker .patch (
1917
+ "kubernetes.client.CustomObjectsApi.get_cluster_custom_object" ,
1918
+ return_value = {"spec" : {"domain" : "" }},
1919
+ )
1847
1920
mocker .patch (
1848
1921
"codeflare_sdk.cluster.cluster.Cluster.cluster_dashboard_uri" ,
1849
1922
return_value = "" ,
@@ -1884,7 +1957,7 @@ def test_DDPJobDefinition_dry_run_no_cluster_no_resource_args(mocker):
1884
1957
return_value = "opendatahub" ,
1885
1958
)
1886
1959
1887
- ddp = test_DDPJobDefinition_creation ()
1960
+ ddp = test_DDPJobDefinition_creation (mocker )
1888
1961
try :
1889
1962
ddp ._dry_run_no_cluster ()
1890
1963
assert 0 == 1
@@ -1936,7 +2009,7 @@ def test_DDPJobDefinition_submit(mocker):
1936
2009
"codeflare_sdk.cluster.cluster.Cluster.cluster_dashboard_uri" ,
1937
2010
return_value = "fake-dashboard-uri" ,
1938
2011
)
1939
- ddp_def = test_DDPJobDefinition_creation ()
2012
+ ddp_def = test_DDPJobDefinition_creation (mocker )
1940
2013
cluster = Cluster (test_config_creation ())
1941
2014
mocker .patch (
1942
2015
"codeflare_sdk.job.jobs.get_current_namespace" ,
@@ -1967,7 +2040,7 @@ def test_DDPJob_creation(mocker):
1967
2040
"codeflare_sdk.cluster.cluster.Cluster.cluster_dashboard_uri" ,
1968
2041
return_value = "fake-dashboard-uri" ,
1969
2042
)
1970
- ddp_def = test_DDPJobDefinition_creation ()
2043
+ ddp_def = test_DDPJobDefinition_creation (mocker )
1971
2044
cluster = Cluster (test_config_creation ())
1972
2045
mocker .patch (
1973
2046
"codeflare_sdk.job.jobs.torchx_runner.schedule" ,
@@ -1990,7 +2063,7 @@ def test_DDPJob_creation(mocker):
1990
2063
1991
2064
1992
2065
def test_DDPJob_creation_no_cluster (mocker ):
1993
- ddp_def = test_DDPJobDefinition_creation ()
2066
+ ddp_def = test_DDPJobDefinition_creation (mocker )
1994
2067
ddp_def .image = "fake-image"
1995
2068
mocker .patch (
1996
2069
"codeflare_sdk.job.jobs.get_current_namespace" ,
0 commit comments