diff --git a/netdiff/parsers/base.py b/netdiff/parsers/base.py index dd3eddb..033306f 100644 --- a/netdiff/parsers/base.py +++ b/netdiff/parsers/base.py @@ -2,7 +2,7 @@ import networkx import requests -from Exscript.protocols import telnetlib +from telnetlib3 import telnetlib from ..exceptions import ConversionException, TopologyRetrievalError from ..utils import _netjson_networkgraph, diff diff --git a/requirements.txt b/requirements.txt index dd10cb3..cd61d0c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,4 +2,4 @@ requests<3.0 libcnml<0.10.0 openvpn-status>=0.2,<0.3 networkx>=3.4,<3.7 -Exscript>=2.6.32 +telnetlib3>=5,<6 diff --git a/tests/test_base.py b/tests/test_base.py index e0fe6b9..19176d4 100644 --- a/tests/test_base.py +++ b/tests/test_base.py @@ -3,9 +3,11 @@ import responses from requests.exceptions import ConnectionError +from telnetlib3 import telnetlib as telnetlib3 from netdiff import get_version from netdiff.exceptions import ConversionException, NetJsonError, TopologyRetrievalError +from netdiff.parsers import base from netdiff.parsers.base import BaseParser from netdiff.utils import _netjson_networkgraph @@ -18,6 +20,9 @@ class TestBaseParser(unittest.TestCase): """BaseParser tests""" + def test_telnet_uses_telnetlib3(self): + self.assertIs(base.telnetlib, telnetlib3) + def _load_contents(self, file): return open(os.path.abspath(file)).read() @@ -63,16 +68,22 @@ def request_callback(request): with self.assertRaises(TopologyRetrievalError): BaseParser(url="http://connectionerror.com") - @mock.patch("Exscript.protocols.telnetlib.Telnet") + @mock.patch("netdiff.parsers.base.telnetlib.Telnet") def test_telnet_retrieval_error(self, MockClass): MockClass.side_effect = ValueError("testing exception") with self.assertRaises(TopologyRetrievalError): BaseParser(url="telnet://wrong.com") - @mock.patch("Exscript.protocols.telnetlib.Telnet") + @mock.patch("netdiff.parsers.base.telnetlib.Telnet") def test_telnet_retrieval(self, MockClass): - with self.assertRaises(ConversionException): - BaseParser(url="telnet://127.0.0.1") + telnet = MockClass.return_value + telnet.read_all.return_value = b"{}" + parser = BaseParser(url="telnet://127.0.0.1:23") + self.assertIsInstance(parser.original_data, dict) + MockClass.assert_called_once_with("127.0.0.1", 23, timeout=None) + telnet.write.assert_called_once_with(b"\r\n") + telnet.read_all.assert_called_once_with() + telnet.close.assert_called_once_with() def test_topology_retrieval_error_file(self): with self.assertRaises(TopologyRetrievalError):