commit 2b77697806d916f5d1f51b73213625b0cadcd8ea Author: Damian Johnson atagar@torproject.org Date: Sat Feb 1 15:32:12 2020 -0800
Drop deprecated controller methods
Removing get_socks_listeners and is_geoip_unavailable as both have better counterparts nowadays. --- stem/control.py | 56 +------------------- test/integ/control/controller.py | 9 ---- test/unit/control/controller.py | 110 --------------------------------------- 3 files changed, 2 insertions(+), 173 deletions(-)
diff --git a/stem/control.py b/stem/control.py index e48f6bcd..271a67ec 100644 --- a/stem/control.py +++ b/stem/control.py @@ -140,7 +140,6 @@ If you're fine with allowing your script to raise exceptions then this can be mo |- is_newnym_available - true if tor would currently accept a NEWNYM signal |- get_newnym_wait - seconds until tor would accept a NEWNYM signal |- get_effective_rate - provides our effective relaying rate limit - |- is_geoip_unavailable - true if we've discovered our geoip db to be unavailable |- map_address - maps one address to another such that connections to the original are replaced with the other +- drop_guards - drops our set of guard relays and picks a new set
@@ -374,6 +373,7 @@ CACHEABLE_GETINFO_PARAMS = ( 'config/names', 'config/defaults', 'info/names', + 'ip-to-country/ipv4-available', 'events/names', 'features/names', 'process/descriptor-limit', @@ -1042,7 +1042,6 @@ class Controller(BaseController): self._event_listeners = {} self._event_listeners_lock = threading.RLock() self._enabled_features = [] - self._is_geoip_unavailable = None
self._last_address_exc = None self._last_fingerprint_exc = None @@ -1158,7 +1157,7 @@ class Controller(BaseController): params = set(params)
for param in params: - if param.startswith('ip-to-country/') and param != 'ip-to-country/0.0.0.0' and self.is_geoip_unavailable(): + if param.startswith('ip-to-country/') and param != 'ip-to-country/0.0.0.0' and self.get_info('ip-to-country/ipv4-available', '0') != '1': raise stem.ProtocolError('Tor geoip database is unavailable') elif param == 'address' and self._last_address_exc: raise self._last_address_exc # we already know we can't resolve an address @@ -1480,25 +1479,6 @@ class Controller(BaseController): write_limit = used_written + left_written, )
- def get_socks_listeners(self, default = UNDEFINED): - """ - Provides the SOCKS **(address, port)** tuples that tor has open. - - .. deprecated:: 1.2.0 - Use :func:`~stem.control.Controller.get_listeners` with - **Listener.SOCKS** instead. - - :param object default: response if the query fails - - :returns: list of **(address, port)** tuples for the available SOCKS - listeners - - :raises: :class:`stem.ControllerError` if unable to determine the listeners - and no default was provided - """ - - return self.get_listeners(Listener.SOCKS, default) - @with_default() def get_protocolinfo(self, default = UNDEFINED): """ @@ -3329,7 +3309,6 @@ class Controller(BaseController): with self._cache_lock: self._request_cache = {} self._last_newnym = 0.0 - self._is_geoip_unavailable = None
def load_conf(self, configtext): """ @@ -3849,37 +3828,6 @@ class Controller(BaseController):
return value
- def is_geoip_unavailable(self): - """ - Provides **True** if tor's geoip database is unavailable, **False** - otherwise. - - .. versionchanged:: 1.6.0 - No longer requires previously failed GETINFO requests to determine this. - - .. deprecated:: 1.6.0 - This is available as of Tor 0.3.2.1 through the following instead... - - :: - - controller.get_info('ip-to-country/ipv4-available', 0) == '1' - - :returns: **bool** indicating if we've determined tor's geoip database to - be unavailable or not - """ - - if self._is_geoip_unavailable is None: - try: - self.get_info('ip-to-country/0.0.0.0') - self._is_geoip_unavailable = False - except stem.ControllerError as exc: - if 'GeoIP data not loaded' in str(exc): - self._is_geoip_unavailable = True - else: - return False # unexpected issue, fail open and don't cache - - return self._is_geoip_unavailable - def map_address(self, mapping): """ Map addresses to replacement addresses. Tor replaces subseqent connections diff --git a/test/integ/control/controller.py b/test/integ/control/controller.py index 6903c65b..7113ea67 100644 --- a/test/integ/control/controller.py +++ b/test/integ/control/controller.py @@ -952,15 +952,6 @@ class TestController(unittest.TestCase): self.assertEqual([], controller.get_listeners(Listener.CONTROL))
@test.require.controller - def test_get_socks_listeners(self): - """ - Test Controller.get_socks_listeners against a running tor instance. - """ - - with test.runner.get_runner().get_tor_controller() as controller: - self.assertEqual([('127.0.0.1', 1112)], controller.get_socks_listeners()) - - @test.require.controller @test.require.online @test.require.version(stem.version.Version('0.1.2.2-alpha')) def test_enable_feature(self): diff --git a/test/unit/control/controller.py b/test/unit/control/controller.py index 34429f49..1ba3001a 100644 --- a/test/unit/control/controller.py +++ b/test/unit/control/controller.py @@ -265,116 +265,6 @@ class TestControl(unittest.TestCase): self.assertEqual([], self.controller.get_ports(Listener.CONTROL))
@patch('stem.control.Controller.get_info') - @patch('stem.control.Controller.get_conf') - def test_get_socks_listeners_old(self, get_conf_mock, get_info_mock): - """ - Exercises the get_socks_listeners() method as though talking to an old tor - instance. - """ - - # An old tor raises stem.InvalidArguments for get_info about socks, but - # get_socks_listeners should work anyway. - - get_info_mock.side_effect = InvalidArguments - - get_conf_mock.side_effect = lambda param, **kwargs: { - 'SocksPort': '9050', - 'SocksListenAddress': ['127.0.0.1'], - }[param] - - self.assertEqual([('127.0.0.1', 9050)], self.controller.get_socks_listeners()) - self.controller.clear_cache() - - # Again, an old tor, but SocksListenAddress overrides the port number. - - get_conf_mock.side_effect = lambda param, **kwargs: { - 'SocksPort': '9050', - 'SocksListenAddress': ['127.0.0.1:1112'], - }[param] - - self.assertEqual([('127.0.0.1', 1112)], self.controller.get_socks_listeners()) - self.controller.clear_cache() - - # Again, an old tor, but multiple listeners - - get_conf_mock.side_effect = lambda param, **kwargs: { - 'SocksPort': '9050', - 'SocksListenAddress': ['127.0.0.1:1112', '127.0.0.1:1114'], - }[param] - - self.assertEqual([('127.0.0.1', 1112), ('127.0.0.1', 1114)], self.controller.get_socks_listeners()) - self.controller.clear_cache() - - # Again, an old tor, but no SOCKS listeners - - get_conf_mock.side_effect = lambda param, **kwargs: { - 'SocksPort': '0', - 'SocksListenAddress': [], - }[param] - - self.assertEqual([], self.controller.get_socks_listeners()) - self.controller.clear_cache() - - # Where tor provides invalid ports or addresses - - get_conf_mock.side_effect = lambda param, **kwargs: { - 'SocksPort': 'blarg', - 'SocksListenAddress': ['127.0.0.1'], - }[param] - - self.assertRaises(stem.ProtocolError, self.controller.get_socks_listeners) - - get_conf_mock.side_effect = lambda param, **kwargs: { - 'SocksPort': '0', - 'SocksListenAddress': ['127.0.0.1:abc'], - }[param] - - self.assertRaises(stem.ProtocolError, self.controller.get_socks_listeners) - - get_conf_mock.side_effect = lambda param, **kwargs: { - 'SocksPort': '40', - 'SocksListenAddress': ['500.0.0.1'], - }[param] - - self.assertRaises(stem.ProtocolError, self.controller.get_socks_listeners) - - @patch('stem.control.Controller.get_info') - def test_get_socks_listeners_new(self, get_info_mock): - """ - Exercises the get_socks_listeners() method as if talking to a newer tor - instance. - """ - - # multiple SOCKS listeners - - get_info_mock.return_value = '"127.0.0.1:1112" "127.0.0.1:1114"' - - self.assertEqual( - [('127.0.0.1', 1112), ('127.0.0.1', 1114)], - self.controller.get_socks_listeners() - ) - - # no SOCKS listeners - - self.controller.clear_cache() - get_info_mock.return_value = '' - self.assertEqual([], self.controller.get_socks_listeners()) - - # check where GETINFO provides malformed content - - invalid_responses = ( - '"127.0.0.1"', # address only - '"1112"', # port only - '"5127.0.0.1:1112"', # invlaid address - '"127.0.0.1:991112"', # invalid port - ) - - for response in invalid_responses: - self.controller.clear_cache() - get_info_mock.return_value = response - self.assertRaises(stem.ProtocolError, self.controller.get_socks_listeners) - - @patch('stem.control.Controller.get_info') @patch('time.time', Mock(return_value = 1410723598.276578)) def test_get_accounting_stats(self, get_info_mock): """
tor-commits@lists.torproject.org