[sbws/master] stem: refactor, move setting runtime torrc options

commit 1d836ec5b67fdac0f43de383267dc6ac28265cf8 Author: juga0 <juga@riseup.net> Date: Fri Dec 7 10:18:37 2018 +0000 stem: refactor, move setting runtime torrc options to a function. Replace comment by docstring. Add an integration test to check the option is set. --- sbws/globals.py | 5 +++++ sbws/util/stem.py | 32 ++++++++++++++++++++------------ tests/integration/util/test_stem.py | 6 ++++++ 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/sbws/globals.py b/sbws/globals.py index 60e56f5..c6adc44 100644 --- a/sbws/globals.py +++ b/sbws/globals.py @@ -33,6 +33,11 @@ TORRC_STARTING_POINT = { 'ProtocolWarnings': '1', } +TORRC_RUNTIME_OPTIONS = { + '__DisablePredictedCircuits': '1', + '__LeaveStreamsUnattached': '1', +} + PKG_DIR = os.path.abspath(os.path.dirname(__file__)) DEFAULT_CONFIG_PATH = os.path.join(PKG_DIR, 'config.default.ini') DEFAULT_LOG_CONFIG_PATH = os.path.join(PKG_DIR, 'config.log.default.ini') diff --git a/sbws/util/stem.py b/sbws/util/stem.py index 9b3dc0d..ead812b 100644 --- a/sbws/util/stem.py +++ b/sbws/util/stem.py @@ -12,7 +12,7 @@ import copy import logging import os from sbws.globals import fail_hard -from sbws.globals import TORRC_STARTING_POINT +from sbws.globals import TORRC_STARTING_POINT, TORRC_RUNTIME_OPTIONS log = logging.getLogger(__name__) stream_building_lock = RLock() @@ -74,8 +74,12 @@ def init_controller(port=None, path=None, set_custom_stream_settings=True): return None, 'Unable to reach tor on control socket' assert c is not None if set_custom_stream_settings: - c.set_conf('__DisablePredictedCircuits', '1') - c.set_conf('__LeaveStreamsUnattached', '1') + # These options are also set in launch_tor. + # In a future refactor they could be set in the case they are not + # already in the running instance. This way the controller_port + # could also be used. + set_torrc_options_can_fail(c) + set_torrc_runtime_options(c) return c, '' @@ -165,6 +169,16 @@ def parse_user_torrc_config(torrc, torrc_text): return torrc_dict +def set_torrc_runtime_options(controller): + """Set torrc options at runtime.""" + try: + controller.set_options(TORRC_RUNTIME_OPTIONS) + except (ControllerError, InvalidArguments, InvalidRequest) as e: + log.exception("Error trying to launch tor: %s. " + "Maybe the tor directory is being used by other " + "sbws instance?", e) + exit(1) + def launch_tor(conf): assert isinstance(conf, ConfigParser) os.makedirs(conf.getpath('tor', 'datadir'), mode=0o700, exist_ok=True) @@ -197,15 +211,9 @@ def launch_tor(conf): fail_hard('Error trying to launch tor: %s', e) # And return a controller to it cont = _init_controller_socket(conf.getpath('tor', 'control_socket')) - # Because we build things by hand and can't set these before Tor bootstraps - try: - cont.set_conf('__DisablePredictedCircuits', '1') - cont.set_conf('__LeaveStreamsUnattached', '1') - except (ControllerError, InvalidArguments, InvalidRequest) as e: - log.exception("Error trying to launch tor: %s. " - "Maybe the tor directory is being used by other " - "sbws instance?", e) - exit(1) + + set_torrc_runtime_options(cont) + log.info('Started and connected to Tor %s via %s', cont.get_version(), conf.getpath('tor', 'control_socket')) return cont diff --git a/tests/integration/util/test_stem.py b/tests/integration/util/test_stem.py index 291f485..33fee81 100644 --- a/tests/integration/util/test_stem.py +++ b/tests/integration/util/test_stem.py @@ -4,3 +4,9 @@ import sbws.util.stem as stem_utils def test_launch_and_okay(persistent_launch_tor): cont = persistent_launch_tor assert stem_utils.is_bootstrapped(cont) + + +def test_set_torrc_runtime_option_succesful(persistent_launch_tor): + controller = persistent_launch_tor + runtime_options = controller.get_conf_map(['__LeaveStreamsUnattached']) + assert runtime_options == {'__LeaveStreamsUnattached': ['1']}
participants (1)
-
juga@torproject.org