From 40b88cb780cb009d55fd9128a00ff705b428eb34 Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Thu, 8 Jun 2023 22:44:21 +0200 Subject: [PATCH] test refactor: update simplest plugin tests With this refactor, the simplest plugin stops interfering with other tests. --- .../plugins/simplest/tljh_simplest.py | 36 +++----- integration-tests/test_simplest_plugin.py | 86 ++++++++++--------- 2 files changed, 60 insertions(+), 62 deletions(-) diff --git a/integration-tests/plugins/simplest/tljh_simplest.py b/integration-tests/plugins/simplest/tljh_simplest.py index a134083..015b504 100644 --- a/integration-tests/plugins/simplest/tljh_simplest.py +++ b/integration-tests/plugins/simplest/tljh_simplest.py @@ -1,55 +1,47 @@ """ -Simplest plugin that exercises all the hooks +Simplest plugin that exercises all the hooks defined in tljh/hooks.py. """ from tljh.hooks import hookimpl @hookimpl def tljh_extra_user_conda_packages(): - return [ - "hypothesis", - ] + return ["tqdm"] @hookimpl def tljh_extra_user_pip_packages(): - return [ - "django", - ] + return ["django"] @hookimpl def tljh_extra_hub_pip_packages(): - return [ - "there", - ] + return ["there"] @hookimpl def tljh_extra_apt_packages(): - return [ - "sl", - ] - - -@hookimpl -def tljh_config_post_install(config): - # Put an arbitrary marker we can test for - config["simplest_plugin"] = {"present": True} + return ["sl"] @hookimpl def tljh_custom_jupyterhub_config(c): - c.JupyterHub.authenticator_class = "tmpauthenticator.TmpAuthenticator" + c.Test.jupyterhub_config_set_by_simplest_plugin = True + + +@hookimpl +def tljh_config_post_install(config): + config["Test"] = {"tljh_config_set_by_simplest_plugin": True} @hookimpl def tljh_post_install(): - with open("test_post_install", "w") as f: - f.write("123456789") + with open("test_tljh_post_install", "w") as f: + f.write("file_written_by_simplest_plugin") @hookimpl def tljh_new_user_create(username): with open("test_new_user_create", "w") as f: + f.write("file_written_by_simplest_plugin") f.write(username) diff --git a/integration-tests/test_simplest_plugin.py b/integration-tests/test_simplest_plugin.py index 171578c..96eb0a5 100644 --- a/integration-tests/test_simplest_plugin.py +++ b/integration-tests/test_simplest_plugin.py @@ -1,79 +1,85 @@ """ -Test simplest plugin +Test the plugin in integration-tests/plugins/simplest that makes use of all tljh +recognized plugin hooks that are defined in tljh/hooks.py. """ import os import subprocess -import requests from ruamel.yaml import YAML from tljh import user from tljh.config import CONFIG_FILE, HUB_ENV_PREFIX, USER_ENV_PREFIX +GIT_REPO_PATH = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) yaml = YAML(typ="rt") -def test_apt_packages(): - """ - Test extra apt packages are installed - """ - assert os.path.exists("/usr/games/sl") +def test_tljh_extra_user_conda_packages(): + subprocess.check_call([f"{USER_ENV_PREFIX}/bin/python3", "-c", "import tqdm"]) -def test_pip_packages(): - """ - Test extra user & hub pip packages are installed - """ +def test_tljh_extra_user_pip_packages(): subprocess.check_call([f"{USER_ENV_PREFIX}/bin/python3", "-c", "import django"]) + +def test_tljh_extra_hub_pip_packages(): subprocess.check_call([f"{HUB_ENV_PREFIX}/bin/python3", "-c", "import there"]) -def test_conda_packages(): - """ - Test extra user conda packages are installed - """ - subprocess.check_call([f"{USER_ENV_PREFIX}/bin/python3", "-c", "import hypothesis"]) +def test_tljh_extra_apt_packages(): + assert os.path.exists("/usr/games/sl") -def test_config_hook(): +def test_tljh_custom_jupyterhub_config(): """ - Check config changes are present + Test that the provided tljh_custom_jupyterhub_config hook has made the tljh + jupyterhub load additional jupyterhub config. + """ + tljh_jupyterhub_config = os.path.join(GIT_REPO_PATH, "tljh", "jupyterhub_config.py") + output = subprocess.check_output( + [ + f"{HUB_ENV_PREFIX}/bin/python3", + "-m", + "jupyterhub", + "--show-config", + "--config", + tljh_jupyterhub_config, + ], + text=True, + ) + assert "jupyterhub_config_set_by_simplest_plugin" in output + + +def test_tljh_config_post_install(): + """ + Test that the provided tljh_config_post_install hook has made tljh recognize + additional tljh config. """ with open(CONFIG_FILE) as f: - data = yaml.load(f) - - assert data["simplest_plugin"]["present"] + tljh_config = yaml.load(f) + assert tljh_config["Test"]["tljh_config_set_by_simplest_plugin"] -def test_jupyterhub_config_hook(): +def test_tljh_post_install(): """ - Test that tmpauthenticator is enabled by our custom config plugin + Test that the provided tljh_post_install hook has been executed by looking + for a specific file written. """ - resp = requests.get("http://localhost/hub/tmplogin", allow_redirects=False) - assert resp.status_code == 302 - assert resp.headers["Location"] == "/hub/spawn" - - -def test_post_install_hook(): - """ - Test that the test_post_install file has the correct content - """ - with open("test_post_install") as f: + with open("test_tljh_post_install") as f: content = f.read() - - assert content == "123456789" + assert "file_written_by_simplest_plugin" in content -def test_new_user_create(): +def test_tljh_new_user_create(): """ - Test that plugin receives username as arg + Test that the provided tljh_new_user_create hook has been executed by + looking for a specific file written. """ + # Trigger the hook by letting tljh's code create a user username = "user1" - # Call ensure_user to make sure the user plugin gets called user.ensure_user(username) with open("test_new_user_create") as f: content = f.read() - - assert content == username + assert "file_written_by_simplest_plugin" in content + assert username in content