Files
crypto_monitor_user/tests/test_license_lib.py
T
dekun 16ef0f31e3 User edition: prune docs, license gate, obfuscate core lib.
Keep deploy/basic docs only; integrate sq.bz121.com license client; encrypt strategy/trade/key_monitor/options/hedge_plan for release.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-17 16:30:58 +08:00

89 lines
2.7 KiB
Python

"""许可客户端基础测试(不依赖真实激活码)。"""
from __future__ import annotations
import json
import os
import sys
import tempfile
import unittest
from pathlib import Path
from unittest import mock
ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT))
from lib.license import license_lib as lic
class LicenseLibTests(unittest.TestCase):
def setUp(self):
self._td = tempfile.TemporaryDirectory()
self.state = Path(self._td.name) / "license_state.json"
self.env = {
"LICENSE_API_URL": "https://sq.bz121.com",
"LICENSE_CLIENT_KEY": "test-key",
"LICENSE_STATE_PATH": str(self.state),
"LICENSE_OFFLINE_GRACE_HOURS": "72",
}
self._patcher = mock.patch.dict(os.environ, self.env, clear=False)
self._patcher.start()
lic._env_loaded = True
lic._cached_device_id = None
def tearDown(self):
self._patcher.stop()
self._td.cleanup()
def test_device_id_length(self):
did = lic.get_device_id()
self.assertGreaterEqual(len(did), 16)
self.assertLessEqual(len(did), 64)
self.assertEqual(did, lic.get_device_id())
def test_not_activated(self):
st = lic.get_license_status()
self.assertFalse(st["valid"])
self.assertEqual(st["reason"], "not_activated")
def test_local_valid_within_grace(self):
now = lic._now_ts()
self.state.write_text(
json.dumps(
{
"subscription_id": "sub_test",
"expires_at": "2099-01-01T00:00:00+08:00",
"plan": "monthly",
"last_ok_at": now,
"last_validate_at": now,
}
),
encoding="utf-8",
)
st = lic.get_license_status(skip_remote=True)
self.assertTrue(st["valid"])
def test_redeem_posts_api(self):
def fake_http(method, path, body):
self.assertEqual(path, "/v1/redeem")
self.assertIn("device_id", body)
self.assertEqual(body["code"], "ABCD1234EFGH")
return {
"ok": True,
"subscription_id": "sub1",
"plan": "monthly",
"expires_at": "2099-06-01T00:00:00+08:00",
"message": "激活成功",
}
with mock.patch.object(lic, "_http_json", side_effect=fake_http):
r = lic.redeem_code("abcd1234efgh")
self.assertTrue(r["ok"])
data = json.loads(self.state.read_text(encoding="utf-8"))
self.assertEqual(data["subscription_id"], "sub1")
if __name__ == "__main__":
unittest.main()