tor_provider.get_listener(): return a real endpoint, instead of a descriptor

get_listener() is allowed to return either, and the Tor provider is currently
simple enough to not really need more than a basic descriptor, but have it
return a full Endpoint for use as an example of what I2P can do later.
This commit is contained in:
Brian Warner
2017-08-15 18:00:24 -07:00
parent d713e0e57d
commit 1f1afe65ec
2 changed files with 10 additions and 5 deletions

View File

@ -408,8 +408,13 @@ class ProviderListener(unittest.TestCase):
p = tor_provider.Provider("basedir", p = tor_provider.Provider("basedir",
FakeConfig(**{"onion.local_port": "321"}), FakeConfig(**{"onion.local_port": "321"}),
reactor) reactor)
fake_ep = object()
with mock.patch("allmydata.util.tor_provider.TCP4ServerEndpoint",
return_value=fake_ep) as e:
endpoint_or_description = p.get_listener() endpoint_or_description = p.get_listener()
self.assertEqual(endpoint_or_description, "tcp:321:interface=127.0.0.1") self.assertIs(endpoint_or_description, fake_ep)
self.assertEqual(e.mock_calls, [mock.call(reactor, 321,
interface="127.0.0.1")])
class Provider_CheckOnionConfig(unittest.TestCase): class Provider_CheckOnionConfig(unittest.TestCase):
def test_default(self): def test_default(self):

View File

@ -3,7 +3,7 @@ from __future__ import absolute_import, print_function, with_statement
import os import os
from twisted.internet.defer import inlineCallbacks, returnValue from twisted.internet.defer import inlineCallbacks, returnValue
from twisted.internet.endpoints import clientFromString from twisted.internet.endpoints import clientFromString, TCP4ServerEndpoint
from twisted.internet.error import ConnectionRefusedError, ConnectError from twisted.internet.error import ConnectionRefusedError, ConnectError
from twisted.application import service from twisted.application import service
@ -217,9 +217,9 @@ class Provider(service.MultiService):
return self._node_for_config.get_config("tor", *args, **kwargs) return self._node_for_config.get_config("tor", *args, **kwargs)
def get_listener(self): def get_listener(self):
local_port = self._get_tor_config("onion.local_port") local_port = int(self._get_tor_config("onion.local_port"))
tor_port = "tcp:%s:interface=127.0.0.1" % local_port ep = TCP4ServerEndpoint(self._reactor, local_port, interface="127.0.0.1")
return tor_port return ep
def get_tor_handler(self): def get_tor_handler(self):
enabled = self._get_tor_config("enabled", True, boolean=True) enabled = self._get_tor_config("enabled", True, boolean=True)