30
30
LocalDirectoryImageProvider ,
31
31
LocalScheduler ,
32
32
ReplicaParam ,
33
- create_cwd_scheduler ,
34
33
_join_PATH ,
34
+ create_cwd_scheduler ,
35
35
make_unique ,
36
36
)
37
- from torchx .specs .api import AppDef , AppState , Role , is_terminal , macros , Resource
37
+ from torchx .specs .api import AppDef , AppState , Resource , Role , is_terminal , macros
38
38
39
39
from .test_util import write_shell_script
40
40
@@ -336,24 +336,29 @@ def test_submit_inherit_parent_envs(self) -> None:
336
336
os .environ , {"PATH" : "/bin:/usr/bin" , "TORCHELASTIC_ERROR_FILE" : "ignored" }
337
337
)
338
338
def test_child_process_env_append_cwd (self , popen_mock : MagicMock ) -> None :
339
- ignored = 0
340
- self .scheduler ._popen (
341
- role_name = "ignored" ,
342
- replica_id = ignored ,
343
- replica_params = ReplicaParam (
344
- args = ["a" , "b" ],
345
- env = {},
346
- cwd = "/home/bob" ,
347
- stdout = None ,
348
- stderr = None ,
349
- combined = None ,
339
+ popen_request = self .scheduler ._to_popen_request (
340
+ app = AppDef (
341
+ name = "_" ,
342
+ roles = [
343
+ Role (name = "foo" , image = self .test_dir , env = {"PATH" : "/home/bob" }),
344
+ ],
350
345
),
351
- prepend_cwd = False ,
346
+ cfg = {"prepend_cwd" : False },
347
+ )
348
+
349
+ # the test scheduler is hooked up with LocalDirectoryImageProvider
350
+ # which treats the role's image as CWD
351
+ replica_params = popen_request .role_params ["foo" ][0 ]
352
+ self .assertEqual (f"/home/bob:{ self .test_dir } " , replica_params .env ["PATH" ])
353
+
354
+ # _popen actually adds in the os.environ[PATH]
355
+ self .scheduler ._popen (
356
+ role_name = "foo" , replica_id = 0 , replica_params = replica_params
352
357
)
353
358
354
359
self .assertEqual (
355
360
# for python 3.7 BC get call_args.kwargs by index
356
- "/bin:/usr/ bin:/home/bob " ,
361
+ f"/home/bob: { self . test_dir } :/ bin:/usr/bin " ,
357
362
popen_mock .call_args [1 ]["env" ]["PATH" ],
358
363
)
359
364
@@ -362,61 +367,58 @@ def test_child_process_env_append_cwd(self, popen_mock: MagicMock) -> None:
362
367
os .environ , {"PATH" : "/bin:/usr/bin" , "TORCHELASTIC_ERROR_FILE" : "ignored" }
363
368
)
364
369
def test_child_process_env_prepend_cwd (self , popen_mock : MagicMock ) -> None :
365
- ignored = 0
366
- self .scheduler ._popen (
367
- role_name = "ignored" ,
368
- replica_id = ignored ,
369
- replica_params = ReplicaParam (
370
- args = ["a" , "b" ],
371
- env = {},
372
- cwd = "/home/bob" ,
373
- stdout = None ,
374
- stderr = None ,
375
- combined = None ,
370
+ popen_request = self .scheduler ._to_popen_request (
371
+ app = AppDef (
372
+ name = "_" ,
373
+ roles = [
374
+ Role (name = "foo" , image = self .test_dir , env = {"PATH" : "/home/bob" }),
375
+ ],
376
376
),
377
- prepend_cwd = True ,
377
+ cfg = {"prepend_cwd" : True },
378
+ )
379
+
380
+ # the test scheduler is hooked up with LocalDirectoryImageProvider
381
+ # which treats the role's image as CWD
382
+ replica_params = popen_request .role_params ["foo" ][0 ]
383
+ self .assertEqual (f"{ self .test_dir } :/home/bob" , replica_params .env ["PATH" ])
384
+
385
+ # _popen actually adds in the os.environ[PATH]
386
+ self .scheduler ._popen (
387
+ role_name = "foo" , replica_id = 0 , replica_params = replica_params
378
388
)
379
389
380
390
self .assertEqual (
381
391
# for python 3.7 BC get call_args.kwargs by index
382
- " /home/bob:/bin:/usr/bin" ,
392
+ f" { self . test_dir } : /home/bob:/bin:/usr/bin" ,
383
393
popen_mock .call_args [1 ]["env" ]["PATH" ],
384
394
)
385
395
386
396
@mock .patch ("subprocess.Popen" )
387
397
@mock .patch .dict (os .environ , {"TORCHELASTIC_ERROR_FILE" : "ignored" }, clear = True )
388
398
def test_child_process_env_none (self , popen_mock : MagicMock ) -> None :
389
- ignored = 0
390
- self .scheduler ._popen (
391
- role_name = "ignored" ,
392
- replica_id = ignored ,
393
- replica_params = ReplicaParam (
394
- args = ["a" , "b" ],
395
- env = {},
396
- cwd = "/home/bob" ,
397
- stdout = None ,
398
- stderr = None ,
399
- combined = None ,
399
+ popen_request = self .scheduler ._to_popen_request (
400
+ app = AppDef (
401
+ name = "_" ,
402
+ roles = [Role (name = "foo" , image = self .test_dir )],
400
403
),
401
- prepend_cwd = True ,
404
+ cfg = {} ,
402
405
)
403
- self .assertEqual ("/home/bob" , popen_mock .call_args [1 ]["env" ]["PATH" ])
404
406
407
+ # the test scheduler is hooked up with LocalDirectoryImageProvider
408
+ # which treats the role's image as CWD
409
+ replica_params = popen_request .role_params ["foo" ][0 ]
410
+ self .assertEqual (f"{ self .test_dir } " , replica_params .env ["PATH" ])
411
+
412
+ # _popen actually adds in the os.environ[PATH]
405
413
self .scheduler ._popen (
406
- role_name = "ignored" ,
407
- replica_id = ignored ,
408
- replica_params = ReplicaParam (
409
- args = ["a" , "b" ],
410
- env = {},
411
- cwd = None ,
412
- stdout = None ,
413
- stderr = None ,
414
- combined = None ,
415
- ),
416
- prepend_cwd = True ,
414
+ role_name = "foo" , replica_id = 0 , replica_params = replica_params
415
+ )
416
+
417
+ self .assertEqual (
418
+ # for python 3.7 BC get call_args.kwargs by index
419
+ f"{ self .test_dir } " ,
420
+ popen_mock .call_args [1 ]["env" ]["PATH" ],
417
421
)
418
- # for python 3.7 BC get call_args.kwargs by index
419
- self .assertFalse (popen_mock .call_args [1 ]["env" ]["PATH" ])
420
422
421
423
@mock .patch .dict (os .environ , {"FOO" : "bar" })
422
424
def test_submit_override_parent_env (self ) -> None :
0 commit comments