添加完整的 Python 包结构和核心功能: - 实现高安全性 API 密钥生成功能,支持自定义长度、前缀和字符集 - 集成 cryptography 库提供加密增强的随机数生成和密钥加密存储 - 添加 pydantic 参数验证模型,确保输入参数安全性 - 实现密钥强度检测机制,基于熵值评估密钥质量 - 支持批量生成密钥,提高使用效率 - 提供完整的测试套件,包括基础功能、增强功能和异常处理测试 - 配置项目构建系统,支持 Python 3.8+ 多版本兼容 - 添加 MIT 许可证和项目元数据配置
64 lines
2.3 KiB
Python
64 lines
2.3 KiB
Python
import sys
|
||
import pytest
|
||
from llmapikeygen import generate_api_key, generate_batch
|
||
|
||
# 测试 Python 版本兼容性(仅标记,实际需多环境运行)
|
||
PY38_OR_HIGHER = sys.version_info >= (3, 8)
|
||
PY310_OR_HIGHER = sys.version_info >= (3, 10)
|
||
|
||
|
||
def test_python_version_compatibility():
|
||
"""测试 Python 版本兼容性(基础功能)"""
|
||
# 所有支持的版本都应能生成密钥
|
||
key = generate_api_key()
|
||
assert key.startswith("sk-")
|
||
batch = generate_batch(count=2)
|
||
assert len(batch) == 2
|
||
|
||
|
||
def test_charset_unicode_compatibility():
|
||
"""测试 Unicode 字符集兼容性"""
|
||
# 中文字符集(虽然不推荐用于API密钥,但需确保不报错)
|
||
unicode_charset = "一二三四五六七八九十大"
|
||
key = generate_api_key(length=16, charset=unicode_charset, exclude_ambiguous=False)
|
||
assert len(key) == len("sk-") + 16
|
||
assert all(c in unicode_charset for c in key[3:])
|
||
|
||
# 特殊Unicode符号
|
||
emoji_charset = "😀😁😂🤣😃😄😅😆"
|
||
key_emoji = generate_api_key(length=8, charset=emoji_charset, exclude_ambiguous=False)
|
||
assert all(c in emoji_charset for c in key_emoji[3:])
|
||
|
||
|
||
def test_long_prefix_compatibility():
|
||
"""测试超长前缀兼容性"""
|
||
# 前缀长度=32(接近极限)
|
||
long_prefix = "a" * 32 + "-"
|
||
key = generate_api_key(prefix=long_prefix, length=16)
|
||
assert key.startswith(long_prefix)
|
||
assert len(key) == len(long_prefix) + 16
|
||
|
||
|
||
def test_extreme_length_compatibility():
|
||
"""测试极端长度(最小8位,最大1024位)"""
|
||
# 最小长度
|
||
key_min = generate_api_key(length=8)
|
||
assert len(key_min) == len("sk-") + 8
|
||
# 超长长度(1024位主体)
|
||
key_extreme = generate_api_key(length=1024)
|
||
assert len(key_extreme) == len("sk-") + 1024
|
||
# 批量生成超长密钥
|
||
batch_extreme = generate_batch(count=3, length=512)
|
||
assert len(batch_extreme) == 3
|
||
assert all(len(key) == len("sk-") + 512 for key in batch_extreme)
|
||
|
||
|
||
def test_empty_prefix_compatibility():
|
||
"""测试空前缀(虽然不推荐,但需兼容)"""
|
||
# 注意:空前缀会被基础校验拒绝,需确认逻辑
|
||
with pytest.raises(ValueError):
|
||
generate_api_key(prefix="")
|
||
# 测试仅含特殊字符的前缀(非空)
|
||
special_prefix = "!@#-"
|
||
key = generate_api_key(prefix=special_prefix)
|
||
assert key.startswith(special_prefix) |