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.7 kB

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