File size: 2,235 Bytes
dbb04e4 c3a3710 dbb04e4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import os
import pytest
from unittest.mock import patch, MagicMock
import asyncio
from mnemocore.core.config import get_config, reset_config
from mnemocore.core.engine import HAIMEngine
@pytest.fixture
def test_engine(tmp_path):
reset_config()
data_dir = tmp_path / "data"
data_dir.mkdir()
os.environ["HAIM_DATA_DIR"] = str(data_dir)
os.environ["HAIM_MEMORY_FILE"] = str(data_dir / "memory.jsonl")
# Set other paths to avoid errors during init
os.environ["HAIM_CODEBOOK_FILE"] = str(data_dir / "codebook.json")
os.environ["HAIM_SYNAPSES_FILE"] = str(data_dir / "synapses.json")
os.environ["HAIM_WARM_MMAP_DIR"] = str(data_dir / "warm")
os.environ["HAIM_COLD_ARCHIVE_DIR"] = str(data_dir / "cold")
os.environ["HAIM_ENCODING_MODE"] = "binary"
os.environ["HAIM_DIMENSIONALITY"] = "1024"
reset_config()
engine = HAIMEngine()
yield engine
# Cleanup
del os.environ["HAIM_DATA_DIR"]
del os.environ["HAIM_MEMORY_FILE"]
del os.environ["HAIM_CODEBOOK_FILE"]
del os.environ["HAIM_SYNAPSES_FILE"]
del os.environ["HAIM_WARM_MMAP_DIR"]
del os.environ["HAIM_COLD_ARCHIVE_DIR"]
del os.environ["HAIM_ENCODING_MODE"]
del os.environ["HAIM_DIMENSIONALITY"]
reset_config()
def test_persistence_failure_logs_error(test_engine, capsys):
"""Test that persistence failures are logged but don't crash the store."""
# Mock open to fail when opening the persistence file
original_open = open
persist_path = test_engine.persist_path
def side_effect(file, *args, **kwargs):
if str(file) == str(persist_path):
raise IOError("Mocked IO Error")
return original_open(file, *args, **kwargs)
with patch('builtins.open', side_effect=side_effect):
# This should NOT raise an exception - error should be caught and logged
asyncio.run(test_engine.initialize())
asyncio.run(test_engine.store("Test content"))
# The test passes if we reach here without an exception
# The error is logged to stderr via loguru (verified by manual inspection)
# capsys/capfd don't reliably capture loguru output, so we just verify no exception
|