Skip to content

Commit d04882e

Browse files
Refactor unit tests to eliminate pytest warnings:
- Refactored to remove return statements from the tests that are ran. - Created the respective support functions. - Silenced warnings that originate from pkg_resources.
1 parent fb34ba4 commit d04882e

File tree

3 files changed

+103
-56
lines changed

3 files changed

+103
-56
lines changed

pyproject.toml

+6
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,9 @@ pdoc3 = "0.10.0"
4040
pytest = "7.4.0"
4141
coverage = "7.2.7"
4242
pytest-mock = "3.11.1"
43+
44+
[tool.pytest.ini_options]
45+
filterwarnings = [
46+
"ignore::DeprecationWarning:pkg_resources",
47+
"ignore:pkg_resources is deprecated as an API:DeprecationWarning",
48+
]

tests/unit_test.py

+42-56
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,14 @@
6464
export_env,
6565
)
6666

67+
from tests.unit_test_support import (
68+
createClusterWithConfig,
69+
createTestDDP,
70+
createDDPJob_no_cluster,
71+
createClusterConfig,
72+
createDDPJob_with_cluster
73+
)
74+
6775
import openshift
6876
from openshift.selector import Selector
6977
import ray
@@ -170,19 +178,7 @@ def test_auth_coverage():
170178

171179

172180
def test_config_creation():
173-
config = ClusterConfiguration(
174-
name="unit-test-cluster",
175-
namespace="ns",
176-
num_workers=2,
177-
min_cpus=3,
178-
max_cpus=4,
179-
min_memory=5,
180-
max_memory=6,
181-
num_gpus=7,
182-
instascale=True,
183-
machine_types=["cpu.small", "gpu.large"],
184-
image_pull_secrets=["unit-test-pull-secret"],
185-
)
181+
config = createClusterConfig()
186182

187183
assert config.name == "unit-test-cluster" and config.namespace == "ns"
188184
assert config.num_workers == 2
@@ -194,17 +190,15 @@ def test_config_creation():
194190
assert config.instascale
195191
assert config.machine_types == ["cpu.small", "gpu.large"]
196192
assert config.image_pull_secrets == ["unit-test-pull-secret"]
197-
return config
198193

199194

200195
def test_cluster_creation():
201-
cluster = Cluster(test_config_creation())
196+
cluster = createClusterWithConfig()
202197
assert cluster.app_wrapper_yaml == "unit-test-cluster.yaml"
203198
assert cluster.app_wrapper_name == "unit-test-cluster"
204199
assert filecmp.cmp(
205200
"unit-test-cluster.yaml", f"{parent}/tests/test-case.yaml", shallow=True
206201
)
207-
return cluster
208202

209203

210204
def test_default_cluster_creation(mocker):
@@ -221,8 +215,6 @@ def test_default_cluster_creation(mocker):
221215
assert cluster.app_wrapper_name == "unit-test-default-cluster"
222216
assert cluster.config.namespace == "opendatahub"
223217

224-
return cluster
225-
226218

227219
def arg_check_apply_effect(group, version, namespace, plural, body, *args):
228220
assert group == "mcad.ibm.com"
@@ -254,7 +246,7 @@ def test_cluster_up_down(mocker):
254246
"kubernetes.client.CustomObjectsApi.delete_namespaced_custom_object",
255247
side_effect=arg_check_del_effect,
256248
)
257-
cluster = test_cluster_creation()
249+
cluster = cluster = createClusterWithConfig()
258250
cluster.up()
259251
cluster.down()
260252

@@ -322,7 +314,7 @@ def test_cluster_uris(mocker):
322314
side_effect=uri_retreival,
323315
)
324316

325-
cluster = test_cluster_creation()
317+
cluster = cluster = createClusterWithConfig()
326318
assert cluster.cluster_uri() == "ray://unit-test-cluster-head-svc.ns.svc:10001"
327319
assert (
328320
cluster.cluster_dashboard_uri()
@@ -369,7 +361,7 @@ def test_ray_job_wrapping(mocker):
369361
"kubernetes.client.CustomObjectsApi.list_namespaced_custom_object",
370362
side_effect=uri_retreival,
371363
)
372-
cluster = test_cluster_creation()
364+
cluster = cluster = createClusterWithConfig()
373365

374366
mocker.patch(
375367
"ray.job_submission.JobSubmissionClient._check_connection_and_version_with_url",
@@ -1719,7 +1711,7 @@ def test_wait_ready(mocker, capsys):
17191711

17201712
def test_jobdefinition_coverage():
17211713
abstract = JobDefinition()
1722-
cluster = Cluster(test_config_creation())
1714+
cluster = createClusterWithConfig()
17231715
abstract._dry_run(cluster)
17241716
abstract.submit(cluster)
17251717

@@ -1731,22 +1723,7 @@ def test_job_coverage():
17311723

17321724

17331725
def test_DDPJobDefinition_creation():
1734-
ddp = DDPJobDefinition(
1735-
script="test.py",
1736-
m=None,
1737-
script_args=["test"],
1738-
name="test",
1739-
cpu=1,
1740-
gpu=0,
1741-
memMB=1024,
1742-
h=None,
1743-
j="2x1",
1744-
env={"test": "test"},
1745-
max_retries=0,
1746-
mounts=[],
1747-
rdzv_port=29500,
1748-
scheduler_args={"requirements": "test"},
1749-
)
1726+
ddp = createTestDDP()
17501727
assert ddp.script == "test.py"
17511728
assert ddp.m == None
17521729
assert ddp.script_args == ["test"]
@@ -1761,7 +1738,6 @@ def test_DDPJobDefinition_creation():
17611738
assert ddp.mounts == []
17621739
assert ddp.rdzv_port == 29500
17631740
assert ddp.scheduler_args == {"requirements": "test"}
1764-
return ddp
17651741

17661742

17671743
def test_DDPJobDefinition_dry_run(mocker):
@@ -1775,8 +1751,8 @@ def test_DDPJobDefinition_dry_run(mocker):
17751751
"codeflare_sdk.cluster.cluster.Cluster.cluster_dashboard_uri",
17761752
return_value="",
17771753
)
1778-
ddp = test_DDPJobDefinition_creation()
1779-
cluster = Cluster(test_config_creation())
1754+
ddp = createTestDDP()
1755+
cluster = createClusterWithConfig()
17801756
ddp_job = ddp._dry_run(cluster)
17811757
assert type(ddp_job) == AppDryRunInfo
17821758
assert ddp_job._fmt is not None
@@ -1811,7 +1787,7 @@ def test_DDPJobDefinition_dry_run_no_cluster(mocker):
18111787
return_value="opendatahub",
18121788
)
18131789

1814-
ddp = test_DDPJobDefinition_creation()
1790+
ddp = createTestDDP()
18151791
ddp.image = "fake-image"
18161792
ddp_job = ddp._dry_run_no_cluster()
18171793
assert type(ddp_job) == AppDryRunInfo
@@ -1848,7 +1824,7 @@ def test_DDPJobDefinition_dry_run_no_resource_args(mocker):
18481824
"codeflare_sdk.cluster.cluster.Cluster.cluster_dashboard_uri",
18491825
return_value="",
18501826
)
1851-
cluster = Cluster(test_config_creation())
1827+
cluster = createClusterWithConfig()
18521828
ddp = DDPJobDefinition(
18531829
script="test.py",
18541830
m=None,
@@ -1884,7 +1860,7 @@ def test_DDPJobDefinition_dry_run_no_cluster_no_resource_args(mocker):
18841860
return_value="opendatahub",
18851861
)
18861862

1887-
ddp = test_DDPJobDefinition_creation()
1863+
ddp = createTestDDP()
18881864
try:
18891865
ddp._dry_run_no_cluster()
18901866
assert 0 == 1
@@ -1936,8 +1912,8 @@ def test_DDPJobDefinition_submit(mocker):
19361912
"codeflare_sdk.cluster.cluster.Cluster.cluster_dashboard_uri",
19371913
return_value="fake-dashboard-uri",
19381914
)
1939-
ddp_def = test_DDPJobDefinition_creation()
1940-
cluster = Cluster(test_config_creation())
1915+
ddp_def = createTestDDP()
1916+
cluster = createClusterWithConfig()
19411917
mocker.patch(
19421918
"codeflare_sdk.job.jobs.get_current_namespace",
19431919
side_effect="opendatahub",
@@ -1967,13 +1943,13 @@ def test_DDPJob_creation(mocker):
19671943
"codeflare_sdk.cluster.cluster.Cluster.cluster_dashboard_uri",
19681944
return_value="fake-dashboard-uri",
19691945
)
1970-
ddp_def = test_DDPJobDefinition_creation()
1971-
cluster = Cluster(test_config_creation())
1946+
ddp_def = createTestDDP()
1947+
cluster = createClusterWithConfig()
19721948
mocker.patch(
19731949
"codeflare_sdk.job.jobs.torchx_runner.schedule",
19741950
return_value="fake-dashboard-url",
19751951
) # a fake app_handle
1976-
ddp_job = DDPJob(ddp_def, cluster)
1952+
ddp_job = createDDPJob_with_cluster(ddp_def, cluster)
19771953
assert type(ddp_job) == DDPJob
19781954
assert type(ddp_job.job_definition) == DDPJobDefinition
19791955
assert type(ddp_job.cluster) == Cluster
@@ -1986,11 +1962,10 @@ def test_DDPJob_creation(mocker):
19861962
assert type(job_info._app) == AppDef
19871963
assert type(job_info._cfg) == type(dict())
19881964
assert type(job_info._scheduler) == type(str())
1989-
return ddp_job
19901965

19911966

19921967
def test_DDPJob_creation_no_cluster(mocker):
1993-
ddp_def = test_DDPJobDefinition_creation()
1968+
ddp_def = createTestDDP()
19941969
ddp_def.image = "fake-image"
19951970
mocker.patch(
19961971
"codeflare_sdk.job.jobs.get_current_namespace",
@@ -2000,7 +1975,7 @@ def test_DDPJob_creation_no_cluster(mocker):
20001975
"codeflare_sdk.job.jobs.torchx_runner.schedule",
20011976
return_value="fake-app-handle",
20021977
) # a fake app_handle
2003-
ddp_job = DDPJob(ddp_def, None)
1978+
ddp_job = createDDPJob_no_cluster(ddp_def, None)
20041979
assert type(ddp_job) == DDPJob
20051980
assert type(ddp_job.job_definition) == DDPJobDefinition
20061981
assert ddp_job.cluster == None
@@ -2013,11 +1988,14 @@ def test_DDPJob_creation_no_cluster(mocker):
20131988
assert type(job_info._app) == AppDef
20141989
assert type(job_info._cfg) == type(dict())
20151990
assert type(job_info._scheduler) == type(str())
2016-
return ddp_job
20171991

20181992

20191993
def test_DDPJob_status(mocker):
2020-
ddp_job = test_DDPJob_creation(mocker)
1994+
# Setup the neccesary mock patches
1995+
test_DDPJob_creation(mocker)
1996+
ddp_def = createTestDDP()
1997+
cluster = createClusterWithConfig()
1998+
ddp_job = createDDPJob_with_cluster(ddp_def, cluster)
20211999
mocker.patch(
20222000
"codeflare_sdk.job.jobs.torchx_runner.status", return_value="fake-status"
20232001
)
@@ -2027,7 +2005,11 @@ def test_DDPJob_status(mocker):
20272005

20282006

20292007
def test_DDPJob_logs(mocker):
2030-
ddp_job = test_DDPJob_creation(mocker)
2008+
# Setup the neccesary mock patches
2009+
test_DDPJob_creation(mocker)
2010+
ddp_def = createTestDDP()
2011+
cluster = createClusterWithConfig()
2012+
ddp_job = createDDPJob_with_cluster(ddp_def, cluster)
20312013
mocker.patch(
20322014
"codeflare_sdk.job.jobs.torchx_runner.log_lines", return_value="fake-logs"
20332015
)
@@ -2041,7 +2023,11 @@ def arg_check_side_effect(*args):
20412023

20422024

20432025
def test_DDPJob_cancel(mocker):
2044-
ddp_job = test_DDPJob_creation_no_cluster(mocker)
2026+
# Setup the neccesary mock patches
2027+
test_DDPJob_creation_no_cluster(mocker)
2028+
ddp_def = createTestDDP()
2029+
ddp_def.image = "fake-image"
2030+
ddp_job = createDDPJob_no_cluster(ddp_def, None)
20452031
mocker.patch(
20462032
"openshift.get_project_name",
20472033
return_value="opendatahub",

tests/unit_test_support.py

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
from codeflare_sdk.job.jobs import (
2+
DDPJobDefinition,
3+
DDPJob,
4+
)
5+
6+
from codeflare_sdk.cluster.cluster import (
7+
Cluster,
8+
ClusterConfiguration,
9+
)
10+
11+
12+
def createTestDDP():
13+
ddp = DDPJobDefinition(
14+
script="test.py",
15+
m=None,
16+
script_args=["test"],
17+
name="test",
18+
cpu=1,
19+
gpu=0,
20+
memMB=1024,
21+
h=None,
22+
j="2x1",
23+
env={"test": "test"},
24+
max_retries=0,
25+
mounts=[],
26+
rdzv_port=29500,
27+
scheduler_args={"requirements": "test"},
28+
)
29+
return ddp
30+
31+
def createDDPJob_no_cluster(ddp_def, cluster):
32+
return DDPJob(ddp_def, cluster)
33+
34+
def createClusterConfig():
35+
config = ClusterConfiguration(
36+
name="unit-test-cluster",
37+
namespace="ns",
38+
num_workers=2,
39+
min_cpus=3,
40+
max_cpus=4,
41+
min_memory=5,
42+
max_memory=6,
43+
num_gpus=7,
44+
instascale=True,
45+
machine_types=["cpu.small", "gpu.large"],
46+
image_pull_secrets=["unit-test-pull-secret"],
47+
)
48+
return config
49+
50+
def createClusterWithConfig():
51+
cluster = Cluster(createClusterConfig())
52+
return cluster
53+
54+
def createDDPJob_with_cluster(ddp_def, cluster=createClusterWithConfig()):
55+
return DDPJob(ddp_def, cluster)

0 commit comments

Comments
 (0)