| """ |
| 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() |
|
|
|
|