Files
ai-talk-callback/test_redis_manager_connection.py
2025-12-09 08:05:45 +08:00

126 lines
3.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
测试RedisManager连接功能
验证connect方法的返回值
"""
from app.redis_lock import redis_manager
from app.logger import get_redis_logger
logger = get_redis_logger()
def test_connection():
"""测试连接"""
logger.info("🧪 测试Redis连接...")
# 测试连接
success = redis_manager.connect()
if success:
logger.info("✅ 连接成功")
# 测试创建锁
try:
lock = redis_manager.create_lock("test:lock", timeout=10)
logger.info("✅ 锁创建成功")
# 尝试获取锁
acquired = lock.acquire(blocking=False)
if acquired:
logger.info("✅ 锁获取成功")
# 释放锁
released = lock.release()
if released:
logger.info("✅ 锁释放成功")
else:
logger.error("❌ 锁释放失败")
return False
else:
logger.error("❌ 锁获取失败")
return False
except Exception as e:
logger.error(f"❌ 锁操作失败: {e}")
return False
else:
logger.error("❌ 连接失败")
return False
return True
def test_connection_failures():
"""测试连接失败场景"""
logger.info("🧪 测试连接失败处理...")
# 直接测试连接一个不存在的主机
from app.config import settings
original_url = settings.redis_url
try:
# 创建一个新的RedisManager实例用于测试失败场景
from app.redis_lock import RedisManager
test_manager = RedisManager()
# 模拟连接失败 - 直接使用无效的URL
import redis
invalid_redis_client = redis.from_url(
"redis://invalid_host:6379/0",
encoding="utf-8",
decode_responses=True,
socket_connect_timeout=1,
socket_timeout=1
)
test_manager.redis_client = invalid_redis_client
# 尝试ping,这应该会失败
try:
result = test_manager.redis_client.ping()
logger.error("❌ 连接应该失败但成功了")
return False
except Exception:
logger.info("✅ 连接失败处理正确")
return True
except Exception as e:
logger.info("✅ 连接失败处理正确")
return True
def main():
"""主函数"""
logger.info("🚀 开始RedisManager连接测试")
# 测试1: 连接
logger.info("\n" + "="*50)
logger.info("测试1: 连接")
logger.info("="*50)
connection_success = test_connection()
# 测试2: 连接失败处理
logger.info("\n" + "="*50)
logger.info("测试2: 连接失败处理")
logger.info("="*50)
failure_success = test_connection_failures()
# 断开连接
redis_manager.disconnect()
logger.info("🔌 Redis连接已断开")
# 总结
logger.info("\n" + "="*50)
logger.info("测试结果总结")
logger.info("="*50)
if connection_success and failure_success:
logger.info("🎉 所有测试通过!RedisManager连接功能正常")
return True
else:
logger.error("❌ 部分测试失败,请检查实现")
return False
if __name__ == "__main__":
success = main()
exit(0 if success else 1)