Kamixitong/test_license_format.py
2025-11-11 21:39:12 +08:00

135 lines
4.2 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
测试卡密格式更新功能
"""
import sys
import os
# 添加项目路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
# 导入应用和模型
from app import create_app
from app.models.license import License
from app.utils.validators import LicenseValidator
def test_license_generation():
"""测试卡密生成"""
print("=== 测试卡密生成 ===")
# 生成新的卡密(不依赖数据库查询)
# 直接测试格式化逻辑
import secrets
import string
# 模拟生成卡密的逻辑
chars = string.ascii_uppercase + string.digits
random_chars = ''.join(secrets.choice(chars) for _ in range(32))
# 格式化为XXXX-XXXX-XXXX-XXXX格式
formatted_key = '-'.join([
random_chars[i:i+8] for i in range(0, len(random_chars), 8)
])
print(f"生成的卡密: {formatted_key}")
# 验证格式
validator = LicenseValidator()
is_valid = validator.validate_license_key(formatted_key)
print(f"格式验证结果: {'通过' if is_valid else '失败'}")
# 检查格式是否正确
parts = formatted_key.split('-')
if len(parts) == 4 and all(len(part) == 8 for part in parts):
print("格式检查: 正确 (XXXX-XXXX-XXXX-XXXX)")
else:
print("格式检查: 错误")
return formatted_key
def test_license_formatting():
"""测试卡密格式化"""
print("\n=== 测试卡密格式化 ===")
validator = LicenseValidator()
# 测试不同输入格式
test_cases = [
"ABCDEFGHIJKLMNOPQRSTUVWXZY12345678",
"ABCD-EFGH-IJKL-MNOP",
"ABCDEF123456",
"ABCDEFGHIJKLMNOPQRSTUVWXZY12345678901234567890"
]
for test_case in test_cases:
formatted = validator.format_license_key(test_case)
print(f"原始: {test_case}")
print(f"格式化后: {formatted}")
is_valid = validator.validate_license_key(formatted)
print(f"验证结果: {'通过' if is_valid else '失败'}")
print("-" * 50)
def test_old_format_compatibility():
"""测试旧格式兼容性"""
print("\n=== 测试旧格式兼容性 ===")
validator = LicenseValidator()
# 测试旧格式卡密
old_license = "ABCDEFGHIJKLMNOPQRSTUVWXZY123456" # 30位
is_valid = validator.validate_license_key(old_license)
print(f"旧格式卡密: {old_license}")
print(f"验证结果: {'通过' if is_valid else '失败'}")
# 格式化旧格式卡密
formatted = validator.format_license_key(old_license)
print(f"格式化后: {formatted}")
# 验证格式化后的卡密
is_valid_new = validator.validate_license_key(formatted)
print(f"格式化后验证结果: {'通过' if is_valid_new else '失败'}")
def test_new_license_key_validation():
"""测试新格式卡密验证"""
print("\n=== 测试新格式卡密验证 ===")
validator = LicenseValidator()
# 测试正确的新格式
new_format = "ABCD1234-EFGH5678-IJKL9012-MNOP3456"
is_valid = validator.validate_license_key(new_format)
print(f"新格式卡密: {new_format}")
print(f"验证结果: {'通过' if is_valid else '失败'}")
# 测试错误格式
wrong_formats = [
"ABCD123-EFGH5678-IJKL9012-MNOP3456", # 第一部分只有7位
"ABCD12345-EFGH5678-IJKL9012-MNOP3456", # 第一部分有9位
"ABCD1234-EFGH567-IJKL9012-MNOP3456", # 第二部分只有7位
"ABCD1234-EFGH5678-IJKL9012-MNOP345", # 第四部分只有7位
"ABCD1234_EFGH5678_IJKL9012_MNOP3456" # 使用下划线而不是连字符
]
for wrong_format in wrong_formats:
is_valid = validator.validate_license_key(wrong_format)
print(f"错误格式: {wrong_format}")
print(f"验证结果: {'通过' if is_valid else '失败'}")
if __name__ == "__main__":
print("开始测试卡密格式更新功能...")
# 测试卡密生成
generated_key = test_license_generation()
# 测试卡密格式化
test_license_formatting()
# 测试旧格式兼容性
test_old_format_compatibility()
# 测试新格式验证
test_new_license_key_validation()
print("\n测试完成!")