mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-03-10 14:34:05 +00:00
Use boring old dependency injection to replace mocks in this test
This commit is contained in:
parent
3d564f97d5
commit
3d82ca0d25
@ -190,16 +190,28 @@ class Connections(unittest.TestCase):
|
|||||||
self.assertEqual(default_connection_handlers["i2p"], "i2p")
|
self.assertEqual(default_connection_handlers["i2p"], "i2p")
|
||||||
|
|
||||||
def test_tor_unimportable(self):
|
def test_tor_unimportable(self):
|
||||||
with mock.patch("allmydata.util.tor_provider._import_tor",
|
"""
|
||||||
return_value=None):
|
If the configuration calls for substituting Tor for TCP and
|
||||||
|
``foolscap.connections.tor`` is not importable then
|
||||||
|
``create_connection_handlers`` raises ``ValueError`` with a message
|
||||||
|
explaining this makes Tor unusable.
|
||||||
|
"""
|
||||||
self.config = config_from_string(
|
self.config = config_from_string(
|
||||||
"fake.port",
|
"fake.port",
|
||||||
"no-basedir",
|
"no-basedir",
|
||||||
BASECONFIG + "[connections]\ntcp = tor\n",
|
BASECONFIG + "[connections]\ntcp = tor\n",
|
||||||
)
|
)
|
||||||
|
tor_provider = create_tor_provider(
|
||||||
|
reactor,
|
||||||
|
self.config,
|
||||||
|
import_tor=lambda: None,
|
||||||
|
)
|
||||||
with self.assertRaises(ValueError) as ctx:
|
with self.assertRaises(ValueError) as ctx:
|
||||||
tor_provider = create_tor_provider(reactor, self.config)
|
default_connection_handlers, _ = create_connection_handlers(
|
||||||
default_connection_handlers, _ = create_connection_handlers(self.config, mock.Mock(), tor_provider)
|
self.config,
|
||||||
|
i2p_provider=ConstantAddresses(handler=object()),
|
||||||
|
tor_provider=tor_provider,
|
||||||
|
)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
str(ctx.exception),
|
str(ctx.exception),
|
||||||
"'tahoe.cfg [connections] tcp='"
|
"'tahoe.cfg [connections] tcp='"
|
||||||
|
@ -17,23 +17,7 @@ from ..interfaces import (
|
|||||||
IAddressFamily,
|
IAddressFamily,
|
||||||
)
|
)
|
||||||
|
|
||||||
def create(reactor, config):
|
|
||||||
"""
|
|
||||||
Create a new _Provider service (this is an IService so must be
|
|
||||||
hooked up to a parent or otherwise started).
|
|
||||||
|
|
||||||
If foolscap.connections.tor or txtorcon are not installed, then
|
|
||||||
Provider.get_tor_handler() will return None. If tahoe.cfg wants
|
|
||||||
to start an onion service too, then this `create()` method will
|
|
||||||
throw a nice error (and startService will throw an ugly error).
|
|
||||||
"""
|
|
||||||
provider = _Provider(config, reactor)
|
|
||||||
provider.check_onion_config()
|
|
||||||
return provider
|
|
||||||
|
|
||||||
|
|
||||||
def _import_tor():
|
def _import_tor():
|
||||||
# this exists to be overridden by unit tests
|
|
||||||
try:
|
try:
|
||||||
from foolscap.connections import tor
|
from foolscap.connections import tor
|
||||||
return tor
|
return tor
|
||||||
@ -47,6 +31,25 @@ def _import_txtorcon():
|
|||||||
except ImportError: # pragma: no cover
|
except ImportError: # pragma: no cover
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def create(reactor, config, import_tor=None, import_txtorcon=None):
|
||||||
|
"""
|
||||||
|
Create a new _Provider service (this is an IService so must be
|
||||||
|
hooked up to a parent or otherwise started).
|
||||||
|
|
||||||
|
If foolscap.connections.tor or txtorcon are not installed, then
|
||||||
|
Provider.get_tor_handler() will return None. If tahoe.cfg wants
|
||||||
|
to start an onion service too, then this `create()` method will
|
||||||
|
throw a nice error (and startService will throw an ugly error).
|
||||||
|
"""
|
||||||
|
if import_tor is None:
|
||||||
|
import_tor = _import_tor
|
||||||
|
if import_txtorcon is None:
|
||||||
|
import_txtorcon = _import_txtorcon
|
||||||
|
provider = _Provider(config, reactor, import_tor(), import_txtorcon())
|
||||||
|
provider.check_onion_config()
|
||||||
|
return provider
|
||||||
|
|
||||||
|
|
||||||
def data_directory(private_dir):
|
def data_directory(private_dir):
|
||||||
return os.path.join(private_dir, "tor-statedir")
|
return os.path.join(private_dir, "tor-statedir")
|
||||||
|
|
||||||
@ -217,14 +220,14 @@ def create_config(reactor, cli_config):
|
|||||||
|
|
||||||
@implementer(IAddressFamily)
|
@implementer(IAddressFamily)
|
||||||
class _Provider(service.MultiService):
|
class _Provider(service.MultiService):
|
||||||
def __init__(self, config, reactor):
|
def __init__(self, config, reactor, tor, txtorcon):
|
||||||
service.MultiService.__init__(self)
|
service.MultiService.__init__(self)
|
||||||
self._config = config
|
self._config = config
|
||||||
self._tor_launched = None
|
self._tor_launched = None
|
||||||
self._onion_ehs = None
|
self._onion_ehs = None
|
||||||
self._onion_tor_control_proto = None
|
self._onion_tor_control_proto = None
|
||||||
self._tor = _import_tor()
|
self._tor = tor
|
||||||
self._txtorcon = _import_txtorcon()
|
self._txtorcon = txtorcon
|
||||||
self._reactor = reactor
|
self._reactor = reactor
|
||||||
|
|
||||||
def _get_tor_config(self, *args, **kwargs):
|
def _get_tor_config(self, *args, **kwargs):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user