""" 验证器测试用例 """ 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://km.taisan.online/api/v1", 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()