Merge pull request #96 from minrk/test-https

unittests for traefik
This commit is contained in:
Yuvi Panda
2018-08-03 10:54:46 -07:00
committed by GitHub
5 changed files with 123 additions and 17 deletions

View File

@@ -1,3 +1,4 @@
pytest pytest
pytest-cov pytest-cov
codecov codecov
pytoml

24
tests/conftest.py Normal file
View File

@@ -0,0 +1,24 @@
"""pytest fixtures"""
from importlib import reload
import os
import types
from unittest import mock
import pytest
import tljh
@pytest.fixture
def tljh_dir(tmpdir):
"""Fixture for setting up a temporary tljh dir"""
tljh_dir = str(tmpdir.join("tljh").mkdir())
with mock.patch.dict(os.environ, {"TLJH_INSTALL_PREFIX": tljh_dir}):
reload(tljh)
for name in dir(tljh):
mod = getattr(tljh, name)
if isinstance(mod, types.ModuleType) and mod.__name__.startswith('tljh.'):
reload(mod)
assert tljh.config.INSTALL_PREFIX == tljh_dir
os.makedirs(tljh.config.STATE_DIR)
yield tljh_dir

View File

@@ -2,7 +2,6 @@
Test configuration commandline tools Test configuration commandline tools
""" """
from importlib import reload
import os import os
import tempfile import tempfile
from unittest import mock from unittest import mock
@@ -12,21 +11,6 @@ import pytest
from tljh import config, configurer from tljh import config, configurer
@pytest.fixture
def tljh_dir(tmpdir):
"""Fixture for setting up a temporary tljh dir"""
tljh_dir = str(tmpdir.join("tljh").mkdir())
with mock.patch.dict(
os.environ,
{"TLJH_INSTALL_PREFIX": tljh_dir}
):
reload(config)
reload(configurer)
assert config.INSTALL_PREFIX == tljh_dir
os.makedirs(config.STATE_DIR)
yield tljh_dir
def test_set_no_mutate(): def test_set_no_mutate():
conf = {} conf = {}

97
tests/test_traefik.py Normal file
View File

@@ -0,0 +1,97 @@
"""Test traefik configuration"""
import os
import pytoml as toml
from tljh import config
from tljh import traefik
def test_download_traefik(tmpdir):
traefik_bin = tmpdir.mkdir("bin").join("traefik")
traefik.ensure_traefik_binary(str(tmpdir))
assert traefik_bin.exists()
# ignore higher-order permission bits, only verify ugo permissions
assert (traefik_bin.stat().mode & 0o777) == 0o755
def test_default_config(tmpdir, tljh_dir):
state_dir = tmpdir.mkdir("state")
traefik.ensure_traefik_config(str(state_dir))
assert state_dir.join("traefik.toml").exists()
traefik_toml = os.path.join(state_dir, "traefik.toml")
with open(traefik_toml) as f:
toml_cfg = f.read()
# print config for debugging on failure
print(config.CONFIG_FILE)
print(toml_cfg)
cfg = toml.loads(toml_cfg)
assert cfg["defaultEntryPoints"] == ["http"]
assert cfg["entryPoints"] == {"http": {"address": ":80"}}
assert cfg["frontends"] == {
"jupyterhub": {"backend": "jupyterhub", "passHostHeader": True}
}
assert cfg["backends"] == {
"jupyterhub": {"servers": {"chp": {"url": "http://127.0.0.1:15003"}}}
}
def test_letsencrypt_config(tljh_dir):
state_dir = config.STATE_DIR
config.set_config_value(config.CONFIG_FILE, "https.enabled", True)
config.set_config_value(
config.CONFIG_FILE, "https.letsencrypt.email", "fake@jupyter.org"
)
config.set_config_value(
config.CONFIG_FILE, "https.letsencrypt.domains", ["testing.jovyan.org"]
)
traefik.ensure_traefik_config(str(state_dir))
traefik_toml = os.path.join(state_dir, "traefik.toml")
with open(traefik_toml) as f:
toml_cfg = f.read()
# print config for debugging on failure
print(config.CONFIG_FILE)
print(toml_cfg)
cfg = toml.loads(toml_cfg)
assert cfg["defaultEntryPoints"] == ["http", "https"]
assert "acme" in cfg
assert cfg["entryPoints"] == {
"http": {"address": ":80", "redirect": {"entryPoint": "https"}},
"https": {"address": ":443", "backend": "jupyterhub", "tls": {}},
}
assert cfg["acme"] == {
"email": "fake@jupyter.org",
"storage": "acme.json",
"entryPoint": "https",
"httpChallenge": {"entryPoint": "http"},
"domains": [{"main": "testing.jovyan.org"}],
}
def test_manual_ssl_config(tljh_dir):
state_dir = config.STATE_DIR
config.set_config_value(config.CONFIG_FILE, "https.enabled", True)
config.set_config_value(config.CONFIG_FILE, "https.tls.key", "/path/to/ssl.key")
config.set_config_value(config.CONFIG_FILE, "https.tls.cert", "/path/to/ssl.cert")
traefik.ensure_traefik_config(str(state_dir))
traefik_toml = os.path.join(state_dir, "traefik.toml")
with open(traefik_toml) as f:
toml_cfg = f.read()
# print config for debugging on failure
print(config.CONFIG_FILE)
print(toml_cfg)
cfg = toml.loads(toml_cfg)
assert cfg["defaultEntryPoints"] == ["http", "https"]
assert "acme" not in cfg
assert cfg["entryPoints"] == {
"http": {"address": ":80", "redirect": {"entryPoint": "https"}},
"https": {
"address": ":443",
"backend": "jupyterhub",
"tls": {
"certificates": [
{"certFile": "/path/to/ssl.cert", "keyFile": "/path/to/ssl.key"}
]
},
},
}

View File

@@ -3,7 +3,7 @@ import hashlib
import os import os
from urllib.request import urlretrieve from urllib.request import urlretrieve
from jinja2 import Environment, Template from jinja2 import Template
from tljh.configurer import load_config from tljh.configurer import load_config