2022-05-23 00:16:32 +04:00

65 lines
1.8 KiB
Python

import os
import shutil
import sys
import time
from subprocess import PIPE
from subprocess import Popen
from tempfile import mkdtemp
def _launch(extra_env):
env = os.environ.copy()
env.update(extra_env)
return Popen(
[sys.executable, "-c", "from jupyter_client.kernelapp import main; main()"],
env=env,
stderr=PIPE,
)
WAIT_TIME = 10
POLL_FREQ = 10
def test_kernelapp_lifecycle():
# Check that 'jupyter kernel' starts and terminates OK.
runtime_dir = mkdtemp()
startup_dir = mkdtemp()
started = os.path.join(startup_dir, "started")
try:
p = _launch(
{
"JUPYTER_RUNTIME_DIR": runtime_dir,
"JUPYTER_CLIENT_TEST_RECORD_STARTUP_PRIVATE": started,
}
)
# Wait for start
for _ in range(WAIT_TIME * POLL_FREQ):
if os.path.isfile(started):
break
time.sleep(1 / POLL_FREQ)
else:
raise AssertionError("No started file created in {} seconds".format(WAIT_TIME))
# Connection file should be there by now
for _ in range(WAIT_TIME * POLL_FREQ):
files = os.listdir(runtime_dir)
if files:
break
time.sleep(1 / POLL_FREQ)
else:
raise AssertionError("No connection file created in {} seconds".format(WAIT_TIME))
assert len(files) == 1
cf = files[0]
assert cf.startswith("kernel")
assert cf.endswith(".json")
# Send SIGTERM to shut down
time.sleep(1)
p.terminate()
_, stderr = p.communicate(timeout=WAIT_TIME)
assert cf in stderr.decode("utf-8", "replace")
finally:
shutil.rmtree(runtime_dir)
shutil.rmtree(startup_dir)