mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-02-20 17:52:50 +00:00
tor_provider: use new Foolscap API to provide better status
This commit is contained in:
parent
de4295ae60
commit
8d008967e7
@ -62,7 +62,8 @@ class Tor(unittest.TestCase):
|
|||||||
n = FakeNode(config)
|
n = FakeNode(config)
|
||||||
h = n._make_tor_handler()
|
h = n._make_tor_handler()
|
||||||
private_dir = os.path.join(n.basedir, "private")
|
private_dir = os.path.join(n.basedir, "private")
|
||||||
exp = mock.call(n._tor_provider._make_control_endpoint)
|
exp = mock.call(n._tor_provider._make_control_endpoint,
|
||||||
|
takes_status=True)
|
||||||
self.assertEqual(f.mock_calls, [exp])
|
self.assertEqual(f.mock_calls, [exp])
|
||||||
self.assertIdentical(h, h1)
|
self.assertIdentical(h, h1)
|
||||||
|
|
||||||
@ -75,7 +76,9 @@ class Tor(unittest.TestCase):
|
|||||||
cfs = mock.Mock(return_value=tcep)
|
cfs = mock.Mock(return_value=tcep)
|
||||||
with mock.patch("allmydata.util.tor_provider._launch_tor", launch_tor):
|
with mock.patch("allmydata.util.tor_provider._launch_tor", launch_tor):
|
||||||
with mock.patch("allmydata.util.tor_provider.clientFromString", cfs):
|
with mock.patch("allmydata.util.tor_provider.clientFromString", cfs):
|
||||||
cep = self.successResultOf(tp._make_control_endpoint(reactor))
|
d = tp._make_control_endpoint(reactor,
|
||||||
|
update_status=lambda status: None)
|
||||||
|
cep = self.successResultOf(d)
|
||||||
launch_tor.assert_called_with(reactor, executable, private_dir,
|
launch_tor.assert_called_with(reactor, executable, private_dir,
|
||||||
tp._txtorcon)
|
tp._txtorcon)
|
||||||
cfs.assert_called_with(reactor, "ep_desc")
|
cfs.assert_called_with(reactor, "ep_desc")
|
||||||
|
@ -271,6 +271,14 @@ class FakeConfig(dict):
|
|||||||
raise KeyError
|
raise KeyError
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
class EmptyContext(object):
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
def __enter__(self):
|
||||||
|
pass
|
||||||
|
def __exit__(self, type, value, traceback):
|
||||||
|
pass
|
||||||
|
|
||||||
class Provider(unittest.TestCase):
|
class Provider(unittest.TestCase):
|
||||||
def test_build(self):
|
def test_build(self):
|
||||||
tor_provider.Provider("basedir", FakeConfig(), "reactor")
|
tor_provider.Provider("basedir", FakeConfig(), "reactor")
|
||||||
@ -298,13 +306,15 @@ class Provider(unittest.TestCase):
|
|||||||
txtorcon = mock.Mock()
|
txtorcon = mock.Mock()
|
||||||
handler = object()
|
handler = object()
|
||||||
tor.control_endpoint_maker = mock.Mock(return_value=handler)
|
tor.control_endpoint_maker = mock.Mock(return_value=handler)
|
||||||
|
tor.add_context = mock.Mock(return_value=EmptyContext())
|
||||||
with mock_tor(tor):
|
with mock_tor(tor):
|
||||||
with mock_txtorcon(txtorcon):
|
with mock_txtorcon(txtorcon):
|
||||||
p = tor_provider.Provider("basedir", FakeConfig(launch=True),
|
p = tor_provider.Provider("basedir", FakeConfig(launch=True),
|
||||||
reactor)
|
reactor)
|
||||||
h = p.get_tor_handler()
|
h = p.get_tor_handler()
|
||||||
self.assertIs(h, handler)
|
self.assertIs(h, handler)
|
||||||
tor.control_endpoint_maker.assert_called_with(p._make_control_endpoint)
|
tor.control_endpoint_maker.assert_called_with(p._make_control_endpoint,
|
||||||
|
takes_status=True)
|
||||||
|
|
||||||
# make sure Tor is launched just once, the first time an endpoint is
|
# make sure Tor is launched just once, the first time an endpoint is
|
||||||
# requested, and never again. The clientFromString() function is
|
# requested, and never again. The clientFromString() function is
|
||||||
@ -316,7 +326,8 @@ class Provider(unittest.TestCase):
|
|||||||
cfs = mock.Mock(return_value=ep)
|
cfs = mock.Mock(return_value=ep)
|
||||||
with mock.patch("allmydata.util.tor_provider._launch_tor", launch_tor):
|
with mock.patch("allmydata.util.tor_provider._launch_tor", launch_tor):
|
||||||
with mock.patch("allmydata.util.tor_provider.clientFromString", cfs):
|
with mock.patch("allmydata.util.tor_provider.clientFromString", cfs):
|
||||||
d = p._make_control_endpoint(reactor)
|
d = p._make_control_endpoint(reactor,
|
||||||
|
update_status=lambda status: None)
|
||||||
yield flushEventualQueue()
|
yield flushEventualQueue()
|
||||||
self.assertIs(self.successResultOf(d), ep)
|
self.assertIs(self.successResultOf(d), ep)
|
||||||
launch_tor.assert_called_with(reactor, None,
|
launch_tor.assert_called_with(reactor, None,
|
||||||
@ -328,7 +339,8 @@ class Provider(unittest.TestCase):
|
|||||||
cfs2 = mock.Mock(return_value=ep)
|
cfs2 = mock.Mock(return_value=ep)
|
||||||
with mock.patch("allmydata.util.tor_provider._launch_tor", launch_tor2):
|
with mock.patch("allmydata.util.tor_provider._launch_tor", launch_tor2):
|
||||||
with mock.patch("allmydata.util.tor_provider.clientFromString", cfs2):
|
with mock.patch("allmydata.util.tor_provider.clientFromString", cfs2):
|
||||||
d2 = p._make_control_endpoint(reactor)
|
d2 = p._make_control_endpoint(reactor,
|
||||||
|
update_status=lambda status: None)
|
||||||
yield flushEventualQueue()
|
yield flushEventualQueue()
|
||||||
self.assertIs(self.successResultOf(d2), ep)
|
self.assertIs(self.successResultOf(d2), ep)
|
||||||
self.assertEqual(launch_tor2.mock_calls, [])
|
self.assertEqual(launch_tor2.mock_calls, [])
|
||||||
|
@ -226,7 +226,8 @@ class Provider(service.MultiService):
|
|||||||
if self._get_tor_config("launch", False, boolean=True):
|
if self._get_tor_config("launch", False, boolean=True):
|
||||||
if not self._txtorcon:
|
if not self._txtorcon:
|
||||||
return None
|
return None
|
||||||
return self._tor.control_endpoint_maker(self._make_control_endpoint)
|
return self._tor.control_endpoint_maker(self._make_control_endpoint,
|
||||||
|
takes_status=True)
|
||||||
|
|
||||||
socks_endpoint_desc = self._get_tor_config("socks.port", None)
|
socks_endpoint_desc = self._get_tor_config("socks.port", None)
|
||||||
if socks_endpoint_desc:
|
if socks_endpoint_desc:
|
||||||
@ -241,9 +242,11 @@ class Provider(service.MultiService):
|
|||||||
return self._tor.default_socks()
|
return self._tor.default_socks()
|
||||||
|
|
||||||
@inlineCallbacks
|
@inlineCallbacks
|
||||||
def _make_control_endpoint(self, reactor):
|
def _make_control_endpoint(self, reactor, update_status):
|
||||||
# this will only be called when tahoe.cfg has "[tor] launch = true"
|
# this will only be called when tahoe.cfg has "[tor] launch = true"
|
||||||
(endpoint_desc, _) = yield self._get_launched_tor(reactor)
|
update_status("launching Tor")
|
||||||
|
with self._tor.add_context(update_status, "launching Tor"):
|
||||||
|
(endpoint_desc, _) = yield self._get_launched_tor(reactor)
|
||||||
tor_control_endpoint = clientFromString(reactor, endpoint_desc)
|
tor_control_endpoint = clientFromString(reactor, endpoint_desc)
|
||||||
returnValue(tor_control_endpoint)
|
returnValue(tor_control_endpoint)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user