From d5d7d6483f5a00294df3491b3ba1f7c75a84b4ed Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 25 Oct 2026 02:39:24 +0000 Subject: [PATCH] test: cover dhtcluster interface address selection Co-authored-by: aberaud <101827+aberaud@users.noreply.github.com> --- python/tests/dhtcluster_tests.py | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 python/tests/dhtcluster_tests.py diff --git a/python/tests/dhtcluster_tests.py b/python/tests/dhtcluster_tests.py new file mode 100644 index 00000000..e3a30b73 --- /dev/null +++ b/python/tests/dhtcluster_tests.py @@ -0,0 +1,35 @@ +import runpy +import unittest +from pathlib import Path +from unittest.mock import Mock, patch + +import netifaces + + +class NodeClusterTester(unittest.TestCase): + @classmethod + def setUpClass(cls): + script = Path(__file__).resolve().parents[1] / 'tools' / 'dhtcluster.py' + with patch.dict('sys.modules', {'opendht': Mock()}): + cls.NodeCluster = runpy.run_path(str(script))['NodeCluster'] + + def test_find_ip_interface(self): + addresses = { + netifaces.AF_INET: [{'addr': '127.0.0.1'}], + netifaces.AF_INET6: [{'addr': '::1'}], + } + with patch('netifaces.ifaddresses', return_value=addresses) as ifaddresses: + self.assertEqual(self.NodeCluster.find_ip('lo'), ('127.0.0.1', '::1')) + self.assertTrue(ifaddresses.called) + self.assertTrue(all(call.args == ('lo',) for call in ifaddresses.call_args_list)) + + def test_find_ip_any(self): + with patch('netifaces.ifaddresses') as ifaddresses: + for iface in (None, '', 'any'): + with self.subTest(iface=iface): + self.assertEqual(self.NodeCluster.find_ip(iface), ('0.0.0.0', '::0')) + ifaddresses.assert_not_called() + + +if __name__ == '__main__': + unittest.main()