mirror of
https://github.com/jupyterhub/the-littlest-jupyterhub.git
synced 2025-12-18 21:54:05 +08:00
Add unit test for conda environment management
- Also fix a bug caught by unit test!
This commit is contained in:
53
tests/test_conda.py
Normal file
53
tests/test_conda.py
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
"""
|
||||||
|
Test conda commandline wrappers
|
||||||
|
"""
|
||||||
|
from tljh import conda
|
||||||
|
import os
|
||||||
|
import pytest
|
||||||
|
import subprocess
|
||||||
|
import tempfile
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def prefix():
|
||||||
|
"""
|
||||||
|
Provide a temporary directory to make environments in.
|
||||||
|
"""
|
||||||
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||||||
|
yield tmpdir
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_environment(prefix):
|
||||||
|
"""
|
||||||
|
Test conda environment creation
|
||||||
|
|
||||||
|
An empty conda environment doesn't seem to have anything in it,
|
||||||
|
so we just check for directory existence.
|
||||||
|
"""
|
||||||
|
conda.ensure_conda_env(prefix)
|
||||||
|
assert os.path.exists(prefix)
|
||||||
|
|
||||||
|
|
||||||
|
def test_ensure_environment(prefix):
|
||||||
|
"""
|
||||||
|
Test second call to ensure_conda_env works as expected
|
||||||
|
|
||||||
|
A conda environment already exists, so we it should just do nothing
|
||||||
|
"""
|
||||||
|
conda.ensure_conda_env(prefix)
|
||||||
|
assert os.path.exists(prefix)
|
||||||
|
conda.ensure_conda_env(prefix)
|
||||||
|
|
||||||
|
|
||||||
|
def test_ensure_packages(prefix):
|
||||||
|
"""
|
||||||
|
Test installing packages in conda environment
|
||||||
|
"""
|
||||||
|
conda.ensure_conda_env(prefix)
|
||||||
|
conda.ensure_conda_packages(prefix, ['numpy'])
|
||||||
|
# Throws an error if this fails
|
||||||
|
subprocess.check_call([
|
||||||
|
os.path.join(prefix, 'bin', 'python'),
|
||||||
|
'-c',
|
||||||
|
'import numpy'
|
||||||
|
])
|
||||||
@@ -26,7 +26,7 @@ def ensure_conda_env(prefix):
|
|||||||
|
|
||||||
def ensure_conda_packages(prefix, packages):
|
def ensure_conda_packages(prefix, packages):
|
||||||
"""
|
"""
|
||||||
Ensure packages are installed in the conda prefix
|
Ensure packages are installed in the conda prefix.
|
||||||
"""
|
"""
|
||||||
abspath = os.path.abspath(prefix)
|
abspath = os.path.abspath(prefix)
|
||||||
# Let subprocess errors propagate
|
# Let subprocess errors propagate
|
||||||
@@ -41,7 +41,8 @@ def ensure_conda_packages(prefix, packages):
|
|||||||
# parse this outside of this kludge.
|
# parse this outside of this kludge.
|
||||||
filtered_output = '\n'.join([
|
filtered_output = '\n'.join([
|
||||||
l for l in raw_output.split('\n')
|
l for l in raw_output.split('\n')
|
||||||
if not l.startswith('{"fetch"')
|
# Sometimes the JSON messages start with a \00. The lstrip removes these.
|
||||||
|
if not l.lstrip().startswith('{"fetch"')
|
||||||
])
|
])
|
||||||
output = json.loads(filtered_output)
|
output = json.loads(filtered_output)
|
||||||
if 'success' in output and output['success'] == True:
|
if 'success' in output and output['success'] == True:
|
||||||
|
|||||||
Reference in New Issue
Block a user