"""虎牙网页 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()