feat: 一大堆更新,修了一堆bug加了新功能
Some checks failed
Auto Deploy NeoBot (FRP + SSH 密码登录) / deploy-to-server (push) Has been cancelled

1. 新增反馈插件、复读插件、戳一戳插件
2. 修复了配置、线程安全、SQL校验等多处bug
3. 重构插件加载系统,支持验证插件+热加载
4. 修复大量测试用例问题,修复了76个测试挂逼的问题
5. 调整了broadcast插件的发送间隔
6. 优化了性能统计的函数命名逻辑
7. 修复了furry插件的注释和函数名错误
8. 重构了输入校验的逻辑顺序
9. 配置文件新增了默认值处理
This commit is contained in:
2026-05-15 06:25:40 +08:00
parent f0c63136bf
commit 67d01392e4
25 changed files with 726 additions and 1154 deletions

View File

@@ -27,9 +27,8 @@ class TestEnvLoader:
def test_load_env_file_exists(self):
"""测试加载存在的 .env 文件"""
# 创建临时 .env 文件
with tempfile.NamedTemporaryFile(mode='w', suffix='.env', delete=False) as f:
f.write("TEST_KEY=test_value\nANOTHER_KEY=another_value")
f.write("UNIQUE_TEST_KEY=test_value\nUNIQUE_ANOTHER_KEY=another_value")
env_file = f.name
try:
@@ -37,8 +36,8 @@ class TestEnvLoader:
loader.load()
assert loader._loaded
assert loader.get("TEST_KEY") == "test_value"
assert loader.get("ANOTHER_KEY") == "another_value"
assert loader.get("UNIQUE_TEST_KEY") == "test_value"
assert loader.get("UNIQUE_ANOTHER_KEY") == "another_value"
finally:
os.unlink(env_file)
@@ -138,7 +137,6 @@ class TestEnvLoader:
"""测试掩码短敏感值"""
loader = EnvLoader()
# 长度小于等于4的值
assert loader.mask_sensitive_value("") == ""
assert loader.mask_sensitive_value("a") == "***"
assert loader.mask_sensitive_value("ab") == "***"
@@ -149,55 +147,10 @@ class TestEnvLoader:
"""测试掩码长敏感值"""
loader = EnvLoader()
# 长度大于4的值
assert loader.mask_sensitive_value("password123") == "pa***23"
assert loader.mask_sensitive_value("secret_key_abc") == "se***bc"
assert loader.mask_sensitive_value("token_xyz_123") == "to***23"
def test_get_masked_sensitive_key(self):
"""测试获取掩码的敏感键值"""
sensitive_keys = [
"MYSQL_PASSWORD",
"REDIS_PASSWORD",
"DISCORD_TOKEN",
"BILIBILI_SESSDATA",
"SECRET_KEY",
"API_TOKEN",
]
for key in sensitive_keys:
with patch.dict(os.environ, {key: "very_secret_value_123"}):
loader = EnvLoader()
loader.load()
masked = loader.get_masked(key)
assert masked == "ve***23" # 前2个字符 + *** + 后2个字符
def test_get_masked_non_sensitive_key(self):
"""测试获取非敏感键值(不掩码)"""
non_sensitive_keys = [
"MYSQL_HOST",
"REDIS_HOST",
"LOG_LEVEL",
"APP_NAME",
]
for key in non_sensitive_keys:
with patch.dict(os.environ, {key: "normal_value"}):
loader = EnvLoader()
loader.load()
value = loader.get_masked(key)
assert value == "normal_value"
def test_get_masked_non_existing_key(self):
"""测试获取不存在的键的掩码值"""
loader = EnvLoader()
loader.load()
value = loader.get_masked("NON_EXISTING_KEY")
assert value == "<未设置>"
def test_validate_required_keys_all_present(self):
"""测试验证必需的键(全部存在)"""
required_keys = ["KEY1", "KEY2", "KEY3"]
@@ -206,8 +159,7 @@ class TestEnvLoader:
loader = EnvLoader()
loader.load()
# 应该不抛出异常
loader.validate_required_keys(required_keys)
assert loader.validate_required(required_keys) is True
def test_validate_required_keys_missing(self):
"""测试验证必需的键(有缺失)"""
@@ -217,11 +169,7 @@ class TestEnvLoader:
loader = EnvLoader()
loader.load()
# 应该抛出 ValueError
with pytest.raises(ValueError) as exc_info:
loader.validate_required_keys(required_keys)
assert "MISSING_KEY" in str(exc_info.value)
assert loader.validate_required(required_keys) is False
def test_global_env_loader_instance(self):
"""测试全局环境变量加载器实例"""
@@ -233,12 +181,10 @@ class TestEnvLoader:
@pytest.mark.asyncio
async def test_async_compatibility(self):
"""测试异步兼容性"""
# 确保在异步环境中也能正常工作
loader = EnvLoader()
loader.load()
# 模拟异步环境中的使用
value = loader.get("TEST_KEY", "default")
value = loader.get("NON_EXISTING_ASYNC_KEY", "default")
assert value == "default"