"""Tests for NetDB lookup service.""" import os import pytest class TestLookupState: def test_enum_values(self): from i2p_netdb.lookup import LookupState assert LookupState.NEW.value == 0 assert LookupState.QUERYING.value == 1 assert LookupState.FOUND.value == 2 assert LookupState.NOT_FOUND.value == 3 assert LookupState.FAILED.value == 4 class TestLookupRequest: def test_construct(self): from i2p_netdb.lookup import LookupRequest, LookupState key = os.urandom(32) req = LookupRequest(key=key, timeout_ms=5000) assert req.key == key assert req.state == LookupState.NEW assert req.timeout_ms == 5000 assert req.result is None def test_start(self): from i2p_netdb.lookup import LookupRequest, LookupState req = LookupRequest(key=os.urandom(32)) req.start() assert req.state == LookupState.QUERYING def test_found(self): from i2p_netdb.lookup import LookupRequest, LookupState req = LookupRequest(key=os.urandom(32)) req.start() req.set_found(b"result data") assert req.state == LookupState.FOUND assert req.result == b"result data" def test_not_found(self): from i2p_netdb.lookup import LookupRequest, LookupState req = LookupRequest(key=os.urandom(32)) req.start() req.set_not_found() assert req.state == LookupState.NOT_FOUND def test_failed(self): from i2p_netdb.lookup import LookupRequest, LookupState req = LookupRequest(key=os.urandom(32)) req.start() req.set_failed("timeout") assert req.state == LookupState.FAILED assert req.error == "timeout" def test_queried_peers(self): from i2p_netdb.lookup import LookupRequest req = LookupRequest(key=os.urandom(32)) peer1 = os.urandom(32) peer2 = os.urandom(32) req.add_queried_peer(peer1) req.add_queried_peer(peer2) assert len(req.queried_peers) == 2 assert peer1 in req.queried_peers def test_exclude_already_queried(self): from i2p_netdb.lookup import LookupRequest req = LookupRequest(key=os.urandom(32)) peer = os.urandom(32) req.add_queried_peer(peer) assert req.already_queried(peer) assert not req.already_queried(os.urandom(32)) class TestFloodfillSet: def test_add_and_get(self): from i2p_netdb.lookup import FloodfillSet ffs = FloodfillSet() h = os.urandom(32) ffs.add(h, router_info=b"info") assert ffs.is_floodfill(h) def test_not_floodfill(self): from i2p_netdb.lookup import FloodfillSet ffs = FloodfillSet() assert not ffs.is_floodfill(os.urandom(32)) def test_closest_floodfills(self): from i2p_netdb.lookup import FloodfillSet ffs = FloodfillSet() for _ in range(10): ffs.add(os.urandom(32)) target = os.urandom(32) closest = ffs.closest(target, n=3) assert len(closest) == 3 def test_count(self): from i2p_netdb.lookup import FloodfillSet ffs = FloodfillSet() for _ in range(5): ffs.add(os.urandom(32)) assert ffs.count() == 5 def test_remove(self): from i2p_netdb.lookup import FloodfillSet ffs = FloodfillSet() h = os.urandom(32) ffs.add(h) ffs.remove(h) assert not ffs.is_floodfill(h)