beadboard/.agents/skills/rlm-mem/brain/scripts/test_cache.py

116 lines
3.5 KiB
Python
Raw Normal View History

"""
RLM-MEM - Cache System Tests
D5.1: Memory caching tests (Disk Cache removed per ADR 0002)
"""
import unittest
import time
from pathlib import Path
try:
from brain.scripts.cache_system import MemoryCache, CacheManager
except ImportError:
from cache_system import MemoryCache, CacheManager
class TestMemoryCache(unittest.TestCase):
"""Test in-memory cache."""
def setUp(self):
self.cache = MemoryCache(default_ttl=60)
def test_basic_get_set(self):
"""Should store and retrieve values."""
self.cache.set("key1", "value1")
result = self.cache.get("key1")
self.assertEqual(result, "value1")
def test_missing_key(self):
"""Should return None for missing key."""
result = self.cache.get("nonexistent")
self.assertIsNone(result)
def test_expiration(self):
"""Should expire entries after TTL."""
cache = MemoryCache(default_ttl=1) # 1 second TTL
cache.set("key", "value")
# Should exist immediately
self.assertEqual(cache.get("key"), "value")
# Wait for expiration
time.sleep(1.1)
# Should be expired
self.assertIsNone(cache.get("key"))
def test_delete(self):
"""Should delete keys."""
self.cache.set("key", "value")
self.assertTrue(self.cache.delete("key"))
self.assertIsNone(self.cache.get("key"))
def test_clear(self):
"""Should clear all entries."""
self.cache.set("key1", "value1")
self.cache.set("key2", "value2")
self.cache.clear()
self.assertIsNone(self.cache.get("key1"))
self.assertIsNone(self.cache.get("key2"))
def test_cleanup(self):
"""Should remove expired entries."""
cache = MemoryCache(default_ttl=1)
cache.set("key1", "value1")
cache.set("key2", "value2")
time.sleep(1.1)
removed = cache.cleanup()
self.assertEqual(removed, 2)
def test_stats(self):
"""Should return stats."""
self.cache.set("key1", "value1")
self.cache.set("key2", "value2")
stats = self.cache.stats()
self.assertEqual(stats["size"], 2)
self.assertEqual(stats["default_ttl"], 60)
class TestCacheManager(unittest.TestCase):
"""Test simplified cache manager."""
def setUp(self):
self.manager = CacheManager()
def test_get_set(self):
"""Should use memory cache by default."""
self.manager.set("key", "value")
result = self.manager.get("key")
self.assertEqual(result, "value")
def test_stats(self):
"""Should return stats."""
self.manager.set("key", "value")
stats = self.manager.stats()
self.assertIn("memory", stats)
self.assertIn("manager", stats)
def test_manager_telemetry_memory_hit_and_miss(self):
"""Should track memory hits and misses at manager level."""
self.manager.set("k1", "v1")
self.assertEqual(self.manager.get("k1"), "v1") # memory hit
self.assertIsNone(self.manager.get("missing")) # miss
telemetry = self.manager.telemetry()
self.assertEqual(telemetry["get_calls"], 2)
self.assertEqual(telemetry["memory_hits"], 1)
self.assertEqual(telemetry["misses"], 1)
if __name__ == "__main__":
unittest.main()