diff --git a/apiserver/storage/JsonFileStorageAdapter.py b/apiserver/storage/JsonFileStorageAdapter.py index f584f93710e4e8fac5f9c3e0dd19bf8ea51023b0..8e345d8b3587866a477393a70a81a46e2396190a 100644 --- a/apiserver/storage/JsonFileStorageAdapter.py +++ b/apiserver/storage/JsonFileStorageAdapter.py @@ -74,7 +74,7 @@ class JsonFileStorageAdapter(AbstractLocationDataStorageAdapter): raise FileNotFoundError() if not os.path.isfile(full_path): - log.error("Requsted object (%s) %s does not exist.", oid, full_path) + log.error("Requested object (%s) %s does not exist.", oid, full_path) raise FileNotFoundError( f"The requested object ({oid}) {full_path} does not exist.") return full_path @@ -160,7 +160,7 @@ class JsonFileStorageAdapter(AbstractLocationDataStorageAdapter): try: return secrets[key] except KeyError: - raise HTTPException(404) + raise HTTPException(404, f"Secret with key {key} does not exist for the object {n_type}/{oid}") def delete_secret(self, n_type: LocationDataType, oid:str, key: str, usr: str): """ delete and return the value of the requested secret for the given object""" @@ -168,7 +168,7 @@ class JsonFileStorageAdapter(AbstractLocationDataStorageAdapter): secrets = self.__load_secrets(secrets_path) val = secrets.pop(key, None) if not val: - raise HTTPException(404, "Secret does not exist.") + raise HTTPException(404, f"Secret with key {key} does not exist for the object {n_type}/{oid}") # TODO log self.__store_secrets(secrets_path, secrets) return val diff --git a/tests/storage_tests/test_jsonbackend.py b/tests/storage_tests/test_jsonbackend.py index 52dc17c6cbbbcb55a8212cb9ab7b585bc95c3202..84ce9e48020fbfa2c5adb7aaca233523855228a0 100644 --- a/tests/storage_tests/test_jsonbackend.py +++ b/tests/storage_tests/test_jsonbackend.py @@ -7,7 +7,7 @@ import os import pathlib import shutil import json - +from fastapi.exceptions import HTTPException class SomeTests(unittest.TestCase): def setUp(self): @@ -17,6 +17,8 @@ class SomeTests(unittest.TestCase): parents=True, exist_ok=True) self.store = JsonFileStorageAdapter(self.test_config) + self.secret_type = LocationDataType.DATASET + self.secret_oid = "secrets-testing-oid" def tearDown(self): if os.path.exists(self.test_config.json_storage_path): @@ -107,3 +109,53 @@ class SomeTests(unittest.TestCase): self.assertFalse(verify_oid(oid='random strawberry')) self.assertFalse(verify_oid(oid=None)) self.assertFalse(verify_oid(oid=1)) + + def test_secrets_list_empty(self): + self.secret_oid = self.store.add_new(self.secret_type, LocationData(name="secrets_test", url="secrets_url"), "")[0] + secrets = self.store.list_secrets(self.secret_type, self.secret_oid, "") + self.assertEqual(len(secrets), 0) + self.store.delete(self.secret_type, self.secret_oid, "") + + def test_secrets_add_get_delete(self): + self.secret_oid = self.store.add_new(self.secret_type, LocationData(name="secrets_test", url="secrets_url"), "")[0] + key = "secretkey" + val = "secretvalue" + val2 = "othersecretvalue" + self.store.add_update_secret(self.secret_type, self.secret_oid, key, val, "") + secrets = self.store.list_secrets(self.secret_type, self.secret_oid, "") + self.assertEqual(len(secrets), 1) + + get_val = self.store.get_secret(self.secret_type, self.secret_oid, key, "") + self.assertEqual(val, get_val) + + self.store.add_update_secret(self.secret_type, self.secret_oid, key, val2, "") + get_val2 = self.store.get_secret(self.secret_type, self.secret_oid, key, "") + self.assertEqual(val2, get_val2) + + + self.store.delete_secret(self.secret_type, self.secret_oid, key, "") + secrets = self.store.list_secrets(self.secret_type, self.secret_oid, "") + self.assertEqual(len(secrets), 0) + self.store.delete(self.secret_type, self.secret_oid, "") + + def test_secrets_add_list_multiple(self): + self.secret_oid = self.store.add_new(self.secret_type, LocationData(name="secrets_test", url="secrets_url"), "")[0] + size = 10 + secret_touples = [(f'key_{i}', f'secret_{i}') for i in range(size)] + + for secret in secret_touples: + self.store.add_update_secret(self.secret_type, self.secret_oid, secret[0], secret[1], "") + + secrets = self.store.list_secrets(self.secret_type, self.secret_oid, "") + self.assertEqual(len(secrets), size) + + for secret in secret_touples: + val = self.store.delete_secret(self.secret_type, self.secret_oid, secret[0], "") + self.assertEqual(val, secret[1]) + + self.store.delete(self.secret_type, self.secret_oid, "") + + def test_secrets_delete_nonexistent(self): + self.secret_oid = self.store.add_new(self.secret_type, LocationData(name="secrets_test", url="secrets_url"), "")[0] + self.assertRaises(HTTPException, self.store.delete_secret, self.secret_type, self.secret_oid, "somekey", "") + self.store.delete(self.secret_type, self.secret_oid, "") \ No newline at end of file