From dee7c425c3e9e67531c9912f8f7db3e6692a753e Mon Sep 17 00:00:00 2001 From: Andreas Motl Date: Sun, 28 Jan 2024 11:44:30 +0100 Subject: [PATCH] Tests: Skip OPS-based integration tests when no credentials are defined While it will only cover parts of the test suite, which is unfortunate, at least it will not break. This is relevant for CI/GHA, because pull requests submitted by external contributors do not have access to the OPS credentials per GitHub Actions Secrets. C'est la vie. --- tests/conftest.py | 13 +++++++++---- tests/secrets.py | 12 ++++++++++-- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 94b8ca1..c4c4152 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,7 +1,7 @@ import pytest from .helpers import mkcache, mksqlite, mkthrottler -from .secrets import OPS_KEY, OPS_SECRET +from .secrets import get_secrets_or_skip_tests @pytest.fixture @@ -13,8 +13,9 @@ def storage(request): def reset_cached_client(request): from epo_ops import Client + ops_key, ops_secret = get_secrets_or_skip_tests() return Client( - OPS_KEY, OPS_SECRET, middlewares=[mkcache(request), mkthrottler(request)] + ops_key, ops_secret, middlewares=[mkcache(request), mkthrottler(request)] ) @@ -32,14 +33,18 @@ def module_cache(request): def default_client(request): from epo_ops import Client - return Client(OPS_KEY, OPS_SECRET, middlewares=[mkthrottler(request)]) + ops_key, ops_secret = get_secrets_or_skip_tests() + + return Client(ops_key, ops_secret, middlewares=[mkthrottler(request)]) @pytest.fixture(scope="module") def cached_client(request, module_cache): from epo_ops import Client - return Client(OPS_KEY, OPS_SECRET, middlewares=[module_cache, mkthrottler(request)]) + ops_key, ops_secret = get_secrets_or_skip_tests() + + return Client(ops_key, ops_secret, middlewares=[module_cache, mkthrottler(request)]) @pytest.fixture(scope="module", params=["cached_client", "default_client"]) diff --git a/tests/secrets.py b/tests/secrets.py index bf13873..c5dfacb 100644 --- a/tests/secrets.py +++ b/tests/secrets.py @@ -9,6 +9,7 @@ import os from os.path import abspath, dirname, join +import pytest from dotenv import load_dotenv # Prune environment variables. @@ -20,6 +21,13 @@ dotenv_path = abspath(join(dirname(__file__), "../.env")) load_dotenv(dotenv_path) + # Set environment variables as constants. -OPS_KEY = os.environ["OPS_KEY"] -OPS_SECRET = os.environ["OPS_SECRET"] +def get_secrets_or_skip_tests(): + try: + ops_key = os.environ["OPS_KEY"] + ops_secret = os.environ["OPS_SECRET"] + except KeyError as ex: + raise pytest.skip("No OPS credentials configured") from ex + + return ops_key, ops_secret