Skip to main content
Glama
test_keys.py3.66 kB
"""Unit tests for cache key generation.""" import pytest from src.cache.keys import CacheKeyGenerator class TestCacheKeyGenerator: """Test suite for CacheKeyGenerator class.""" def test_generate_basic_key(self): """Test basic cache key generation.""" params = {"query": "python", "limit": 25} key = CacheKeyGenerator.generate("search_reddit", params) assert key.startswith("reddit:search_reddit:") assert key.endswith(":v1") assert len(key.split(":")) == 4 def test_generate_deterministic(self): """Test that same params generate same key.""" params1 = {"query": "python", "limit": 25} params2 = {"query": "python", "limit": 25} key1 = CacheKeyGenerator.generate("search_reddit", params1) key2 = CacheKeyGenerator.generate("search_reddit", params2) assert key1 == key2 def test_generate_order_independent(self): """Test that parameter order doesn't affect key.""" params1 = {"query": "python", "limit": 25} params2 = {"limit": 25, "query": "python"} key1 = CacheKeyGenerator.generate("search_reddit", params1) key2 = CacheKeyGenerator.generate("search_reddit", params2) assert key1 == key2 def test_generate_different_params_different_keys(self): """Test that different params generate different keys.""" params1 = {"query": "python", "limit": 25} params2 = {"query": "javascript", "limit": 25} key1 = CacheKeyGenerator.generate("search_reddit", params1) key2 = CacheKeyGenerator.generate("search_reddit", params2) assert key1 != key2 def test_generate_different_tools_different_keys(self): """Test that different tools generate different keys.""" params = {"query": "python"} key1 = CacheKeyGenerator.generate("search_reddit", params) key2 = CacheKeyGenerator.generate("get_trending_topics", params) assert key1 != key2 def test_parse_valid_key(self): """Test parsing a valid cache key.""" key = "reddit:search_reddit:a3f8d9c2e1b4:v1" parsed = CacheKeyGenerator.parse(key) assert parsed["prefix"] == "reddit" assert parsed["tool"] == "search_reddit" assert parsed["params_hash"] == "a3f8d9c2e1b4" assert parsed["version"] == "v1" def test_parse_invalid_key_raises_error(self): """Test that parsing invalid key raises ValueError.""" invalid_key = "reddit:search_reddit:invalid" with pytest.raises(ValueError) as exc_info: CacheKeyGenerator.parse(invalid_key) assert "Invalid cache key format" in str(exc_info.value) def test_generate_hash_length(self): """Test that hash is exactly 12 characters.""" params = {"query": "test"} key = CacheKeyGenerator.generate("search_reddit", params) parts = key.split(":") params_hash = parts[2] assert len(params_hash) == 12 def test_generate_with_empty_params(self): """Test key generation with empty params.""" params = {} key = CacheKeyGenerator.generate("search_reddit", params) assert key.startswith("reddit:search_reddit:") assert key.endswith(":v1") def test_generate_with_nested_params(self): """Test key generation with nested params.""" params = { "query": "python", "filters": {"time": "week", "sort": "top"}, } key = CacheKeyGenerator.generate("search_reddit", params) assert key.startswith("reddit:search_reddit:") assert key.endswith(":v1")

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/padak/apify-actor-reddit-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server