130 lines
4.5 KiB
Python
130 lines
4.5 KiB
Python
"""
|
|
验证器测试用例
|
|
"""
|
|
|
|
import unittest
|
|
import json
|
|
import tempfile
|
|
import os
|
|
from datetime import datetime
|
|
from auth_validator import AuthValidator, MachineCodeGenerator, AuthCache
|
|
|
|
class TestMachineCodeGenerator(unittest.TestCase):
|
|
"""机器码生成器测试"""
|
|
|
|
def test_generate_machine_code(self):
|
|
"""测试机器码生成"""
|
|
generator = MachineCodeGenerator()
|
|
machine_code = generator.generate()
|
|
|
|
# 检查长度
|
|
self.assertEqual(len(machine_code), 32)
|
|
|
|
# 检查字符集(应该是十六进制字符)
|
|
import re
|
|
pattern = r'^[A-F0-9]+$'
|
|
self.assertTrue(re.match(pattern, machine_code))
|
|
|
|
# 测试多次生成的一致性(在短时间内)
|
|
machine_code2 = generator.generate()
|
|
self.assertEqual(machine_code, machine_code2)
|
|
|
|
class TestAuthCache(unittest.TestCase):
|
|
"""授权缓存测试"""
|
|
|
|
def setUp(self):
|
|
"""测试前准备"""
|
|
self.temp_file = tempfile.NamedTemporaryFile(delete=False)
|
|
self.temp_file.close()
|
|
self.cache = AuthCache(self.temp_file.name)
|
|
|
|
def tearDown(self):
|
|
"""测试后清理"""
|
|
if os.path.exists(self.temp_file.name):
|
|
os.unlink(self.temp_file.name)
|
|
|
|
def test_cache_operations(self):
|
|
"""测试缓存操作"""
|
|
software_id = "TEST_SOFTWARE"
|
|
auth_info = {
|
|
"license_key": "TEST123456789",
|
|
"type": 1,
|
|
"expire_time": "2024-12-31T23:59:59",
|
|
"machine_code": "ABCDEF1234567890"
|
|
}
|
|
|
|
# 测试保存
|
|
self.cache.set_auth_info(software_id, auth_info)
|
|
|
|
# 测试读取
|
|
cached_info = self.cache.get_auth_info(software_id)
|
|
self.assertIsNotNone(cached_info)
|
|
self.assertEqual(cached_info["license_key"], auth_info["license_key"])
|
|
|
|
# 测试清除
|
|
self.cache.clear_cache(software_id)
|
|
cached_info = self.cache.get_auth_info(software_id)
|
|
self.assertIsNone(cached_info)
|
|
|
|
class TestAuthValidator(unittest.TestCase):
|
|
"""验证器测试"""
|
|
|
|
def setUp(self):
|
|
"""测试前准备"""
|
|
self.software_id = "TEST_SOFTWARE_ID"
|
|
self.validator = AuthValidator(
|
|
software_id=self.software_id,
|
|
api_url="http://127.0.0.1:5000/api/v1", # 使用本地测试URL
|
|
timeout=1 # 快速超时
|
|
)
|
|
|
|
def test_license_format_validation(self):
|
|
"""测试卡密格式验证"""
|
|
# 有效卡密
|
|
self.assertTrue(self.validator._validate_license_key("ABCD1234567890EFGH"))
|
|
self.assertTrue(self.validator._validate_license_key("TRIAL_ABCD123456"))
|
|
|
|
# 无效卡密
|
|
self.assertFalse(self.validator._validate_license_key(""))
|
|
self.assertFalse(self.validator._validate_license_key("short"))
|
|
self.assertFalse(self.validator._validate_license_key("abcd1234")) # 小写
|
|
self.assertFalse(self.validator._validate_license_key("ABCD@1234")) # 特殊字符
|
|
|
|
def test_software_version_validation(self):
|
|
"""测试软件版本验证"""
|
|
# 有效版本
|
|
self.assertTrue(self.validator._validate_software_version("1.0.0"))
|
|
self.assertTrue(self.validator._validate_software_version("10.20.30"))
|
|
|
|
# 无效版本
|
|
self.assertFalse(self.validator._validate_software_version("1.0"))
|
|
self.assertFalse(self.validator._validate_software_version("v1.0.0"))
|
|
self.assertFalse(self.validator._validate_software_version("1.0.0.0"))
|
|
|
|
def test_machine_code_validation(self):
|
|
"""测试机器码验证"""
|
|
# 有效机器码
|
|
self.assertTrue(self.validator._validate_machine_code("ABCDEF1234567890ABCDEF1234567890"))
|
|
self.assertTrue(self.validator._validate_machine_code("0123456789ABCDEF0123456789ABCDEF"))
|
|
|
|
# 无效机器码
|
|
self.assertFalse(self.validator._validate_machine_code(""))
|
|
self.assertFalse(self.validator._validate_machine_code("short"))
|
|
self.assertFalse(self.validator._validate_machine_code("abcdef1234567890abcdef1234567890")) # 小写
|
|
|
|
def test_account_locking(self):
|
|
"""测试账号锁定机制"""
|
|
# 初始状态不应该被锁定
|
|
self.assertFalse(self.validator._is_locked())
|
|
|
|
# 锁定账号
|
|
self.validator._lock_account(minutes=1)
|
|
self.assertTrue(self.validator._is_locked())
|
|
|
|
# 获取锁定消息
|
|
message = self.validator._get_lock_message()
|
|
self.assertIn("请等待", message)
|
|
self.assertIn("分钟", message)
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main() |