"""虎牙网页 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 not missing_web_cookie_fields(result) 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_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()