"""Tests for tunnel dispatcher.""" import os import pytest class TestTunnelDispatcher: def test_construct(self): from i2p_tunnel.dispatcher import TunnelDispatcher d = TunnelDispatcher() assert d.inbound_count() == 0 assert d.outbound_count() == 0 def test_register_inbound(self): from i2p_tunnel.dispatcher import TunnelDispatcher from i2p_data.tunnel import TunnelId d = TunnelDispatcher() d.register_inbound(TunnelId(100), gateway=os.urandom(32)) assert d.inbound_count() == 1 def test_register_outbound(self): from i2p_tunnel.dispatcher import TunnelDispatcher from i2p_data.tunnel import TunnelId d = TunnelDispatcher() d.register_outbound(TunnelId(200), gateway=os.urandom(32)) assert d.outbound_count() == 1 def test_lookup_inbound(self): from i2p_tunnel.dispatcher import TunnelDispatcher from i2p_data.tunnel import TunnelId d = TunnelDispatcher() gw = os.urandom(32) d.register_inbound(TunnelId(100), gateway=gw) info = d.lookup_inbound(TunnelId(100)) assert info is not None assert info["gateway"] == gw def test_lookup_missing(self): from i2p_tunnel.dispatcher import TunnelDispatcher from i2p_data.tunnel import TunnelId d = TunnelDispatcher() assert d.lookup_inbound(TunnelId(999)) is None def test_unregister(self): from i2p_tunnel.dispatcher import TunnelDispatcher from i2p_data.tunnel import TunnelId d = TunnelDispatcher() d.register_inbound(TunnelId(50), gateway=os.urandom(32)) d.unregister_inbound(TunnelId(50)) assert d.inbound_count() == 0 def test_dispatch_message(self): from i2p_tunnel.dispatcher import TunnelDispatcher from i2p_data.tunnel import TunnelId d = TunnelDispatcher() delivered = [] d.register_inbound(TunnelId(10), gateway=os.urandom(32), handler=lambda data: delivered.append(data)) d.dispatch_inbound(TunnelId(10), b"test message") assert len(delivered) == 1 assert delivered[0] == b"test message" def test_dispatch_unknown_tunnel(self): from i2p_tunnel.dispatcher import TunnelDispatcher from i2p_data.tunnel import TunnelId d = TunnelDispatcher() # Should not raise, just drop d.dispatch_inbound(TunnelId(999), b"dropped")