You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_redis_cache.py 2.8 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/usr/bin/env python3 -m pytest
  2. import pickle
  3. import unittest
  4. from unittest.mock import MagicMock, patch
  5. import pytest
  6. try:
  7. from autogen.cache.redis_cache import RedisCache
  8. skip_redis_tests = False
  9. except ImportError:
  10. skip_redis_tests = True
  11. class TestRedisCache(unittest.TestCase):
  12. def setUp(self):
  13. self.seed = "test_seed"
  14. self.redis_url = "redis://localhost:6379/0"
  15. @pytest.mark.skipif(skip_redis_tests, reason="redis not installed")
  16. @patch("autogen.cache.redis_cache.redis.Redis.from_url", return_value=MagicMock())
  17. def test_init(self, mock_redis_from_url):
  18. cache = RedisCache(self.seed, self.redis_url)
  19. self.assertEqual(cache.seed, self.seed)
  20. mock_redis_from_url.assert_called_with(self.redis_url)
  21. @pytest.mark.skipif(skip_redis_tests, reason="redis not installed")
  22. @patch("autogen.cache.redis_cache.redis.Redis.from_url", return_value=MagicMock())
  23. def test_prefixed_key(self, mock_redis_from_url):
  24. cache = RedisCache(self.seed, self.redis_url)
  25. key = "test_key"
  26. expected_prefixed_key = f"autogen:{self.seed}:{key}"
  27. self.assertEqual(cache._prefixed_key(key), expected_prefixed_key)
  28. @pytest.mark.skipif(skip_redis_tests, reason="redis not installed")
  29. @patch("autogen.cache.redis_cache.redis.Redis.from_url", return_value=MagicMock())
  30. def test_get(self, mock_redis_from_url):
  31. key = "key"
  32. value = "value"
  33. serialized_value = pickle.dumps(value)
  34. cache = RedisCache(self.seed, self.redis_url)
  35. cache.cache.get.return_value = serialized_value
  36. self.assertEqual(cache.get(key), value)
  37. cache.cache.get.assert_called_with(f"autogen:{self.seed}:{key}")
  38. cache.cache.get.return_value = None
  39. self.assertIsNone(cache.get(key))
  40. @pytest.mark.skipif(skip_redis_tests, reason="redis not installed")
  41. @patch("autogen.cache.redis_cache.redis.Redis.from_url", return_value=MagicMock())
  42. def test_set(self, mock_redis_from_url):
  43. key = "key"
  44. value = "value"
  45. serialized_value = pickle.dumps(value)
  46. cache = RedisCache(self.seed, self.redis_url)
  47. cache.set(key, value)
  48. cache.cache.set.assert_called_with(f"autogen:{self.seed}:{key}", serialized_value)
  49. @pytest.mark.skipif(skip_redis_tests, reason="redis not installed")
  50. @patch("autogen.cache.redis_cache.redis.Redis.from_url", return_value=MagicMock())
  51. def test_context_manager(self, mock_redis_from_url):
  52. with RedisCache(self.seed, self.redis_url) as cache:
  53. self.assertIsInstance(cache, RedisCache)
  54. mock_redis_instance = cache.cache
  55. mock_redis_instance.close.assert_called()
  56. if __name__ == "__main__":
  57. unittest.main()