@@ -34,27 +34,51 @@ def tmp_cwd() -> Generator[None, None, None]:
34
34
os .chdir (cwd )
35
35
36
36
37
+ def simple_role () -> specs .Role :
38
+ return specs .Role (
39
+ name = "foo" ,
40
+ image = "/some/path" ,
41
+ entrypoint = "echo" ,
42
+ args = ["hello slurm" , "test" ],
43
+ env = {
44
+ "FOO" : "bar" ,
45
+ },
46
+ num_replicas = 5 ,
47
+ resource = specs .Resource (
48
+ cpu = 2 ,
49
+ memMB = 10 ,
50
+ gpu = 3 ,
51
+ ),
52
+ )
53
+
54
+
55
+ def simple_app () -> specs .AppDef :
56
+ return specs .AppDef (
57
+ name = "foo" ,
58
+ roles = [
59
+ specs .Role (
60
+ name = "a" ,
61
+ image = "/some/path" ,
62
+ entrypoint = "echo" ,
63
+ args = [specs .macros .replica_id , f"hello { specs .macros .app_id } " ],
64
+ num_replicas = 2 ,
65
+ ),
66
+ specs .Role (
67
+ name = "b" ,
68
+ image = "/some/path" ,
69
+ entrypoint = "echo" ,
70
+ ),
71
+ ],
72
+ )
73
+
74
+
37
75
class SlurmSchedulerTest (unittest .TestCase ):
38
76
def test_create_scheduler (self ) -> None :
39
77
scheduler = create_scheduler ("foo" )
40
78
self .assertIsInstance (scheduler , SlurmScheduler )
41
79
42
80
def test_replica_request (self ) -> None :
43
- role = specs .Role (
44
- name = "foo" ,
45
- image = "/some/path" ,
46
- entrypoint = "echo" ,
47
- args = ["hello slurm" , "test" ],
48
- env = {
49
- "FOO" : "bar" ,
50
- },
51
- num_replicas = 5 ,
52
- resource = specs .Resource (
53
- cpu = 2 ,
54
- memMB = 10 ,
55
- gpu = 3 ,
56
- ),
57
- )
81
+ role = simple_role ()
58
82
sbatch , srun = SlurmReplicaRequest .from_role (
59
83
"role-0" , role , cfg = {}
60
84
).materialize ()
@@ -79,9 +103,9 @@ def test_replica_request(self) -> None:
79
103
],
80
104
)
81
105
82
- # test nomem option
106
+ def test_replica_request_nomem ( self ) -> None :
83
107
sbatch , srun = SlurmReplicaRequest .from_role (
84
- "role-name" , role , cfg = {"nomem" : True }
108
+ "role-name" , simple_role () , cfg = {"nomem" : True }
85
109
).materialize ()
86
110
self .assertEqual (
87
111
sbatch ,
@@ -93,6 +117,15 @@ def test_replica_request(self) -> None:
93
117
],
94
118
)
95
119
120
+ def test_replica_request_constraint (self ) -> None :
121
+ sbatch , srun = SlurmReplicaRequest .from_role (
122
+ "role-name" , simple_role (), cfg = {"constraint" : "orange" }
123
+ ).materialize ()
124
+ self .assertIn (
125
+ "--constraint=orange" ,
126
+ sbatch ,
127
+ )
128
+
96
129
def test_replica_request_app_id (self ) -> None :
97
130
role = specs .Role (
98
131
name = "foo" ,
@@ -132,23 +165,7 @@ def test_replica_request_run_config(self) -> None:
132
165
133
166
def test_dryrun_multi_role (self ) -> None :
134
167
scheduler = create_scheduler ("foo" )
135
- app = specs .AppDef (
136
- name = "foo" ,
137
- roles = [
138
- specs .Role (
139
- name = "a" ,
140
- image = "/some/path" ,
141
- entrypoint = "echo" ,
142
- args = [specs .macros .replica_id , f"hello { specs .macros .app_id } " ],
143
- num_replicas = 2 ,
144
- ),
145
- specs .Role (
146
- name = "b" ,
147
- image = "/some/path" ,
148
- entrypoint = "echo" ,
149
- ),
150
- ],
151
- )
168
+ app = simple_app ()
152
169
info = scheduler .submit_dryrun (app , cfg = {})
153
170
req = info .request
154
171
self .assertIsInstance (req , SlurmBatchRequest )
@@ -344,3 +361,36 @@ def test_log_iter(self, run: MagicMock) -> None:
344
361
)
345
362
)
346
363
self .assertEqual (logs , ["hello" , "world" ])
364
+
365
+ def test_dryrun_comment (self ) -> None :
366
+ scheduler = create_scheduler ("foo" )
367
+ app = simple_app ()
368
+ info = scheduler .submit_dryrun (
369
+ app ,
370
+ cfg = {
371
+ "comment" : "banana foo bar" ,
372
+ },
373
+ )
374
+ self .assertIn (
375
+ "--comment=banana foo bar" ,
376
+ info .request .cmd ,
377
+ )
378
+
379
+ def test_dryrun_mail (self ) -> None :
380
+ scheduler = create_scheduler ("foo" )
381
+ app = simple_app ()
382
+ info = scheduler .submit_dryrun (
383
+ app ,
384
+ cfg = {
385
+
386
+ "mail-type" : "END" ,
387
+ },
388
+ )
389
+ self .assertIn (
390
+
391
+ info .request .cmd ,
392
+ )
393
+ self .assertIn (
394
+ "--mail-type=END" ,
395
+ info .request .cmd ,
396
+ )
0 commit comments