"""Tests for OutboundCache and HashPair.""" from i2p_router.outbound_cache import HashPair, OutboundCache def test_hashpair_equality(): a = HashPair(b"\x01" * 32, b"\x02" * 32) b = HashPair(b"\x01" * 32, b"\x02" * 32) assert a == b assert hash(a) == hash(b) def test_hashpair_inequality(): a = HashPair(b"\x01" * 32, b"\x02" * 32) b = HashPair(b"\x02" * 32, b"\x01" * 32) assert a != b def test_lease_cache_hit_miss(): cache = OutboundCache() pair = HashPair(b"\x01" * 32, b"\x02" * 32) assert cache.get_cached_lease(pair) is None lease = object() cache.set_cached_lease(pair, lease) assert cache.get_cached_lease(pair) is lease def test_tunnel_cache(): cache = OutboundCache() pair = HashPair(b"\x01" * 32, b"\x02" * 32) tunnel = object() cache.set_cached_tunnel(pair, tunnel) assert cache.get_cached_tunnel(pair) is tunnel cache.clear_cached_tunnel(pair) assert cache.get_cached_tunnel(pair) is None def test_reply_rate_limiting(): cache = OutboundCache() pair = HashPair(b"\x01" * 32, b"\x02" * 32) assert cache.should_request_reply(pair, 1000) is True cache.record_reply_request(pair, 1000) # Too soon assert cache.should_request_reply(pair, 50_000) is False # After interval assert cache.should_request_reply(pair, 61_001) is True def test_leaseset_ack_tracking(): cache = OutboundCache() pair = HashPair(b"\x01" * 32, b"\x02" * 32) assert cache.is_leaseset_acked(pair) is False cache.record_leaseset_ack(pair, 5000) assert cache.is_leaseset_acked(pair) is True cache.clear_leaseset_ack(pair) assert cache.is_leaseset_acked(pair) is False