A Python port of the Invisible Internet Project (I2P)
at main 67 lines 2.3 kB view raw
1"""Tests for IRC server tunnel — TDD: tests before implementation.""" 2 3import pytest 4 5from i2p_apps.i2ptunnel.config import TunnelDefinition, TunnelType 6from i2p_apps.i2ptunnel.irc_server import IRCServerTask 7 8 9class MockIRCServerSession: 10 def __init__(self): 11 self.destination = "IRCS" * 129 12 13 async def accept(self): 14 raise NotImplementedError 15 16 async def close(self): 17 pass 18 19 20def _make_ircserver_def(**kw): 21 defaults = dict( 22 name="irc-server", 23 type=TunnelType.IRCSERVER, 24 target_host="127.0.0.1", 25 target_port=6667, 26 ) 27 defaults.update(kw) 28 return TunnelDefinition(**defaults) 29 30 31class TestIRCServerTask: 32 def test_creation(self): 33 task = IRCServerTask(_make_ircserver_def(), MockIRCServerSession()) 34 assert task.tunnel_type == TunnelType.IRCSERVER 35 36 def test_mangle_user_command(self): 37 task = IRCServerTask(_make_ircserver_def(), MockIRCServerSession()) 38 remote_dest = "A" * 516 39 mangled = task._mangle_user("USER oldname 0 * :Real Name", remote_dest) 40 assert "USER" in mangled 41 assert "oldname" not in mangled 42 # Should contain a hash-based cloak 43 assert ".b32.i2p" in mangled or len(mangled) > 0 44 45 def test_mangle_preserves_realname(self): 46 task = IRCServerTask(_make_ircserver_def(), MockIRCServerSession()) 47 remote_dest = "B" * 516 48 mangled = task._mangle_user("USER bob 0 * :Bob Smith", remote_dest) 49 assert "Bob Smith" in mangled 50 51 def test_non_user_passes_through(self): 52 task = IRCServerTask(_make_ircserver_def(), MockIRCServerSession()) 53 assert task._mangle_user("NICK bobby", "dest") == "NICK bobby" 54 55 def test_cloak_deterministic(self): 56 """Same destination should produce same cloak.""" 57 task = IRCServerTask(_make_ircserver_def(), MockIRCServerSession()) 58 dest = "C" * 516 59 c1 = task._compute_cloak(dest) 60 c2 = task._compute_cloak(dest) 61 assert c1 == c2 62 63 def test_cloak_different_for_different_dests(self): 64 task = IRCServerTask(_make_ircserver_def(), MockIRCServerSession()) 65 c1 = task._compute_cloak("A" * 516) 66 c2 = task._compute_cloak("B" * 516) 67 assert c1 != c2