"""Tests for IRC server tunnel — TDD: tests before implementation.""" import pytest from i2p_apps.i2ptunnel.config import TunnelDefinition, TunnelType from i2p_apps.i2ptunnel.irc_server import IRCServerTask class MockIRCServerSession: def __init__(self): self.destination = "IRCS" * 129 async def accept(self): raise NotImplementedError async def close(self): pass def _make_ircserver_def(**kw): defaults = dict( name="irc-server", type=TunnelType.IRCSERVER, target_host="127.0.0.1", target_port=6667, ) defaults.update(kw) return TunnelDefinition(**defaults) class TestIRCServerTask: def test_creation(self): task = IRCServerTask(_make_ircserver_def(), MockIRCServerSession()) assert task.tunnel_type == TunnelType.IRCSERVER def test_mangle_user_command(self): task = IRCServerTask(_make_ircserver_def(), MockIRCServerSession()) remote_dest = "A" * 516 mangled = task._mangle_user("USER oldname 0 * :Real Name", remote_dest) assert "USER" in mangled assert "oldname" not in mangled # Should contain a hash-based cloak assert ".b32.i2p" in mangled or len(mangled) > 0 def test_mangle_preserves_realname(self): task = IRCServerTask(_make_ircserver_def(), MockIRCServerSession()) remote_dest = "B" * 516 mangled = task._mangle_user("USER bob 0 * :Bob Smith", remote_dest) assert "Bob Smith" in mangled def test_non_user_passes_through(self): task = IRCServerTask(_make_ircserver_def(), MockIRCServerSession()) assert task._mangle_user("NICK bobby", "dest") == "NICK bobby" def test_cloak_deterministic(self): """Same destination should produce same cloak.""" task = IRCServerTask(_make_ircserver_def(), MockIRCServerSession()) dest = "C" * 516 c1 = task._compute_cloak(dest) c2 = task._compute_cloak(dest) assert c1 == c2 def test_cloak_different_for_different_dests(self): task = IRCServerTask(_make_ircserver_def(), MockIRCServerSession()) c1 = task._compute_cloak("A" * 516) c2 = task._compute_cloak("B" * 516) assert c1 != c2