"""Tests of client loader.""" # pyright: reportUninitializedInstanceVariable=false, reportImplicitOverride=false import unittest from sshecret.backends import FileTableBackend 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: list[TestClientSpec] = [ 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 = 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 = FileTableBackend(testdir) webserver = backend.lookup_name("webserver") self.assertIsNotNone(webserver) assert webserver is not None 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 = 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 = 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 = 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 = 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 = 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()