diff --git a/conftest.py b/conftest.py index 3ea20c3..1759d04 100644 --- a/conftest.py +++ b/conftest.py @@ -1,10 +1,28 @@ # Copyright (C) 2020 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information import os +import pytest + pytest_plugins = ["swh.scheduler.pytest_plugin"] os.environ["LC_ALL"] = "C.UTF-8" + + +@pytest.fixture +def mock_get_scheduler(monkeypatch, swh_scheduler): + """Override the get_scheduler function in swh.lister.core.lister_base, to + return the swh_scheduler fixture. + """ + from swh.lister.core import lister_base + + # Match the signature from swh.scheduler.get_scheduler + def get_scheduler(cls, args={}): + return swh_scheduler + + monkeypatch.setattr(lister_base, "get_scheduler", get_scheduler) + + yield monkeypatch diff --git a/swh/lister/core/tests/conftest.py b/swh/lister/core/tests/conftest.py index 21ce76f..647fd46 100644 --- a/swh/lister/core/tests/conftest.py +++ b/swh/lister/core/tests/conftest.py @@ -1,51 +1,49 @@ # Copyright (C) 2019-2020 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information import logging import pytest from sqlalchemy import create_engine from swh.lister import get_lister, SUPPORTED_LISTERS from swh.lister.core.models import initialize logger = logging.getLogger(__name__) @pytest.fixture def lister_db_url(postgresql_proc, postgresql): db_url = "postgresql://{user}@{host}:{port}/{dbname}".format( host=postgresql_proc.host, port=postgresql_proc.port, user="postgres", dbname="tests", ) logger.debug("lister db_url: %s", db_url) return db_url @pytest.fixture -def swh_listers(request, lister_db_url, swh_scheduler): - +def swh_listers(mock_get_scheduler, lister_db_url, swh_scheduler): listers = {} # Prepare schema for all listers for lister_name in SUPPORTED_LISTERS: lister = get_lister(lister_name, db_url=lister_db_url) - lister.scheduler = swh_scheduler # inject scheduler fixture listers[lister_name] = lister initialize(create_engine(lister_db_url), drop_tables=True) # Add the load-archive-files expected by some listers (gnu, cran, ...) swh_scheduler.create_task_type( { "type": "load-archive-files", "description": "Load archive files.", "backend_name": "swh.loader.package.tasks.LoadArchive", "default_interval": "1 day", } ) return listers diff --git a/swh/lister/tests/test_cli.py b/swh/lister/tests/test_cli.py index a333804..b3be48f 100644 --- a/swh/lister/tests/test_cli.py +++ b/swh/lister/tests/test_cli.py @@ -1,66 +1,66 @@ # Copyright (C) 2019-2020 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information import pytest from swh.lister.core.lister_base import ListerBase from swh.lister.cli import get_lister, SUPPORTED_LISTERS from .test_utils import init_db def test_get_lister_wrong_input(): """Unsupported lister should raise""" with pytest.raises(ValueError) as e: get_lister("unknown", "db-url") assert "Invalid lister" in str(e.value) -def test_get_lister(): +def test_get_lister(mock_get_scheduler): """Instantiating a supported lister should be ok """ db_url = init_db().url() for lister_name in SUPPORTED_LISTERS: lst = get_lister(lister_name, db_url) assert isinstance(lst, ListerBase) def test_get_lister_override(): """Overriding the lister configuration should populate its config """ db_url = init_db().url() listers = { "gitlab": "https://other.gitlab.uni/api/v4/", "phabricator": "https://somewhere.org/api/diffusion.repository.search", "cgit": "https://some.where/cgit", } # check the override ends up defined in the lister for lister_name, url in listers.items(): lst = get_lister( lister_name, db_url, **{"url": url, "priority": "high", "policy": "oneshot",}, ) assert lst.url == url assert lst.config["priority"] == "high" assert lst.config["policy"] == "oneshot" # check the default urls are used and not the override (since it's not # passed) for lister_name, url in listers.items(): lst = get_lister(lister_name, db_url) # no override so this does not end up in lister's configuration assert "url" not in lst.config assert "priority" not in lst.config assert "oneshot" not in lst.config assert lst.url == lst.DEFAULT_URL