Files
live-hub-py/tests/test_huya_web_cookie_fields.py
T

151 lines
5.2 KiB
Python

"""虎牙网页 Cookie 字段生成器测试。"""
from core.huya.web_cookie_fields import (
_qimei_feature_string,
_qimei_uuid42_generate,
_x64hash128,
cookie_fields,
fill_web_cookie_fields,
missing_web_cookie_fields,
qimei_feature_from_device_profile,
qimei_fingerprint_generate,
)
def test_qimei_hash_matches_sdk_vectors():
assert _x64hash128("", 31) == "24700f9f1986800ab4fcc880530dd0ed"
assert _x64hash128("a", 31) == "f8b09930c1df727ef75677a1d6ae5bd6"
assert _x64hash128("abc", 31) == "31844fd43df93041e52bcddd13312671"
def test_qimei_fingerprint_uses_sdk_feature_string():
feature = {
"screen": {"resolution": "800x600", "availResolution": "800x600"},
"navigator": {
"deviceMemory": 16,
"pdfViewerEnabled": True,
"cookieEnabled": True,
"productSub": "20030107",
"hardwareConcurrency": 10,
},
"webgl": "Google Inc. (Apple)~ANGLE (Apple, ANGLE Metal Renderer: Apple M4, Unspecified Version)",
"timezoneOffset": -480,
}
assert _qimei_feature_string(feature).endswith("###-480###")
assert qimei_fingerprint_generate(feature) == "d07a45de567322edcd42312f38e610be"
fields = cookie_fields(fill_web_cookie_fields("", "", qimei_feature=feature))
assert fields["_qimei_fingerprint"] == "d07a45de567322edcd42312f38e610be"
def test_fill_replaces_empty_values_and_completes_core_fields():
result = fill_web_cookie_fields("guid=; __yamid_new=; game_did=", "a" * 32, 1)
fields = cookie_fields(result)
assert fields["guid"] == "a" * 32
assert fields["__yamid_new"]
assert fields["game_did"]
assert fields["_qimei_fingerprint"] == qimei_fingerprint_generate()
assert fields["_qimei_h38"] == fields["_qimei_uuid42"]
assert not missing_web_cookie_fields(result)
def test_qimei_h38_aliases_uuid42_without_overwriting_existing_value():
uuid42 = "1" * 42
fields = cookie_fields(
fill_web_cookie_fields(f"_qimei_uuid42={uuid42}; _qimei_h38=", "")
)
assert fields["_qimei_h38"] == uuid42
fields = cookie_fields(
fill_web_cookie_fields(f"_qimei_uuid42={uuid42}; _qimei_h38=historical", "")
)
assert fields["_qimei_h38"] == "historical"
def test_qimei_uuid42_matches_sdk_vectors_and_random_upper_bound():
base = 1700000000000000000
assert _qimei_uuid42_generate(base, random_value=0.25) == (
"17b0f060d14100037f4444444444444444444437df"
)
assert _qimei_uuid42_generate(base, random_value=0.5) == (
"17b0f060d1410053db888888888888888888883ff6"
)
upper = _qimei_uuid42_generate(base, random_value=1.0)
assert len(upper) == 42
assert upper[18:38] == "f" * 20
assert all(ch in "0123456789abcdef" for ch in upper)
def test_qimei_uuid42_uses_twenty_independent_random_draws(monkeypatch):
values = iter(value / 16 for value in (*range(16), *range(4)))
calls = 0
def next_random():
nonlocal calls
calls += 1
return next(values)
monkeypatch.setattr("core.huya.web_cookie_fields.random.random", next_random)
assert _qimei_uuid42_generate(1700000000000000000) == (
"17b0f060d14100b2230123456789abcdef012396a9"
)
assert calls == 20
def test_qimei_uuid42_encodes_local_date_and_cookie_flag():
base = 1700000000000000000
assert _qimei_uuid42_generate(base, random_value=0, cookie_enabled=False) == (
"17b0f060d140008b2b00000000000000000000dad6"
)
def test_qimei_uuid42_handles_year_zero_padding():
# 2000-01-01 08:00:00 local time; SDK emits 00 + 1 + 08 + 00 + 00 + 100.
value = _qimei_uuid42_generate(946684800000000000, random_value=0)
assert value[:14] == "00101080000100"
def test_sdk_uuid42_trace_vectors_have_confirmed_outer_layout():
"""锁定 SDK 追踪确认的 14+4+20+4 外层布局和固定随机向量。"""
vectors = {
0.0: "17b0f060d1410085cc000000000000000000003207",
0.25: "17b0f060d14100037f4444444444444444444437df",
0.5: "17b0f060d1410053db888888888888888888883ff6",
0.75: "17b0f060d14100966bcccccccccccccccccccc1cf3",
0.999: "17b0f060d141003174ffffffffffffffffffffd85d",
}
for random_value, value in vectors.items():
assert len(value) == 42
assert value[:14] == "17b0f060d14100"
assert value[18:38] == f"{int(random_value * 16):x}" * 20
assert all(char in "0123456789abcdef" for char in value)
def test_device_profile_builds_stable_webview_feature_approximation():
feature = qimei_feature_from_device_profile(
{
"vendor": "vivo",
"model": "V2370A",
"width": "1080",
"height": "2412",
}
)
assert feature["screen"] == {
"resolution": "1080x2412",
"availResolution": "1080x2412",
}
assert feature["navigator"]["pdfViewerEnabled"] is False
assert "Adreno" in str(feature["webgl"])
first = qimei_fingerprint_generate(feature)
second = qimei_fingerprint_generate(
qimei_feature_from_device_profile(
{
"vendor": "vivo",
"model": "V2370A",
"width": "1080",
"height": "2412",
}
)
)
assert first == second
assert first != qimei_fingerprint_generate()