Files
sshecret/tests/test_keepass.py

64 lines
2.1 KiB
Python

"""Tests for the keepass password manager."""
import tempfile
import unittest
from pathlib import Path
from typing import override
from sshecret.types import BasePasswordReader, PasswordContext
from sshecret.keepass import KeepassManager
TEST_PASSWORD = "test_password"
class Rot13PasswordReader(BasePasswordReader):
"""This password reader returns the identifier backwards."""
@override
def get_password(self, identifier: str, repeated: bool = False) -> str:
"""Get password."""
return identifier[::-1]
class TestKeepass(unittest.TestCase):
"""Test the keepass password manager."""
def __init__(self, methodName: str = "runTest") -> None:
super().__init__(methodName)
self.reader_context: PasswordContext
@override
def setUp(self) -> None:
"""Set up testing."""
self.reader_context = PasswordContext(Rot13PasswordReader())
def test_db_create(self) -> None:
"""Test db creation."""
with tempfile.TemporaryDirectory() as testdir:
testdbfile = Path(testdir) / "test.kdbx"
testdb = KeepassManager.create_database(str(testdbfile.absolute()), self.reader_context)
self.assertTrue(testdbfile.exists())
# Close the file and reopen
testdb.close_database()
with self.assertRaises(RuntimeError):
testdb.keepass.version
testdb.open_database(self.reader_context)
self.assertIsNotNone(testdb.keepass)
def test_password_creation(self) -> None:
"""Test password creation."""
with tempfile.TemporaryDirectory() as testdir:
testdbfile = Path(testdir) / "test.kdbx"
testdb = KeepassManager.create_database(str(testdbfile.absolute()), self.reader_context)
password = testdb.generate_password("foobar")
testdb.close_database()
testdb.open_database(self.reader_context)
saved_password = testdb.get_password("foobar")
self.assertEqual(saved_password, password)
if __name__ == "__main__":
unittest.main()