From 9fe1287249150906565706b8e16fe0ca65413bf5 Mon Sep 17 00:00:00 2001 From: Christian Boettcher <c.boettcher@fz-juelich.de> Date: Mon, 3 Jan 2022 10:22:14 +0100 Subject: [PATCH] better test config and cleanup exclude hooks and operators from unittests (need to be tested in airflow) --- .coveragerc | 33 ++++++++++++++++++++++++++++++++ src/datacat_integration/hooks.py | 1 - tests/delete_created_entries.py | 26 +++++++++++++++++++++++++ tests/test_connection.py | 11 +++++++++-- tests/test_secrets.py | 13 ++++++++++--- 5 files changed, 78 insertions(+), 6 deletions(-) create mode 100644 .coveragerc create mode 100644 tests/delete_created_entries.py diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 0000000..232ac8b --- /dev/null +++ b/.coveragerc @@ -0,0 +1,33 @@ +# .coveragerc to control coverage.py +[run] +branch = true + +omit = + */hooks.py + */operators.py + +[report] +# Regexes for lines to exclude from consideration +exclude_lines = + # Have to re-enable the standard pragma + pragma: no cover + + # Don't complain about missing debug-only code: + def __repr__ + if self\.debug + + # Don't complain if tests don't hit defensive assertion code: + raise AssertionError + raise NotImplementedError + + # Don't complain if non-runnable code isn't run: + if 0: + if __name__ == .__main__.: + + # Don't complain about abstract methods, they aren't run: + @(abc\.)?abstractmethod + +ignore_errors = True + +[html] +directory = coverage_html_report \ No newline at end of file diff --git a/src/datacat_integration/hooks.py b/src/datacat_integration/hooks.py index 17bedd6..cbad731 100644 --- a/src/datacat_integration/hooks.py +++ b/src/datacat_integration/hooks.py @@ -9,7 +9,6 @@ from datacat_integration.connection import DataCatConnection, DataCatalogEntry, from datacat_integration.auth import BearerAuth - class DataCatalogHook(HttpHook): connection: DataCatConnection = None diff --git a/tests/delete_created_entries.py b/tests/delete_created_entries.py new file mode 100644 index 0000000..2b21625 --- /dev/null +++ b/tests/delete_created_entries.py @@ -0,0 +1,26 @@ +import os +from urllib.parse import urljoin +from dotenv import load_dotenv +import requests + +from datacat_integration.connection import DataCatConnection + +def delete_entries(): + name = "foo" + conn_type = "storage_target" + load_dotenv("tests/testing-authentication.env", verbose=False) # does nothing if file is not present + url = os.getenv('DATACAT_URL', "https://zam10036.zam.kfa-juelich.de") + user = os.getenv('DATACAT_LOGIN', "dls-testing") + password = os.getenv('DATACAT_PASSWORD') + connection = DataCatConnection(url, user, password) + + token = connection._auth_token + + headers = { + 'accept' : 'application/json', + 'Authorization' : f'Bearer {token}' + } + + for entry in connection.list_type(conn_type): + if entry[0] == name: + requests.delete(f"{url}/{conn_type}/{entry[1]}", headers=headers) diff --git a/tests/test_connection.py b/tests/test_connection.py index 9e878bb..c1fd15e 100644 --- a/tests/test_connection.py +++ b/tests/test_connection.py @@ -3,6 +3,7 @@ import os, random, json from dotenv import load_dotenv from datacat_integration.connection import DataCatalogEntry, DataCatConnection, get_connection_from_entry +from .delete_created_entries import delete_entries class GetConnectionTest(TestCase): @@ -36,6 +37,9 @@ class EntryTest(TestCase): self.json_string = '{ "name" : "foo", "url" : "bar", "metadata" : { "key1" : "val1", "key2" : "val2" } }' self.entry : DataCatalogEntry = DataCatalogEntry("foo", "bar", {"key1" : "val1", "key2" : "val2"}) + def tearDown(self) -> None: + delete_entries() + def test_create_entry_from_json(self): entry_from_json = DataCatalogEntry.from_json(self.json_string) self.assertDictEqual(self.entry.metadata, entry_from_json.metadata) @@ -57,6 +61,9 @@ class ConnectionTest(TestCase): self.assertIsNotNone(self.url) self.assertIsNotNone(self.user) self.assertIsNotNone(self.password) + + def tearDown(self) -> None: + delete_entries() def test_create_token(self): connection = DataCatConnection(self.url, self.user, self.password) # creates token on __init__ @@ -94,8 +101,8 @@ class ConnectionTest(TestCase): def test_list_entries(self): connection = DataCatConnection(self.url, self.user, self.password) entries = connection.list_type("storage_target") - self.assertIn("7aa3877e-2860-4c65-8d48-3e080ceedca2", [e[1] for e in entries]) - self.assertIn("foo", [e[0] for e in entries]) + self.assertIn("6642e0be-b642-499d-a997-d76b8e350387", [e[1] for e in entries]) + self.assertIn("DLS-Testing-Connection-Object 1", [e[0] for e in entries]) self.assertGreaterEqual(len(entries), 5) def test_failed_auth(self): diff --git a/tests/test_secrets.py b/tests/test_secrets.py index 9b9e442..2c1611e 100644 --- a/tests/test_secrets.py +++ b/tests/test_secrets.py @@ -1,14 +1,21 @@ from unittest import TestCase +import os +from dotenv import load_dotenv from datacat_integration.secrets import DataCatConnectionWithSecrets, get_connection_with_secrets_from_entry, DatacatSecretsBackend class TestSecretsBackenbd(TestCase): def setUp(self): + load_dotenv("tests/testing-authentication.env", verbose=False) # does nothing if file is not present self.backend = DatacatSecretsBackend() - self.backend.url = "https://zam10036.zam.kfa-juelich.de" - self.backend.user = "dls-testing" - self.backend.password = "dls-testing-pass" + + self.backend.url = os.getenv('DATACAT_URL', "https://zam10036.zam.kfa-juelich.de") + self.backend.user = os.getenv('DATACAT_LOGIN', "dls-testing") + self.backend.password = os.getenv('DATACAT_PASSWORD') + self.assertIsNotNone(self.backend.url) + self.assertIsNotNone(self.backend.user) + self.assertIsNotNone(self.backend.password) def test_get_connection_from_oid(self): conn = self.backend.get_connection("860355e9-975f-4253-9421-1815e20c879b") -- GitLab