Initial project import
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
存储后端测试脚本
|
||||
|
||||
用法:
|
||||
python scripts/test_storage.py
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# 添加项目根目录到 Python 路径
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
DATA_DIR = Path(__file__).resolve().parents[1] / "data"
|
||||
|
||||
from services.storage.factory import create_storage_backend
|
||||
|
||||
|
||||
def test_storage():
|
||||
"""测试当前配置的存储后端"""
|
||||
DATA_DIR.mkdir(parents=True, exist_ok=True)
|
||||
print("=" * 60)
|
||||
print("ChatGPT2API 存储后端测试")
|
||||
print("=" * 60)
|
||||
|
||||
# 显示当前配置
|
||||
backend_type = os.getenv("STORAGE_BACKEND", "json")
|
||||
print(f"\n当前存储后端: {backend_type}")
|
||||
|
||||
if backend_type in ("sqlite", "postgres", "postgresql", "mysql", "database"):
|
||||
database_url = os.getenv("DATABASE_URL", "")
|
||||
if database_url:
|
||||
# 隐藏密码
|
||||
if "://" in database_url and "@" in database_url:
|
||||
protocol, rest = database_url.split("://", 1)
|
||||
if "@" in rest:
|
||||
credentials, host = rest.split("@", 1)
|
||||
if ":" in credentials:
|
||||
username, _ = credentials.split(":", 1)
|
||||
database_url = f"{protocol}://{username}:****@{host}"
|
||||
print(f"数据库连接: {database_url}")
|
||||
else:
|
||||
print(f"数据库连接: 本地 SQLite (data/accounts.db)")
|
||||
|
||||
elif backend_type == "git":
|
||||
repo_url = os.getenv("GIT_REPO_URL", "")
|
||||
branch = os.getenv("GIT_BRANCH", "main")
|
||||
file_path = os.getenv("GIT_FILE_PATH", "accounts.json")
|
||||
print(f"Git 仓库: {repo_url}")
|
||||
print(f"Git 分支: {branch}")
|
||||
print(f"文件路径: {file_path}")
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
|
||||
try:
|
||||
# 创建存储后端
|
||||
print("\n[1/5] 创建存储后端...")
|
||||
storage = create_storage_backend(DATA_DIR)
|
||||
print("✅ 存储后端创建成功")
|
||||
|
||||
# 获取后端信息
|
||||
print("\n[2/5] 获取后端信息...")
|
||||
info = storage.get_backend_info()
|
||||
print(f"✅ 后端类型: {info.get('type')}")
|
||||
print(f" 描述: {info.get('description')}")
|
||||
for key, value in info.items():
|
||||
if key not in ('type', 'description'):
|
||||
print(f" {key}: {value}")
|
||||
|
||||
# 健康检查
|
||||
print("\n[3/5] 执行健康检查...")
|
||||
health = storage.health_check()
|
||||
status = health.get("status")
|
||||
if status == "healthy":
|
||||
print(f"✅ 健康状态: {status}")
|
||||
else:
|
||||
print(f"❌ 健康状态: {status}")
|
||||
print(f" 错误: {health.get('error')}")
|
||||
return False
|
||||
|
||||
# 读取数据
|
||||
print("\n[4/5] 读取账号数据...")
|
||||
accounts = storage.load_accounts()
|
||||
print(f"✅ 成功读取 {len(accounts)} 个账号")
|
||||
|
||||
# 写入测试(可选)
|
||||
print("\n[5/5] 测试写入功能...")
|
||||
test_account = {
|
||||
"access_token": "test_token_" + str(os.getpid()),
|
||||
"type": "Free",
|
||||
"status": "测试",
|
||||
"quota": 0,
|
||||
"email": "test@example.com",
|
||||
}
|
||||
|
||||
# 添加测试账号
|
||||
test_accounts = accounts + [test_account]
|
||||
storage.save_accounts(test_accounts)
|
||||
print("✅ 写入测试账号成功")
|
||||
|
||||
# 验证写入
|
||||
reloaded = storage.load_accounts()
|
||||
if len(reloaded) == len(test_accounts):
|
||||
print("✅ 验证写入成功")
|
||||
else:
|
||||
print(f"❌ 验证失败: 期望 {len(test_accounts)} 个账号,实际 {len(reloaded)} 个")
|
||||
return False
|
||||
|
||||
# 恢复原始数据
|
||||
storage.save_accounts(accounts)
|
||||
print("✅ 恢复原始数据")
|
||||
|
||||
print("\n" + "=" * 60)
|
||||
print("✅ 所有测试通过!")
|
||||
print("=" * 60)
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"\n❌ 测试失败: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
return False
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
success = test_storage()
|
||||
sys.exit(0 if success else 1)
|
||||
Reference in New Issue
Block a user