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
+ """Context manage which sets and restores environment variables."""
28
+ orig = { }
29
+ for k , v in kwargs .items ():
30
+ orig [k ] = os .environ .get (k , None )
31
+ os .environ [k ] = v
32
+ yield
33
+ for k in kwargs :
34
+ if orig [k ] is not None :
35
+ os .environ [k ] = orig [k ]
36
+ else :
37
+ del os .environ [k ]
38
+
39
+
23
40
class BatchDummy (BatchSpawnerRegexStates ):
24
41
exec_prefix = ''
25
42
batch_submit_cmd = Unicode ('cat > /dev/null; echo ' + testjob )
@@ -504,32 +521,50 @@ def test_lfs(db, io_loop):
504
521
def test_keepvars (db , io_loop ):
505
522
"""Test of environment handling
506
523
"""
507
- # req_keepvars
524
+ environment = {'ABCDE' : 'TEST1' , 'VWXYZ' : 'TEST2' , 'XYZ' : 'TEST3' ,}
525
+
526
+
527
+ # req_keepvars_default - anything NOT here should not be propogated.
508
528
spawner_kwargs = {
509
529
'req_keepvars_default' : 'ABCDE' ,
510
530
}
511
531
batch_script_re_list = [
512
532
re .compile (r'--export=ABCDE' , re .X | re .M ),
533
+ re .compile (r'^((?!JUPYTERHUB_API_TOKEN).)*$' , re .X | re .S ), # *not* in the script
513
534
]
514
535
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
536
+ # We can't test these - becasue removing these from the environment is
537
+ # a job of the batch system itself, which we do *not* run here.
538
+ #assert 'ABCDE' in env
539
+ #assert 'JUPYTERHUB_API_TOKEN' not in env
540
+ pass
541
+ with setenv_context (** environment ):
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