1
1
"""Test BatchSpawner and subclasses"""
2
2
3
+ import contextlib
3
4
import itertools
5
+ import os
4
6
import re
5
7
from unittest import mock
6
8
from .. import BatchSpawnerRegexStates
20
22
testjob = "12345"
21
23
testport = 54321
22
24
25
+ @contextlib .contextmanager
26
+ def setenv_context (** kwargs ):
27
+ orig = { }
28
+ for k , v in kwargs .items ():
29
+ orig [k ] = os .environ .get (k , None )
30
+ os .environ [k ] = v
31
+ yield
32
+ for k in kwargs :
33
+ if orig [k ] is not None :
34
+ os .environ [k ] = orig [k ]
35
+ else :
36
+ del os .environ [k ]
37
+
38
+
23
39
class BatchDummy (BatchSpawnerRegexStates ):
24
40
exec_prefix = ''
25
41
batch_submit_cmd = Unicode ('cat > /dev/null; echo ' + testjob )
@@ -504,32 +520,51 @@ def test_lfs(db, io_loop):
504
520
def test_keepvars (db , io_loop ):
505
521
"""Test of environment handling
506
522
"""
507
- # req_keepvars
523
+ environment = {'ABCDE' : 'TEST1' , 'VWXYZ' : 'TEST2' , 'XYZ' : 'TEST3' ,}
524
+
525
+
526
+ # req_keepvars_default - anything NOT here should not be propogated.
508
527
spawner_kwargs = {
509
528
'req_keepvars_default' : 'ABCDE' ,
510
529
}
511
530
batch_script_re_list = [
512
531
re .compile (r'--export=ABCDE' , re .X | re .M ),
532
+ re .compile (r'^((?!JUPYTERHUB_API_TOKEN).)*$' , re .X | re .S ), # *not* in the script
513
533
]
514
534
def env_test (env ):
515
- assert 'ABCDE' in env
516
- run_typical_slurm_spawner (db , io_loop ,
517
- spawner_kwargs = spawner_kwargs ,
518
- batch_script_re_list = batch_script_re_list ,
519
- env_test = env_test )
520
-
521
- # req_keepvars
535
+ # We can't test these - becasue removing these from the environment is
536
+ # a job of the batch system itself, which we do *not* run here.
537
+ #assert 'ABCDE' in env
538
+ #assert 'JUPYTERHUB_API_TOKEN' not in env
539
+ pass
540
+ with setenv_context (** environment ):
541
+ print (sorted (os .environ .keys ()))
542
+ run_typical_slurm_spawner (db , io_loop ,
543
+ spawner_kwargs = spawner_kwargs ,
544
+ batch_script_re_list = batch_script_re_list ,
545
+ env_test = env_test )
546
+
547
+ # req_keepvars - this should be added to the environment
522
548
spawner_kwargs = {
523
549
'req_keepvars' : 'ABCDE' ,
524
550
}
525
551
batch_script_re_list = [
526
552
re .compile (r'--export=.*ABCDE' , re .X | re .M ),
553
+ re .compile (r'^((?!VWXYZ).)*$' , re .X | re .M ), # *not* in line
554
+ re .compile (r'--export=.*JUPYTERHUB_API_TOKEN' , re .X | re .S ),
527
555
]
528
- run_typical_slurm_spawner (db , io_loop ,
529
- spawner_kwargs = spawner_kwargs ,
530
- batch_script_re_list = batch_script_re_list )
531
-
532
- # req_keepvars
556
+ def env_test (env ):
557
+ assert 'ABCDE' in env
558
+ assert 'VWXYZ' not in env
559
+ with setenv_context (** environment ):
560
+ run_typical_slurm_spawner (db , io_loop ,
561
+ spawner_kwargs = spawner_kwargs ,
562
+ batch_script_re_list = batch_script_re_list ,
563
+ env_test = env_test )
564
+
565
+ # admin_environment - this should be in the environment passed to
566
+ # run commands but not the --export command which is included in
567
+ # the batch scripts
533
568
spawner_kwargs = {
534
569
'admin_environment' : 'ABCDE' ,
535
570
}
@@ -539,13 +574,12 @@ def env_test(env):
539
574
def env_test (env ):
540
575
assert 'ABCDE' in env
541
576
assert 'VWXYZ' not in env
542
- os .environ ['ABCDE' ] = 'TEST1'
543
- os .environ ['VWXYZ' ] = 'TEST2'
544
- run_typical_slurm_spawner (db , io_loop ,
545
- spawner_kwargs = spawner_kwargs ,
546
- batch_script_re_list = batch_script_re_list ,
547
- env_test = env_test )
548
- del os .environ ['ABCDE' ], os .environ ['VWXYZ' ]
577
+ assert 'JUPYTERHUB_API_TOKEN' in env
578
+ with setenv_context (** environment ):
579
+ run_typical_slurm_spawner (db , io_loop ,
580
+ spawner_kwargs = spawner_kwargs ,
581
+ batch_script_re_list = batch_script_re_list ,
582
+ env_test = env_test )
549
583
550
584
# req_keepvars AND req_keepvars together
551
585
spawner_kwargs = {
@@ -555,6 +589,7 @@ def env_test(env):
555
589
batch_script_re_list = [
556
590
re .compile (r'--export=ABCDE,XYZ' , re .X | re .M ),
557
591
]
558
- run_typical_slurm_spawner (db , io_loop ,
559
- spawner_kwargs = spawner_kwargs ,
560
- batch_script_re_list = batch_script_re_list )
592
+ with setenv_context (** environment ):
593
+ run_typical_slurm_spawner (db , io_loop ,
594
+ spawner_kwargs = spawner_kwargs ,
595
+ batch_script_re_list = batch_script_re_list )
0 commit comments