|
|
""" |
|
|
Tests for cache_manager module. |
|
|
""" |
|
|
|
|
|
import unittest |
|
|
import time |
|
|
from cache_manager import LRUCache |
|
|
|
|
|
|
|
|
class TestCacheManager(unittest.TestCase): |
|
|
"""Test cases for cache management.""" |
|
|
|
|
|
def setUp(self): |
|
|
"""Set up test fixtures.""" |
|
|
self.cache = LRUCache(max_size=5, ttl_seconds=1) |
|
|
|
|
|
def test_cache_set_get(self): |
|
|
"""Test basic cache set and get operations.""" |
|
|
self.cache.set("key1", "value1") |
|
|
value = self.cache.get("key1") |
|
|
self.assertEqual(value, "value1") |
|
|
|
|
|
def test_cache_miss(self): |
|
|
"""Test cache miss scenario.""" |
|
|
value = self.cache.get("nonexistent") |
|
|
self.assertIsNone(value) |
|
|
|
|
|
def test_cache_size_limit(self): |
|
|
"""Test that cache respects size limits.""" |
|
|
|
|
|
for i in range(10): |
|
|
self.cache.set(f"key{i}", f"value{i}") |
|
|
|
|
|
|
|
|
self.assertIsNone(self.cache.get("key0")) |
|
|
self.assertIsNotNone(self.cache.get("key9")) |
|
|
|
|
|
def test_cache_lru_eviction(self): |
|
|
"""Test LRU eviction policy.""" |
|
|
|
|
|
for i in range(5): |
|
|
self.cache.set(f"key{i}", f"value{i}") |
|
|
|
|
|
|
|
|
self.cache.get("key0") |
|
|
|
|
|
|
|
|
self.cache.set("key5", "value5") |
|
|
|
|
|
self.assertIsNotNone(self.cache.get("key0")) |
|
|
self.assertIsNone(self.cache.get("key1")) |
|
|
|
|
|
def test_cache_ttl_expiration(self): |
|
|
"""Test cache TTL expiration.""" |
|
|
self.cache.set("key1", "value1") |
|
|
|
|
|
|
|
|
self.assertIsNotNone(self.cache.get("key1")) |
|
|
|
|
|
|
|
|
time.sleep(1.1) |
|
|
|
|
|
|
|
|
self.assertIsNone(self.cache.get("key1")) |
|
|
|
|
|
def test_cache_clear(self): |
|
|
"""Test cache clear operation.""" |
|
|
self.cache.set("key1", "value1") |
|
|
self.cache.set("key2", "value2") |
|
|
|
|
|
self.assertEqual(self.cache.size(), 2) |
|
|
|
|
|
self.cache.clear() |
|
|
|
|
|
self.assertEqual(self.cache.size(), 0) |
|
|
self.assertIsNone(self.cache.get("key1")) |
|
|
|
|
|
def test_cache_stats(self): |
|
|
"""Test cache statistics.""" |
|
|
self.cache.set("key1", "value1") |
|
|
stats = self.cache.stats() |
|
|
|
|
|
self.assertIn("size", stats) |
|
|
self.assertIn("max_size", stats) |
|
|
self.assertIn("ttl_seconds", stats) |
|
|
self.assertIn("usage_percent", stats) |
|
|
self.assertEqual(stats["size"], 1) |
|
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
unittest.main() |
|
|
|
|
|
|