FAEA/tests/unit/test_session_core.py
2025-12-22 17:14:46 +08:00

53 lines
2.2 KiB
Python

import pytest
import time
import json
from src.core.session import SessionState
from src.core.handover import HandoverValidator
def test_session_state_serialization():
original = SessionState(
cookies=[{"name": "test", "value": "123", "domain": ".example.com"}],
local_storage={"key": "value"},
session_storage={},
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
tls_fingerprint="chrome120"
)
serialized = original.serialize()
deserialized = SessionState.deserialize(serialized)
assert original.cookies == deserialized.cookies
assert original.user_agent == deserialized.user_agent
assert original.tls_fingerprint == deserialized.tls_fingerprint
assert abs(original.timestamp - deserialized.timestamp) < 0.001
def test_handover_validator():
# Matching
s1 = SessionState(
cookies=[], local_storage={}, session_storage={},
user_agent="Mozilla/5.0 ... Chrome/120.0 ...",
tls_fingerprint="chrome120"
)
assert HandoverValidator.validate_session_consistency(s1) == True
# Mismatch
s2 = SessionState(
cookies=[], local_storage={}, session_storage={},
user_agent="Mozilla/5.0 ... Firefox/100.0 ...",
tls_fingerprint="chrome120"
)
# The simple validator specifically checks if chrome is in UA, fp should have chrome
# s2 has firefox in UA, chrome in fp -> mismatch?
# Logic in code: if "chrome" in ua and "chrome" not in fp -> False
# Here "chrome" is NOT in UA (it's firefox), so that check passes.
# But wait, logic was: `if "firefox" in ua and "firefox" not in fp: pass`
# Basically my simple validator is very permissive.
# Let's verify what I wrote:
# if "chrome" in ua and "chrome" not in fp: return False
# s2 UA has "Firefox", so it skips.
# This might return True depending on implementation details.
# Let's test the derived sec-ch-ua
ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.109 Safari/537.36"
sec_ch = HandoverValidator.derive_sec_ch_ua(ua)
assert '"Google Chrome";v="120"' in sec_ch