Add spawner progress message
This commit is contained in:
parent
8574a75e37
commit
77b4c64f88
6 changed files with 186 additions and 4 deletions
34
tests/test_progress.py
Normal file
34
tests/test_progress.py
Normal file
|
@ -0,0 +1,34 @@
|
|||
"""Test progress messages module."""
|
||||
|
||||
import pytest
|
||||
from batchspawner import JobStatus
|
||||
from glicid_spawner.progress import get_progress, jhp
|
||||
|
||||
|
||||
def test_progress_dict():
|
||||
"""Test jupyterhub progress message dictionary."""
|
||||
progress = jhp(1, 'Foo')
|
||||
|
||||
assert isinstance(progress, dict)
|
||||
assert progress['progress'] == 1
|
||||
assert progress['message'] == 'Foo'
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
'job_status, elapse_time, expected',
|
||||
[
|
||||
(JobStatus.UNKNOWN, 0, 0), # ERROR
|
||||
(JobStatus.NOTFOUND, 0, 10), # SUBMIT
|
||||
(JobStatus.PENDING, 0, 20), # PENDING
|
||||
(JobStatus.RUNNING, 0, 40), # INIT
|
||||
(JobStatus.RUNNING, 10, 60), # SETUP
|
||||
(JobStatus.RUNNING, 30, 80), # CONNECT
|
||||
(JobStatus.RUNNING, 60, 95), # TOO_LONG
|
||||
],
|
||||
)
|
||||
def test_progress_msg(job_status, elapse_time, expected):
|
||||
"""Test progress getter."""
|
||||
progress = get_progress(job_status, elapse_time)
|
||||
|
||||
assert progress['progress'] == expected
|
||||
assert isinstance(progress['message'], str)
|
|
@ -1,17 +1,20 @@
|
|||
"""Test GLiCID spawner module."""
|
||||
|
||||
from collections import namedtuple
|
||||
from itertools import repeat
|
||||
|
||||
import glicid_spawner.spawner
|
||||
import pytest
|
||||
from batchspawner import SlurmSpawner
|
||||
from glicid_spawner import GlicidSpawner
|
||||
from glicid_spawner.spawner import asyncio
|
||||
|
||||
User = namedtuple('User', 'name')
|
||||
|
||||
|
||||
def test_spawner_config():
|
||||
"""Test spawner configuration."""
|
||||
spawner = GlicidSpawner()
|
||||
spawner = GlicidSpawner(progress_rate=10)
|
||||
|
||||
assert isinstance(spawner, GlicidSpawner)
|
||||
assert isinstance(spawner, SlurmSpawner)
|
||||
|
@ -19,6 +22,7 @@ def test_spawner_config():
|
|||
assert spawner.batchspawner_singleuser_cmd == 'glicid-spawner-singleuser'
|
||||
|
||||
assert spawner.req_qos == 'short'
|
||||
assert spawner.progress_rate == 10
|
||||
|
||||
|
||||
def test_spawner_parse_job_id():
|
||||
|
@ -47,3 +51,48 @@ def test_spawner_options_form(monkeypatch):
|
|||
assert spawner.user.name == 'john-doe'
|
||||
assert spawner.options_form == "options_form('john-doe')"
|
||||
assert spawner.options_from_form({'foo': 123}) == "options_from_form({'foo': 123})"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_spawner_progress(monkeypatch):
|
||||
"""Test spawner progress messages."""
|
||||
|
||||
def isrunning():
|
||||
"""Running generator values."""
|
||||
yield False # NOTFOUND
|
||||
yield False # PENDING
|
||||
yield from repeat(True) # RUNNING
|
||||
|
||||
def ispending():
|
||||
"""Pending generator values."""
|
||||
yield False # NOTFOUND
|
||||
yield True # PENDING
|
||||
yield from repeat(False) # RUNNING (never used)
|
||||
|
||||
# Mock Job status generator
|
||||
iter_ispending = iter(ispending())
|
||||
iter_isrunning = iter(isrunning())
|
||||
|
||||
monkeypatch.setattr(
|
||||
glicid_spawner.GlicidSpawner, 'state_isrunning', lambda _: next(iter_isrunning)
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
glicid_spawner.GlicidSpawner, 'state_ispending', lambda _: next(iter_ispending)
|
||||
)
|
||||
|
||||
async def mock_sleep(_):
|
||||
"""Mock asyncio sleep."""
|
||||
|
||||
monkeypatch.setattr(asyncio, 'sleep', mock_sleep)
|
||||
|
||||
spawner = GlicidSpawner(progress_rate=20)
|
||||
|
||||
progress = [msg['progress'] async for msg in spawner.progress()]
|
||||
|
||||
assert progress == [
|
||||
10, # submit
|
||||
20, # pending
|
||||
60, # running | elapse time = 20 -> setup
|
||||
80, # running | elapse time = 40 -> connect
|
||||
95, # running | elapse time = 60 -> too long
|
||||
]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue