Files
sshecret/tests/test_client_backend.py
2025-03-17 21:42:56 +01:00

100 lines
4.1 KiB
Python

"""Tests of client loader."""
import unittest
from sshecret.server import client_loader
from sshecret.utils import generate_client_object
from sshecret.testing import TestClientSpec, test_context
class TestFileTableBackend(unittest.TestCase):
"""Test the file table backend."""
def setUp(self) -> None:
"""Set up tests."""
self.test_dataset = [
TestClientSpec("webserver", {"SECRET_TOKEN": "mysecrettoken"}),
TestClientSpec("dbserver", {"DB_ROOT_PASSWORD": "mysecretpassword"}),
]
def test_init(self) -> None:
"""Test instance creation."""
with test_context(self.test_dataset) as testdir:
backend = client_loader.FileTableBackend(testdir)
self.assertGreater(len(backend.table), 0)
def test_lookup_name(self) -> None:
"""Test lookup name."""
with test_context(self.test_dataset) as testdir:
backend = client_loader.FileTableBackend(testdir)
webserver = backend.lookup_name("webserver")
self.assertIsNotNone(webserver)
self.assertEqual(webserver.name, "webserver")
def test_add_client(self) -> None:
"""Test whether it is possible to add a client."""
with test_context(self.test_dataset) as testdir:
backend = client_loader.FileTableBackend(testdir)
new_client = generate_client_object(
"backupserver", {"BACKUP_KEY": "mysecretbackupkey"}
)
backend.add_client(new_client)
expected_file = testdir / "backupserver.json"
self.assertTrue(expected_file.exists())
result = backend.lookup_name("backupserver")
self.assertIsNotNone(result)
def test_add_secret(self) -> None:
"""Test whether it is possible to add a secret."""
with test_context(self.test_dataset) as testdir:
backend = client_loader.FileTableBackend(testdir)
backend.add_secret("webserver", "OTHER_SECRET_TOKEN", "myothersecrettoken")
webserver = backend.lookup_name("webserver")
assert webserver is not None
self.assertIsNotNone(webserver.secrets.get("OTHER_SECRET_TOKEN"))
self.assertNotEqual(
webserver.secrets["OTHER_SECRET_TOKEN"], "myothersecrettoken"
)
backend.add_secret(
"dbserver", "UNENCRYPTED_THING", "thisiscleartext", encrypted=True
)
dbserver = backend.lookup_name("dbserver")
assert dbserver is not None
self.assertEqual(dbserver.secrets["UNENCRYPTED_THING"], "thisiscleartext")
def test_update_client(self) -> None:
"""Test update_client method."""
with test_context(self.test_dataset) as testdir:
backend = client_loader.FileTableBackend(testdir)
webserver = backend.lookup_name("webserver")
assert webserver is not None
webserver.allowed_ips = "192.0.2.1"
backend.update_client("webserver", webserver)
new_obj = backend.lookup_name("webserver")
assert new_obj is not None
self.assertEqual(new_obj.allowed_ips, "192.0.2.1")
def test_remove_client(self) -> None:
"""Test removal of client."""
with test_context(self.test_dataset) as testdir:
backend = client_loader.FileTableBackend(testdir)
backend.remove_client("webserver", persistent=False)
webserver = backend.lookup_name("webserver")
self.assertIsNone(webserver)
webserver_file = testdir / "webserver.json"
self.assertTrue(webserver_file.exists())
def test_remove_client_persistent(self) -> None:
"""Test removal of client."""
with test_context(self.test_dataset) as testdir:
backend = client_loader.FileTableBackend(testdir)
backend.remove_client("webserver", persistent=True)
webserver = backend.lookup_name("webserver")
self.assertIsNone(webserver)
webserver_file = testdir / "webserver.json"
self.assertFalse(webserver_file.exists())
if __name__ == "__main__":
unittest.main()