@@ -422,33 +422,49 @@ async def test_gateway_get_named_kernelspec(init_gateway, jp_fetch):
422
422
assert expected_http_error (e , 404 )
423
423
424
424
425
- async def test_gateway_session_lifecycle (init_gateway , jp_root_dir , jp_fetch ):
425
+ @pytest .mark .parametrize ("cull_kernel" , [False , True ])
426
+ async def test_gateway_session_lifecycle (init_gateway , jp_root_dir , jp_fetch , cull_kernel ):
426
427
# Validate session lifecycle functions; create and delete.
427
428
428
429
# create
429
430
session_id , kernel_id = await create_session (jp_root_dir , jp_fetch , "kspec_foo" )
430
431
431
432
# ensure kernel still considered running
432
- assert await is_kernel_running (jp_fetch , kernel_id ) is True
433
+ assert await is_session_active (jp_fetch , session_id ) is True
433
434
434
435
# interrupt
435
436
await interrupt_kernel (jp_fetch , kernel_id )
436
437
437
438
# ensure kernel still considered running
438
- assert await is_kernel_running (jp_fetch , kernel_id ) is True
439
+ assert await is_session_active (jp_fetch , session_id ) is True
439
440
440
441
# restart
441
442
await restart_kernel (jp_fetch , kernel_id )
442
443
443
- # ensure kernel still considered running
444
- assert await is_kernel_running (jp_fetch , kernel_id ) is True
444
+ assert await is_session_active (jp_fetch , session_id ) is True
445
445
446
- # delete
447
- await delete_session (jp_fetch , session_id )
448
- assert await is_kernel_running (jp_fetch , kernel_id ) is False
446
+ if cull_kernel :
447
+ running_kernels .pop (kernel_id )
448
+
449
+ # fetch kernel and session and ensure not considered running
450
+ assert await is_kernel_running (jp_fetch , kernel_id ) is not cull_kernel
451
+ assert await is_session_active (jp_fetch , session_id ) is not cull_kernel
452
+
453
+ # delete session. If culled, ensure 404 is raised
454
+ if cull_kernel :
455
+ with pytest .raises (tornado .httpclient .HTTPClientError ) as e :
456
+ await delete_session (jp_fetch , session_id )
457
+ assert expected_http_error (e , 404 )
458
+ else :
459
+ await delete_session (jp_fetch , session_id )
460
+
461
+ assert await is_session_active (jp_fetch , session_id ) is False
449
462
450
463
451
- async def test_gateway_kernel_lifecycle (init_gateway , jp_serverapp , jp_ws_fetch , jp_fetch ):
464
+ @pytest .mark .parametrize ("cull_kernel" , [False , True ])
465
+ async def test_gateway_kernel_lifecycle (
466
+ init_gateway , jp_serverapp , jp_ws_fetch , jp_fetch , cull_kernel
467
+ ):
452
468
# Validate kernel lifecycle functions; create, interrupt, restart and delete.
453
469
454
470
# create
@@ -475,8 +491,20 @@ async def test_gateway_kernel_lifecycle(init_gateway, jp_serverapp, jp_ws_fetch,
475
491
# ensure kernel still considered running
476
492
assert await is_kernel_running (jp_fetch , kernel_id ) is True
477
493
478
- # delete
479
- await delete_kernel (jp_fetch , kernel_id )
494
+ if cull_kernel :
495
+ running_kernels .pop (kernel_id )
496
+
497
+ # fetch kernel and session and ensure not considered running
498
+ assert await is_kernel_running (jp_fetch , kernel_id ) is not cull_kernel
499
+
500
+ # delete kernel. If culled, ensure 404 is raised
501
+ if cull_kernel :
502
+ with pytest .raises (tornado .httpclient .HTTPClientError ) as e :
503
+ await delete_kernel (jp_fetch , kernel_id )
504
+ assert expected_http_error (e , 404 )
505
+ else :
506
+ await delete_kernel (jp_fetch , kernel_id )
507
+
480
508
assert await is_kernel_running (jp_fetch , kernel_id ) is False
481
509
482
510
@@ -578,6 +606,22 @@ async def test_channel_queue_get_msg_when_response_router_had_finished():
578
606
#
579
607
# Test methods below...
580
608
#
609
+
610
+
611
+ async def is_session_active (jp_fetch , session_id ):
612
+ """Issues request to get the set of running kernels"""
613
+ with mocked_gateway :
614
+ # Get list of running kernels
615
+ r = await jp_fetch ("api" , "sessions" , method = "GET" )
616
+ assert r .code == 200
617
+ sessions = json .loads (r .body .decode ("utf-8" ))
618
+ assert len (sessions ) == len (running_kernels ) # Use running_kernels as truth
619
+ for model in sessions :
620
+ if model .get ("id" ) == session_id :
621
+ return True
622
+ return False
623
+
624
+
581
625
async def create_session (root_dir , jp_fetch , kernel_name ):
582
626
"""Creates a session for a kernel. The session is created against the server
583
627
which then uses the gateway for kernel management.
0 commit comments