feat: stabilize multi-region runtime sync and worker orchestration
This commit is contained in:
82
domainCheck/tests/test_geetest_cookie_safety.py
Normal file
82
domainCheck/tests/test_geetest_cookie_safety.py
Normal file
@@ -0,0 +1,82 @@
|
||||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
PROJECT_ROOT = Path(__file__).resolve().parents[2]
|
||||
DOMAINCHECK_ROOT = PROJECT_ROOT / "domainCheck"
|
||||
if str(DOMAINCHECK_ROOT) not in sys.path:
|
||||
sys.path.insert(0, str(DOMAINCHECK_ROOT))
|
||||
|
||||
import requests
|
||||
|
||||
from domainCheck.detect import geetest2, jucha, juming, juziseo
|
||||
from domainCheck.detect.locked_pickle import load_pickle_locked, save_pickle_atomic
|
||||
|
||||
|
||||
class GeetestCookieSafetyTests(unittest.TestCase):
|
||||
def test_geetest_slide_asset_fetch_applies_timeout(self):
|
||||
response = MagicMock()
|
||||
response.content = b"binary"
|
||||
with patch("domainCheck.detect.geetest2.requests.get", return_value=response) as mock_get:
|
||||
slider = geetest2.slide()
|
||||
with patch.object(slider, "tp_huanyuan", return_value=b"bg-bytes"):
|
||||
with patch("domainCheck.detect.geetest2.quekou") as mock_quekou:
|
||||
mock_quekou.return_value.get_distance.return_value = 12
|
||||
slider.huak({"bg": "bg.png", "slice": "slice.png"})
|
||||
|
||||
self.assertGreaterEqual(mock_get.call_count, 2)
|
||||
for call in mock_get.call_args_list:
|
||||
self.assertEqual(slider.asset_timeout, call.kwargs["timeout"])
|
||||
|
||||
def test_locked_pickle_roundtrip_is_atomic(self):
|
||||
with tempfile.TemporaryDirectory() as temp_dir:
|
||||
target = Path(temp_dir) / "cookies.pkl"
|
||||
save_pickle_atomic(str(target), {"sid": "abc"})
|
||||
loaded = load_pickle_locked(str(target), default_factory=dict)
|
||||
self.assertEqual({"sid": "abc"}, loaded)
|
||||
|
||||
def test_juziseo_cookie_roundtrip_uses_locked_pickle(self):
|
||||
with tempfile.TemporaryDirectory() as temp_dir:
|
||||
target = Path(temp_dir) / "juziseo.pkl"
|
||||
detector = juziseo.Juziseo()
|
||||
jar = requests.cookies.RequestsCookieJar()
|
||||
jar.set("sid", "value")
|
||||
detector.cookie = jar
|
||||
detector.save_cookies(str(target))
|
||||
|
||||
loaded = juziseo.Juziseo()
|
||||
loaded.load_cookies(str(target))
|
||||
|
||||
self.assertEqual("value", loaded.cookie.get("sid"))
|
||||
|
||||
def test_jucha_and_juming_cookie_roundtrip_use_locked_pickle(self):
|
||||
with tempfile.TemporaryDirectory() as temp_dir:
|
||||
jucha_path = Path(temp_dir) / "jucha.pkl"
|
||||
juming_path = Path(temp_dir) / "juming.pkl"
|
||||
|
||||
jc = jucha.JC()
|
||||
jc_jar = requests.cookies.RequestsCookieJar()
|
||||
jc_jar.set("jc", "cookie")
|
||||
jc.cookie = jc_jar
|
||||
jc.save_cookies(str(jucha_path))
|
||||
|
||||
jm = juming.JM()
|
||||
jm_jar = requests.cookies.RequestsCookieJar()
|
||||
jm_jar.set("jm", "cookie")
|
||||
jm.cookie = jm_jar
|
||||
jm.save_cookies(str(juming_path))
|
||||
|
||||
loaded_jc = jucha.JC()
|
||||
loaded_jc.load_cookies(str(jucha_path))
|
||||
|
||||
loaded_jm = juming.JM()
|
||||
loaded_jm.load_cookies(str(juming_path))
|
||||
|
||||
self.assertEqual("cookie", loaded_jc.cookie.get("jc"))
|
||||
self.assertEqual("cookie", loaded_jm.cookie.get("jm"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user