90 lines
2.9 KiB
Python
90 lines
2.9 KiB
Python
"""Test form templates module."""
|
|
|
|
import re
|
|
|
|
from glicid_spawner import form, micromamba
|
|
from glicid_spawner.form import options_form, options_from_form
|
|
|
|
|
|
def test_options_form(monkeypatch):
|
|
"""Test options form render."""
|
|
monkeypatch.setattr(
|
|
form,
|
|
'get_envs',
|
|
lambda username: [
|
|
micromamba.MicromambaEnv('USER', 'foo', f'/{username}/envs/foo'),
|
|
micromamba.MicromambaEnv('USER', 'bar', f'/{username}/envs/bar'),
|
|
micromamba.MicromambaEnv('GLOBAL', 'baz', '/global/envs/baz'),
|
|
],
|
|
)
|
|
|
|
html = re.sub(r'\n\s+', ' ', options_form('john-doe')) # trim line breaks
|
|
|
|
# Username
|
|
assert '<div class="form-control-static">john-doe</div>' in html
|
|
|
|
# Python environments
|
|
assert '<option value="/john-doe/envs/foo">foo (USER)</option>' in html
|
|
assert '<option value="/john-doe/envs/bar">bar (USER)</option>' in html
|
|
assert '<option value="/global/envs/baz">baz (GLOBAL)</option>' in html
|
|
|
|
# CPU
|
|
assert (
|
|
'<input type="radio" name="cpu" id="cpu_0" value="0" data-max-duration="24" checked>'
|
|
in html
|
|
)
|
|
assert '<label for="cpu_0" class="btn btn-default btn-block"> 1 </label>' in html
|
|
assert '<input type="radio" name="cpu" id="cpu_5" value="5" data-max-duration="1">' in html
|
|
assert '<label for="cpu_5" class="btn btn-default btn-block"> 24 </label>' in html
|
|
|
|
# Memory
|
|
assert (
|
|
'<input type="radio" name="ram" id="ram_0" value="0" data-max-duration="24" checked>'
|
|
in html
|
|
)
|
|
assert '<label for="ram_0" class="btn btn-default btn-block"> 4 GB </label>' in html
|
|
assert '<input type="radio" name="ram" id="ram_5" value="5" data-max-duration="1">' in html
|
|
assert '<label for="ram_5" class="btn btn-default btn-block"> 96 GB </label>' in html
|
|
|
|
# GPU
|
|
assert (
|
|
'<input type="radio" name="gpu" id="gpu_0" value="0" data-max-duration="24" checked>'
|
|
in html
|
|
)
|
|
assert '<label for="gpu_0" class="btn btn-default btn-block"> No </label>' in html
|
|
assert '<input type="radio" name="gpu" id="gpu_1" value="1" data-max-duration="1">' in html
|
|
assert '<label for="gpu_1" class="btn btn-default btn-block"> A100 </label>' in html
|
|
|
|
|
|
def test_options_from_form():
|
|
"""Test options from form parser."""
|
|
# No GPU
|
|
formdata = {
|
|
'python-env': ['/john-doe/envs/bar'],
|
|
'cpu': ['1'],
|
|
'ram': ['2'],
|
|
'gpu': ['0'],
|
|
}
|
|
|
|
assert options_from_form(formdata) == {
|
|
'pyenv': '/john-doe/envs/bar',
|
|
'nprocs': 2,
|
|
'memory': '16GB',
|
|
'runtime': '06:00:00',
|
|
}
|
|
|
|
# No GPU
|
|
formdata = {
|
|
'python-env': ['/global/envs/baz'],
|
|
'cpu': ['0'],
|
|
'ram': ['0'],
|
|
'gpu': ['1'],
|
|
}
|
|
|
|
assert options_from_form(formdata) == {
|
|
'pyenv': '/global/envs/baz',
|
|
'nprocs': 1,
|
|
'memory': '4GB',
|
|
'runtime': '01:00:00',
|
|
'gres': 'gpu:a100',
|
|
}
|