"""Tests for MessageValidator.""" import time from i2p_router.message_validator import MessageValidator def _now_ms(): return int(time.time() * 1000) def test_accept_valid_message(): mv = MessageValidator() now = _now_ms() assert mv.validate_message(1234, now + 30_000, now) is True def test_reject_expired(): mv = MessageValidator() now = _now_ms() # Expired 2 minutes ago (well beyond 1.5x fudge) assert mv.validate_message(1, now - 120_000, now) is False def test_reject_far_future(): mv = MessageValidator() now = _now_ms() # 5 minutes in future (beyond 4x fudge = 260s) assert mv.validate_message(1, now + 300_000, now) is False def test_reject_duplicate(): mv = MessageValidator() now = _now_ms() exp = now + 30_000 assert mv.validate_message(42, exp, now) is True assert mv.validate_message(42, exp, now) is False # duplicate def test_near_expiration_accepted(): mv = MessageValidator() now = _now_ms() # Just barely within fudge exp = now - 50_000 # expired 50s ago, fudge is 97.5s assert mv.validate_message(99, exp, now) is True def test_different_id_same_expiration(): mv = MessageValidator() now = _now_ms() exp = now + 30_000 assert mv.validate_message(100, exp, now) is True assert mv.validate_message(200, exp, now) is True # different ID