mirror of
https://github.com/jupyterhub/the-littlest-jupyterhub.git
synced 2025-12-18 21:54:05 +08:00
unittests for traefik
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
pytest
|
||||
pytest-cov
|
||||
codecov
|
||||
pytoml
|
||||
|
||||
92
tests/test_traefik.py
Normal file
92
tests/test_traefik.py
Normal file
@@ -0,0 +1,92 @@
|
||||
"""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()
|
||||
assert traefik_bin.stat().mode == 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": {"key": "/path/to/ssl.key", "cert": "/path/to/ssl.cert"},
|
||||
},
|
||||
}
|
||||
@@ -3,7 +3,7 @@ import hashlib
|
||||
import os
|
||||
from urllib.request import urlretrieve
|
||||
|
||||
from jinja2 import Environment, Template
|
||||
from jinja2 import Template
|
||||
|
||||
from tljh.configurer import load_config
|
||||
|
||||
|
||||
Reference in New Issue
Block a user