From 8aca085fadf65f638dd160e361a1394a8f507dcb Mon Sep 17 00:00:00 2001 From: Fabian Schindler <fabian.schindler.strauss@gmail.com> Date: Thu, 28 Jul 2022 12:04:25 +0200 Subject: [PATCH] Fixing test setup --- tests/test_config.py | 99 +++++++++++++++++++++++++++ tests/test_registrar.py | 136 ++++++++++++++++++++++++-------------- tests/test_source.py | 28 ++++++++ tests/testapp/backends.py | 25 ++++--- 4 files changed, 229 insertions(+), 59 deletions(-) create mode 100644 tests/test_config.py create mode 100644 tests/test_source.py diff --git a/tests/test_config.py b/tests/test_config.py new file mode 100644 index 0000000..4052460 --- /dev/null +++ b/tests/test_config.py @@ -0,0 +1,99 @@ +# pylint: skip-file + +from textwrap import dedent +from io import StringIO + +import pytest + +from registrar.config import ( + BackendConfig, HandlerConfig, HandlersConfig, RegistrarConfig, RouteConfig, + RouteMode +) + + +@pytest.fixture +def config_simple(): + return StringIO( + dedent(""" + routes: + items: + path: registrar.route.stac.ItemRoute + queue: register + output_queue: next_queue + backends: + - path: registrar.backend.eoxserver.EOxServerItemBackend + kwargs: + instance_base_path: /some/dir + instance_name: name + + handlers: + pre: + - path: some.pre.handler + post: + - path: some.post.handler + error: + - path: some.error.handler + + collections: + path: registrar.route.stac.CollectionRoute + queue: register-collections + backends: + - path: registrar.backend.eoxserver.CollectionBackend + + path: + path: registrar.route.path.PathRoute + queue: register-paths + backends: + - path: some.path.backend + + sources: [] + """) + ) + + +def test_config(config_simple): + expected = RegistrarConfig( + { + "items": RouteConfig( + "registrar.route.stac.ItemRoute", + "register", + default_mode=RouteMode.REGISTER, + output_queue="next_queue", + backends=[ + BackendConfig( + "registrar.backend.eoxserver.EOxServerItemBackend", + args=[], + kwargs={ + "instance_base_path": "/some/dir", + "instance_name": "name" + }, + ) + ], + handlers=HandlersConfig( + [HandlerConfig("some.pre.handler")], + [HandlerConfig("some.post.handler")], + [HandlerConfig("some.error.handler")], + ) + ), + "collections": RouteConfig( + "registrar.route.stac.CollectionRoute", + "register-collections", + backends=[ + BackendConfig( + "registrar.backend.eoxserver.CollectionBackend", + ) + ] + ), + "path": RouteConfig( + "registrar.route.path.PathRoute", + "register-paths", + backends=[ + BackendConfig( + "some.path.backend", + ) + ] + ) + }, + [] + ) + assert expected == RegistrarConfig.from_file(config_simple) diff --git a/tests/test_registrar.py b/tests/test_registrar.py index a4f852c..a8b6f14 100644 --- a/tests/test_registrar.py +++ b/tests/test_registrar.py @@ -1,7 +1,8 @@ import pytest +from registrar.config import BackendConfig, HandlerConfig, HandlersConfig, RegistrarConfig, RouteConfig, RouteMode, SourceConfig from registrar.backend import get_backends -from registrar.registrar import register_item, register_path +from registrar.registrar import register from testapp.backends import MyItemBackend, MyPathBackend from testapp import handlers @@ -24,45 +25,64 @@ TEST_ITEM = """{ }""" -def test_get_backends(): - config = { - "sources": [ - { - "name": "my-local-source", - "type": "local", - "kwargs": {"root_directory": "/opt/data"}, - } - ], - "backends": [ - {"path": "testapp.backends.MyItemBackend", "kwargs": {"exists": True}} - ], - } +# def test_get_backends(): +# config = { +# "sources": [ +# { +# "name": "my-local-source", +# "type": "local", +# "kwargs": {"root_directory": "/opt/data"}, +# } +# ], +# "backends": [ +# {"path": "testapp.backends.MyItemBackend", "kwargs": {"exists": True}} +# ], +# } - backends = get_backends(config) - assert len(backends) == 1 - assert isinstance(backends[0], MyItemBackend) - assert backends[0].exists +# backends = get_backends(config) +# assert len(backends) == 1 +# assert isinstance(backends[0], MyItemBackend) +# assert backends[0].exists def test_register_item(mocker): - mocker.patch("testapp.backends.MyItemBackend.item_exists") - mocker.patch("testapp.backends.MyItemBackend.register_item") - config = { - "sources": [ - { - "name": "my-local-source", - "type": "local", - "kwargs": {"root_directory": "/opt/data"}, - } - ], - "backends": [ - {"path": "testapp.backends.MyItemBackend", "kwargs": {"exists": True}} - ], - } - register_item(config, TEST_ITEM, True) + mocker.patch("testapp.backends.MyItemBackend.exists") + mocker.patch("testapp.backends.MyItemBackend.register") - MyItemBackend.item_exists.assert_called_once() - MyItemBackend.register_item.assert_called_once() + config = RegistrarConfig( + { + "items": RouteConfig( + "registrar.route.stac.ItemRoute", + "register", + replace=True, + backends=[ + BackendConfig( + "testapp.backends.MyItemBackend", + args=[], + kwargs={ + "exists": True + }, + ) + ], + # handlers=HandlersConfig( + # [HandlerConfig("some.pre.handler")], + # [HandlerConfig("some.post.handler")], + # [HandlerConfig("some.error.handler")], + # ) + ), + }, + [ + SourceConfig( + type="local", + name="my-local-source", + kwargs={"root_directory": "/opt/data"}, + ) + ] + ) + register(config.routes["items"], config.sources, TEST_ITEM) + + MyItemBackend.exists.assert_called_once() + MyItemBackend.register.assert_called_once() def test_handlers(mocker): @@ -70,18 +90,36 @@ def test_handlers(mocker): mocker.patch("testapp.handlers.post_handler.__call__") mocker.patch("testapp.handlers.error_handler.__call__") - config = { - "sources": [ - { - "name": "my-local-source", - "type": "local", - "kwargs": {"root_directory": "/opt/data"}, - } - ], - "backends": [], - "pre_handlers": [{"path": "testapp.handlers.pre_handler"}], - "post_handlers": [{"path": "testapp.handlers.post_handler"}], - "error_handlers": [{"path": "testapp.handlers.error_handler"}], - } - register_item(config, TEST_ITEM, False) + config = RegistrarConfig( + { + "items": RouteConfig( + "registrar.route.stac.ItemRoute", + "register", + replace=True, + backends=[ + BackendConfig( + "testapp.backends.MyItemBackend", + args=[], + kwargs={ + "exists": True + }, + ) + ], + handlers=HandlersConfig( + [HandlerConfig("testapp.handlers.pre_handler")], + [HandlerConfig("testapp.handlers.post_handler")], + [HandlerConfig("testapp.handlers.error_handler")], + ) + ), + }, + [ + SourceConfig( + type="local", + name="my-local-source", + kwargs={"root_directory": "/opt/data"}, + ) + ] + ) + register(config.routes["items"], config.sources, TEST_ITEM) handlers.pre_handler.__call__.assert_called_once() + handlers.post_handler.__call__.assert_called_once() diff --git a/tests/test_source.py b/tests/test_source.py new file mode 100644 index 0000000..862a787 --- /dev/null +++ b/tests/test_source.py @@ -0,0 +1,28 @@ +from registrar.source import get_source, S3Source +from registrar.config import SourceConfig + + +def test_get_source(): + expected = S3Source("mys3", "bucket", endpoint_url="http://some.endpoint") + result = get_source([ + SourceConfig( + "s3", + name="mys3", + filter=".*", + kwargs={ + "endpoint_url": "http://some.endpoint", + "bucket_name": "bucket", + } + ) + ], [ + "test/path" + ]) + + assert expected.name == result.name + assert expected.bucket_name == result.bucket_name + assert expected.secret_access_key == result.secret_access_key + assert expected.access_key_id == result.access_key_id + assert expected.endpoint_url == result.endpoint_url + assert expected.strip_bucket == result.strip_bucket + assert expected.region_name == result.region_name + assert expected.public == result.public diff --git a/tests/testapp/backends.py b/tests/testapp/backends.py index 0111f90..082e08d 100644 --- a/tests/testapp/backends.py +++ b/tests/testapp/backends.py @@ -1,33 +1,38 @@ from typing import Optional from pystac import Item -from registrar.backend.abc import PathBackend, ItemBackend +from registrar.abc import Backend from registrar.source import Source -class MyPathBackend(PathBackend): +class MyPathBackend(Backend[str]): def __init__(self, exists: False): self.exists = exists - def path_exists(self, source: Optional[Source], path: str) -> bool: + def exists(self, source: Optional[Source], path: str) -> bool: return self.exists - def register_path(self, source: Optional[Source], path: str, replace: bool): + def register(self, source: Optional[Source], path: str, replace: bool): ... - def deregister_path(self, source: Optional[Source], path: str) -> Optional[str]: + def deregister(self, source: Optional[Source], path: str) -> Optional[str]: return path + def deregister_identifier(self, identifier: str) -> Optional[str]: + return identifier -class MyItemBackend(ItemBackend): +class MyItemBackend(Backend[Item]): def __init__(self, exists: False): - self.exists = exists + self._exists = exists - def item_exists(self, source: Optional[Source], item: "Item") -> bool: - return self.exists + def exists(self, source: Optional[Source], item: "Item") -> bool: + return self._exists - def register_item(self, source: Optional[Source], item: "Item", replace: bool): + def register(self, source: Optional[Source], item: "Item", replace: bool): ... + def deregister(self, source: Optional[Source], path: str) -> Optional[str]: + return path + def deregister_identifier(self, identifier: str) -> Optional[str]: return identifier -- GitLab