"""Tests for Banlist.""" import time from i2p_router.banlist import Banlist def test_ban_and_check(): bl = Banlist() peer = b"\x01" * 32 bl.banlist_router(peer, "test") assert bl.is_banlisted(peer) def test_ban_expires(): bl = Banlist() peer = b"\x02" * 32 bl.banlist_router(peer, "test", duration_ms=1) time.sleep(0.01) assert not bl.is_banlisted(peer) def test_permanent_ban(): bl = Banlist() peer = b"\x03" * 32 bl.banlist_router_forever(peer, "bad peer") assert bl.is_banlisted(peer) entry = bl.get_entry(peer) assert entry is not None assert entry.expiration_ms == 0 def test_transport_specific_ban(): bl = Banlist() peer = b"\x04" * 32 bl.banlist_router_transport(peer, "NTCP2", "timeout", duration_ms=60000) assert bl.is_banlisted_transport(peer, "NTCP2") assert not bl.is_banlisted_transport(peer, "SSU2") assert not bl.is_banlisted(peer) # not globally banned def test_unban(): bl = Banlist() peer = b"\x05" * 32 bl.banlist_router(peer, "test") bl.unbanlist_router(peer) assert not bl.is_banlisted(peer) def test_cleanup_removes_expired(): bl = Banlist() bl.banlist_router(b"\x06" * 32, "a", duration_ms=1) bl.banlist_router(b"\x07" * 32, "b", duration_ms=3600000) time.sleep(0.01) removed = bl.cleanup_expired() assert removed == 1 assert bl.count == 1 def test_global_ban_covers_transport(): bl = Banlist() peer = b"\x08" * 32 bl.banlist_router(peer, "global ban") assert bl.is_banlisted_transport(peer, "NTCP2") assert bl.is_banlisted_transport(peer, "SSU2")