A Python port of the Invisible Internet Project (I2P)
at main 52 lines 1.4 kB view raw
1"""Tests for MessageValidator.""" 2 3import time 4from i2p_router.message_validator import MessageValidator 5 6 7def _now_ms(): 8 return int(time.time() * 1000) 9 10 11def test_accept_valid_message(): 12 mv = MessageValidator() 13 now = _now_ms() 14 assert mv.validate_message(1234, now + 30_000, now) is True 15 16 17def test_reject_expired(): 18 mv = MessageValidator() 19 now = _now_ms() 20 # Expired 2 minutes ago (well beyond 1.5x fudge) 21 assert mv.validate_message(1, now - 120_000, now) is False 22 23 24def test_reject_far_future(): 25 mv = MessageValidator() 26 now = _now_ms() 27 # 5 minutes in future (beyond 4x fudge = 260s) 28 assert mv.validate_message(1, now + 300_000, now) is False 29 30 31def test_reject_duplicate(): 32 mv = MessageValidator() 33 now = _now_ms() 34 exp = now + 30_000 35 assert mv.validate_message(42, exp, now) is True 36 assert mv.validate_message(42, exp, now) is False # duplicate 37 38 39def test_near_expiration_accepted(): 40 mv = MessageValidator() 41 now = _now_ms() 42 # Just barely within fudge 43 exp = now - 50_000 # expired 50s ago, fudge is 97.5s 44 assert mv.validate_message(99, exp, now) is True 45 46 47def test_different_id_same_expiration(): 48 mv = MessageValidator() 49 now = _now_ms() 50 exp = now + 30_000 51 assert mv.validate_message(100, exp, now) is True 52 assert mv.validate_message(200, exp, now) is True # different ID