64 lines
2.1 KiB
Python
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()
|