Opened at 2021-07-05T00:41:12Z
Closed at 2021-07-05T17:27:13Z
#3744 closed defect (fixed)
integration/test_tor.py::test_onion_service_storage fails on macOS and Python 2.7
Reported by: | sajith | Owned by: | |
---|---|---|---|
Priority: | normal | Milestone: | undecided |
Component: | dev-infrastructure | Version: | n/a |
Keywords: | Cc: | ||
Launchpad Bug: |
Description
See https://github.com/tahoe-lafs/tahoe-lafs/runs/2915192820, for example.
This looks like a combination of a new tor version on Homebrew 0.4.6.6, Python 2.7, and macOS. I could not reproduce the error locally on macOS using tor 0.4.5.8, until I upgraded it to 0.4.6.6.
Error log from CI:
2021-06-25T15:14:01.0673620Z ==================================== ERRORS ==================================== 2021-06-25T15:14:01.0674530Z _________________ ERROR at setup of test_onion_service_storage _________________ 2021-06-25T15:14:01.0676040Z 2021-06-25T15:14:01.0677570Z reactor = <twisted.internet.selectreactor.SelectReactor object at 0x1090dd910> 2021-06-25T15:14:01.0700780Z temp_dir = '/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf' 2021-06-25T15:14:01.0702470Z chutney = '/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney' 2021-06-25T15:14:01.0704090Z request = <SubRequest 'tor_network' for <Function test_onion_service_storage>> 2021-06-25T15:14:01.0704980Z 2021-06-25T15:14:01.0706110Z @pytest.fixture(scope='session') 2021-06-25T15:14:01.0707550Z @pytest.mark.skipif(sys.platform.startswith('win'), 2021-06-25T15:14:01.0710380Z reason='Tor tests are unstable on Windows') 2021-06-25T15:14:01.0712210Z def tor_network(reactor, temp_dir, chutney, request): 2021-06-25T15:14:01.0713060Z 2021-06-25T15:14:01.0714430Z # this is the actual "chutney" script at the root of a chutney checkout 2021-06-25T15:14:01.0716090Z chutney_dir = chutney 2021-06-25T15:14:01.0717540Z chut = join(chutney_dir, 'chutney') 2021-06-25T15:14:01.0718340Z 2021-06-25T15:14:01.0728220Z # now, as per Chutney's README, we have to create the network 2021-06-25T15:14:01.0730120Z # ./chutney configure networks/basic 2021-06-25T15:14:01.0735630Z # ./chutney start networks/basic 2021-06-25T15:14:01.0736350Z 2021-06-25T15:14:01.0737040Z env = environ.copy() 2021-06-25T15:14:01.0737940Z env.update({"PYTHONPATH": join(chutney_dir, "lib")}) 2021-06-25T15:14:01.0738890Z proto = _DumpOutputProtocol(None) 2021-06-25T15:14:01.0739770Z reactor.spawnProcess( 2021-06-25T15:14:01.0740580Z proto, 2021-06-25T15:14:01.0741320Z sys.executable, 2021-06-25T15:14:01.0742010Z ( 2021-06-25T15:14:01.0743600Z sys.executable, '-m', 'chutney.TorNet', 'configure', 2021-06-25T15:14:01.0744980Z join(chutney_dir, 'networks', 'basic'), 2021-06-25T15:14:01.0745750Z ), 2021-06-25T15:14:01.0746480Z path=join(chutney_dir), 2021-06-25T15:14:01.0747330Z env=env, 2021-06-25T15:14:01.0748040Z ) 2021-06-25T15:14:01.0748900Z > pytest_twisted.blockon(proto.done) 2021-06-25T15:14:01.0749550Z 2021-06-25T15:14:01.0750300Z integration/conftest.py:504: 2021-06-25T15:14:01.0751040Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2021-06-25T15:14:01.0752440Z .tox/integration/lib/python2.7/site-packages/pytest_twisted.py:76: in blockon 2021-06-25T15:14:01.0753610Z return blockon_default(d) 2021-06-25T15:14:01.0754350Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 2021-06-25T15:14:01.0754930Z 2021-06-25T15:14:01.0756610Z d = <Deferred at 0x10b3002d0 current result: <twisted.python.failure.Failure twisted.internet.error.ProcessTerminated: A process has ended with a probable error condition: process ended with exit code 1.>> 2021-06-25T15:14:01.0758360Z 2021-06-25T15:14:01.0759190Z def blockon_default(d): 2021-06-25T15:14:01.0760050Z current = greenlet.getcurrent() 2021-06-25T15:14:01.0760840Z assert ( 2021-06-25T15:14:01.0761640Z current is not _instances.gr_twisted 2021-06-25T15:14:01.0762790Z ), "blockon cannot be called from the twisted greenlet" 2021-06-25T15:14:01.0763580Z result = [] 2021-06-25T15:14:01.0764230Z 2021-06-25T15:14:01.0764880Z def cb(r): 2021-06-25T15:14:01.0765650Z result.append(r) 2021-06-25T15:14:01.0766620Z if greenlet.getcurrent() is not current: 2021-06-25T15:14:01.0767550Z current.switch(result) 2021-06-25T15:14:01.0768250Z 2021-06-25T15:14:01.0768980Z d.addCallbacks(cb, cb) 2021-06-25T15:14:01.0769760Z if not result: 2021-06-25T15:14:01.0770610Z _result = _instances.gr_twisted.switch() 2021-06-25T15:14:01.0771600Z assert _result is result, "illegal switch in blockon" 2021-06-25T15:14:01.0772390Z 2021-06-25T15:14:01.0773150Z if isinstance(result[0], failure.Failure): 2021-06-25T15:14:01.0774060Z > result[0].raiseException() 2021-06-25T15:14:01.0775200Z E ProcessTerminated: A process has ended with a probable error condition: process ended with exit code 1. 2021-06-25T15:14:01.0776100Z 2021-06-25T15:14:01.0777660Z .tox/integration/lib/python2.7/site-packages/pytest_twisted.py:97: ProcessTerminated 2021-06-25T15:14:01.0779460Z ---------------------------- Captured stdout setup ----------------------------- 2021-06-25T15:14:01.0781070Z Cloning into '/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney'... 2021-06-25T15:14:01.0783580Z HEAD is now at 99bd06c Merge remote-tracking branch 'tor-github/pr/66' 2021-06-25T15:14:01.0786070Z NOTE: creating u'/private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/net/nodes.1624634026', linking to u'/private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/net/nodes' 2021-06-25T15:14:01.0788150Z Creating identity key for test000a with tor-gencert 2021-06-25T15:14:01.0789680Z Creating identity key for test001a with tor-gencert 2021-06-25T15:14:01.0791210Z Creating identity key for test002a with tor-gencert 2021-06-25T15:14:01.0792710Z <type 'exceptions.AssertionError'> 2021-06-25T15:14:01.0794390Z Python 2.7.18: /Users/runner/work/tahoe-lafs/tahoe-lafs/.tox/integration/bin/python 2021-06-25T15:14:01.0795470Z Fri Jun 25 15:13:49 2021 2021-06-25T15:14:01.0796130Z 2021-06-25T15:14:01.0797060Z A problem occurred in a Python script. Here is the sequence of 2021-06-25T15:14:01.0798200Z function calls leading up to the error, in the order they occurred. 2021-06-25T15:14:01.0799230Z 2021-06-25T15:14:01.0800930Z /Users/runner/hostedtoolcache/Python/2.7.18/x64/lib/python2.7/runpy.py in _run_module_as_main(mod_name='chutney.TorNet', alter_argv=1) 2021-06-25T15:14:01.0802180Z 172 sys.argv[0] = fname 2021-06-25T15:14:01.0803140Z 173 return _run_code(code, main_globals, None, 2021-06-25T15:14:01.0804140Z 174 "__main__", fname, loader, pkg_name) 2021-06-25T15:14:01.0804950Z 175 2021-06-25T15:14:01.0805860Z 176 def run_module(mod_name, init_globals=None, 2021-06-25T15:14:01.0807540Z fname = '/private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/lib/chutney/TorNet.py' 2021-06-25T15:14:01.0808850Z loader = <pkgutil.ImpLoader instance> 2021-06-25T15:14:01.0810220Z pkg_name = 'chutney' 2021-06-25T15:14:01.0810940Z 2021-06-25T15:14:01.0817100Z /Users/runner/hostedtoolcache/Python/2.7.18/x64/lib/python2.7/runpy.py in _run_code(code=<code object <module> at 0x10cdb9830, file "/pri...oeK4n4lf/chutney/lib/chutney/TorNet.py", line 11>, run_globals={'ConfigureNodes': <function ConfigureNodes>, 'DEFAULTS': {u'CUR_BOOTSTRAP_PHASE': 1, u'CUR_CONFIG_PHASE': 1, u'CUR_LAUNCH_PHASE': 1, u'auth_cert_lifetime': 12, u'authorities': u'AlternateDirAuthority bleargh bad torrc file!', u'authority': False, u'bootstrap_time': 60, u'bridge': False, u'bridgeauthority': False, u'bridges': u'Bridge bleargh bad torrc file!', ...}, 'KNOWN_REQUIREMENTS': {u'IPV6': <function memoized_fn>}, 'LocalNodeBuilder': <class '__main__.LocalNodeBuilder'>, 'LocalNodeController': <class '__main__.LocalNodeController'>, 'MissingBinaryException': <class '__main__.MissingBinaryException'>, 'Network': <class '__main__.Network'>, 'Node': <class '__main__.Node'>, 'NodeBuilder': <class '__main__.NodeBuilder'>, 'NodeController': <class '__main__.NodeController'>, ...}, init_globals=None, mod_name='__main__', mod_fname='/private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/lib/chutney/TorNet.py', mod_loader=<pkgutil.ImpLoader instance>, pkg_name='chutney') 2021-06-25T15:14:01.0822690Z 70 __loader__ = mod_loader, 2021-06-25T15:14:01.0823740Z 71 __package__ = pkg_name) 2021-06-25T15:14:01.0824700Z 72 exec code in run_globals 2021-06-25T15:14:01.0825610Z 73 return run_globals 2021-06-25T15:14:01.0826380Z 74 2021-06-25T15:14:01.0827450Z code = <code object <module> at 0x10cdb9830, file "/pri...oeK4n4lf/chutney/lib/chutney/TorNet.py", line 11> 2021-06-25T15:14:01.0833100Z run_globals = {'ConfigureNodes': <function ConfigureNodes>, 'DEFAULTS': {u'CUR_BOOTSTRAP_PHASE': 1, u'CUR_CONFIG_PHASE': 1, u'CUR_LAUNCH_PHASE': 1, u'auth_cert_lifetime': 12, u'authorities': u'AlternateDirAuthority bleargh bad torrc file!', u'authority': False, u'bootstrap_time': 60, u'bridge': False, u'bridgeauthority': False, u'bridges': u'Bridge bleargh bad torrc file!', ...}, 'KNOWN_REQUIREMENTS': {u'IPV6': <function memoized_fn>}, 'LocalNodeBuilder': <class '__main__.LocalNodeBuilder'>, 'LocalNodeController': <class '__main__.LocalNodeController'>, 'MissingBinaryException': <class '__main__.MissingBinaryException'>, 'Network': <class '__main__.Network'>, 'Node': <class '__main__.Node'>, 'NodeBuilder': <class '__main__.NodeBuilder'>, 'NodeController': <class '__main__.NodeController'>, ...} 2021-06-25T15:14:01.0836480Z 2021-06-25T15:14:01.0837590Z /private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/lib/chutney/TorNet.py in <module>() 2021-06-25T15:14:01.0839170Z 2733 return -1 2021-06-25T15:14:01.0840930Z 2734 return 0 2021-06-25T15:14:01.0841660Z 2735 2021-06-25T15:14:01.0844740Z 2736 if __name__ == '__main__': 2021-06-25T15:14:01.0845670Z 2737 sys.exit(main()) 2021-06-25T15:14:01.0846940Z sys = <module 'sys' (built-in)> 2021-06-25T15:14:01.0848160Z sys.exit = <built-in function exit> 2021-06-25T15:14:01.0849180Z main = <function main> 2021-06-25T15:14:01.0849740Z 2021-06-25T15:14:01.0850790Z /private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/lib/chutney/TorNet.py in main() 2021-06-25T15:14:01.0852100Z 2729 args = parseArgs() 2021-06-25T15:14:01.0853410Z 2730 f = open(args['network_cfg']) 2021-06-25T15:14:01.0854730Z 2731 result = runConfigFile(args['action'], f.read()) 2021-06-25T15:14:01.0855570Z 2732 if result is False: 2021-06-25T15:14:01.0856640Z 2733 return -1 2021-06-25T15:14:01.0857400Z result undefined 2021-06-25T15:14:01.0858220Z global runConfigFile = <function runConfigFile> 2021-06-25T15:14:01.0860070Z args = {u'action': 'configure', u'network_cfg': '/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/networks/basic'} 2021-06-25T15:14:01.0861860Z f = <open file '/var/folders/24/8k48jl6d249_n_qfxwsl.../T/tahoeK4n4lf/chutney/networks/basic', mode 'r'> 2021-06-25T15:14:01.0863320Z f.read = <built-in method read of file object> 2021-06-25T15:14:01.0863990Z 2021-06-25T15:14:01.0865950Z /private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/lib/chutney/TorNet.py in runConfigFile(verb='configure', data='# By default, Authorities are not configured as ....getN(5) + Client.getN(2)\n\nConfigureNodes(NODES)\n') 2021-06-25T15:14:01.0868570Z 2709 return 2021-06-25T15:14:01.0869690Z 2710 2021-06-25T15:14:01.0870510Z 2711 return getattr(network, verb)() 2021-06-25T15:14:01.0871210Z 2712 2021-06-25T15:14:01.0871850Z 2713 2021-06-25T15:14:01.0873140Z builtingetattr = <built-in function getattr> 2021-06-25T15:14:01.0874060Z network = <__main__.Network object> 2021-06-25T15:14:01.0875220Z verb = 'configure' 2021-06-25T15:14:01.0875830Z 2021-06-25T15:14:01.0876970Z /private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/lib/chutney/TorNet.py in configure(self=<__main__.Network object>) 2021-06-25T15:14:01.0878030Z 2323 2021-06-25T15:14:01.0878740Z 2324 for b in builders: 2021-06-25T15:14:01.0879500Z 2325 b.config(network) 2021-06-25T15:14:01.0880160Z 2326 2021-06-25T15:14:01.0880880Z 2327 for b in builders: 2021-06-25T15:14:01.0881710Z b = <__main__.LocalNodeBuilder object> 2021-06-25T15:14:01.0882820Z b.config = <bound method LocalNodeBuilder.config of <__main__.LocalNodeBuilder object>> 2021-06-25T15:14:01.0883930Z network = <__main__.Network object> 2021-06-25T15:14:01.0884530Z 2021-06-25T15:14:01.0885760Z /private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/lib/chutney/TorNet.py in config(self=<__main__.LocalNodeBuilder object>, net=<__main__.Network object>) 2021-06-25T15:14:01.0887030Z 691 def config(self, net): 2021-06-25T15:14:01.0888220Z 692 """Called to configure a node: creates a torrc file for it.""" 2021-06-25T15:14:01.0888920Z 693 self._createTorrcFile() 2021-06-25T15:14:01.0889480Z 694 # self._createScripts() 2021-06-25T15:14:01.0889950Z 695 2021-06-25T15:14:01.0890450Z self = <__main__.LocalNodeBuilder object> 2021-06-25T15:14:01.0892020Z self._createTorrcFile = <bound method LocalNodeBuilder._createTorrcFile of <__main__.LocalNodeBuilder object>> 2021-06-25T15:14:01.0893480Z 2021-06-25T15:14:01.0895380Z /private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/lib/chutney/TorNet.py in _createTorrcFile(self=<__main__.LocalNodeBuilder object>, checkOnly=False) 2021-06-25T15:14:01.0897370Z 628 # the options that the current tor binary doesn't support 2021-06-25T15:14:01.0898660Z 629 tor = self._env['tor'] 2021-06-25T15:14:01.0899280Z 630 tor_version = get_tor_version(tor) 2021-06-25T15:14:01.0899850Z 631 torrc_opts = get_torrc_options(tor) 2021-06-25T15:14:01.0900480Z 632 # check if each option is supported before writing it 2021-06-25T15:14:01.0901030Z tor_version undefined 2021-06-25T15:14:01.0901580Z global get_tor_version = <function memoized_fn> 2021-06-25T15:14:01.0902470Z tor = u'tor' 2021-06-25T15:14:01.0902700Z 2021-06-25T15:14:01.0903890Z /var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/lib/chutney/Util.py in memoized_fn(*args=(u'tor',), **kwargs={}) 2021-06-25T15:14:01.0904700Z 12 result = memory[key] 2021-06-25T15:14:01.0905160Z 13 except KeyError: 2021-06-25T15:14:01.0905660Z 14 result = memory[key] = fn(*args, **kwargs) 2021-06-25T15:14:01.0906170Z 15 return result 2021-06-25T15:14:01.0906580Z 16 return memoized_fn 2021-06-25T15:14:01.0907400Z result undefined 2021-06-25T15:14:01.0907800Z memory = {} 2021-06-25T15:14:01.0908680Z key = ((u'tor',), ()) 2021-06-25T15:14:01.0909340Z fn = <function get_tor_version> 2021-06-25T15:14:01.0910120Z args = (u'tor',) 2021-06-25T15:14:01.0910540Z kwargs = {} 2021-06-25T15:14:01.0910790Z 2021-06-25T15:14:01.0912000Z /private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/lib/chutney/TorNet.py in get_tor_version(tor=u'tor') 2021-06-25T15:14:01.0912880Z 353 tor_version = tor_version.replace(").", ")") 2021-06-25T15:14:01.0913530Z 354 # check we received a tor version, and nothing else 2021-06-25T15:14:01.0914530Z 355 assert re.match(r'^[-+.() A-Za-z0-9]+$', tor_version) 2021-06-25T15:14:01.0914970Z 356 2021-06-25T15:14:01.0915370Z 357 return tor_version 2021-06-25T15:14:01.0916420Z global re = <module 're' from '/Users/runner/hostedtoolcache/Python/2.7.18/x64/lib/python2.7/re.pyc'> 2021-06-25T15:14:01.0917840Z re.match = <function match> 2021-06-25T15:14:01.0919050Z tor_version = u'Tor 0.4.6.5.\nTor is running on Darwin with Li...own N/A as libc.\nTor compiled with clang 12.0.0' 2021-06-25T15:14:01.0920190Z <type 'exceptions.AssertionError'>: 2021-06-25T15:14:01.0921270Z __class__ = <type 'exceptions.AssertionError'> 2021-06-25T15:14:01.0922520Z __delattr__ = <method-wrapper '__delattr__' of exceptions.AssertionError object> 2021-06-25T15:14:01.0923200Z __dict__ = {} 2021-06-25T15:14:01.0923930Z __doc__ = 'Assertion failed.' 2021-06-25T15:14:01.0925050Z __format__ = <built-in method __format__ of exceptions.AssertionError object> 2021-06-25T15:14:01.0926480Z __getattribute__ = <method-wrapper '__getattribute__' of exceptions.AssertionError object> 2021-06-25T15:14:01.0927940Z __getitem__ = <method-wrapper '__getitem__' of exceptions.AssertionError object> 2021-06-25T15:14:01.0929440Z __getslice__ = <method-wrapper '__getslice__' of exceptions.AssertionError object> 2021-06-25T15:14:01.0930840Z __hash__ = <method-wrapper '__hash__' of exceptions.AssertionError object> 2021-06-25T15:14:01.0932150Z __init__ = <method-wrapper '__init__' of exceptions.AssertionError object> 2021-06-25T15:14:01.0933230Z __new__ = <built-in method __new__ of type object> 2021-06-25T15:14:01.0934350Z __reduce__ = <built-in method __reduce__ of exceptions.AssertionError object> 2021-06-25T15:14:01.0935690Z __reduce_ex__ = <built-in method __reduce_ex__ of exceptions.AssertionError object> 2021-06-25T15:14:01.0937010Z __repr__ = <method-wrapper '__repr__' of exceptions.AssertionError object> 2021-06-25T15:14:01.0939120Z __setattr__ = <method-wrapper '__setattr__' of exceptions.AssertionError object> 2021-06-25T15:14:01.0941510Z __setstate__ = <built-in method __setstate__ of exceptions.AssertionError object> 2021-06-25T15:14:01.0944000Z __sizeof__ = <built-in method __sizeof__ of exceptions.AssertionError object> 2021-06-25T15:14:01.0945370Z __str__ = <method-wrapper '__str__' of exceptions.AssertionError object> 2021-06-25T15:14:01.0946580Z __subclasshook__ = <built-in method __subclasshook__ of type object> 2021-06-25T15:14:01.0947790Z __unicode__ = <built-in method __unicode__ of exceptions.AssertionError object> 2021-06-25T15:14:01.0948440Z args = () 2021-06-25T15:14:01.0949100Z message = '' 2021-06-25T15:14:01.0949350Z 2021-06-25T15:14:01.0949840Z The above is a description of an error in a Python program. Here is 2021-06-25T15:14:01.0950420Z the original traceback: 2021-06-25T15:14:01.0950700Z 2021-06-25T15:14:01.0951070Z Traceback (most recent call last): 2021-06-25T15:14:01.0953710Z File "/Users/runner/hostedtoolcache/Python/2.7.18/x64/lib/python2.7/runpy.py", line 174, in _run_module_as_main 2021-06-25T15:14:01.0954560Z "__main__", fname, loader, pkg_name) 2021-06-25T15:14:01.0955350Z File "/Users/runner/hostedtoolcache/Python/2.7.18/x64/lib/python2.7/runpy.py", line 72, in _run_code 2021-06-25T15:14:01.0956020Z exec code in run_globals 2021-06-25T15:14:01.0956830Z File "/private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/lib/chutney/TorNet.py", line 2737, in <module> 2021-06-25T15:14:01.0957570Z sys.exit(main()) 2021-06-25T15:14:01.0958330Z File "/private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/lib/chutney/TorNet.py", line 2731, in main 2021-06-25T15:14:01.0959660Z result = runConfigFile(args['action'], f.read()) 2021-06-25T15:14:01.0960610Z File "/private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/lib/chutney/TorNet.py", line 2711, in runConfigFile 2021-06-25T15:14:01.0961430Z return getattr(network, verb)() 2021-06-25T15:14:01.0962600Z File "/private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/lib/chutney/TorNet.py", line 2325, in configure 2021-06-25T15:14:01.0963680Z b.config(network) 2021-06-25T15:14:01.0964900Z File "/private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/lib/chutney/TorNet.py", line 693, in config 2021-06-25T15:14:01.0965740Z self._createTorrcFile() 2021-06-25T15:14:01.0966660Z File "/private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/lib/chutney/TorNet.py", line 630, in _createTorrcFile 2021-06-25T15:14:01.0967510Z tor_version = get_tor_version(tor) 2021-06-25T15:14:01.0968310Z File "/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/lib/chutney/Util.py", line 14, in memoized_fn 2021-06-25T15:14:01.0969090Z result = memory[key] = fn(*args, **kwargs) 2021-06-25T15:14:01.0969950Z File "/private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/tahoeK4n4lf/chutney/lib/chutney/TorNet.py", line 355, in get_tor_version 2021-06-25T15:14:01.0971440Z assert re.match(r'^[-+.() A-Za-z0-9]+$', tor_version) 2021-06-25T15:14:01.0972250Z AssertionError
Change History (3)
comment:1 Changed at 2021-07-05T01:04:58Z by sajith
comment:2 Changed at 2021-07-05T13:33:50Z by sajith
I could switch to the last known-to-work version of Tor from Homebrew this way:
$ brew extract --version 0.4.5.8 tor homebrew/cask $ brew install tor@0.4.5.8 $ brew link --overwrite tor@0.4.5.8
To test, I checked out chutney commit 99bd06c7554b9113af8c0877b6eca4ceb95dcbaa, which is the last known chutney known to work with Python 2.7:
$ git clone https://git.torproject.org/chutney.git Cloning into 'chutney'... remote: Enumerating objects: 1696, done. remote: Counting objects: 100% (1696/1696), done. remote: Compressing objects: 100% (1451/1451), done. remote: Total 3010 (delta 1056), reused 111 (delta 73) Receiving objects: 100% (3010/3010), 697.42 KiB | 2.17 MiB/s, done. Resolving deltas: 100% (1874/1874), done. $ cd chutney; git reset --hard 99bd06c7554b9113af8c0877b6eca4ceb95dcbaa HEAD is now at 99bd06c Merge remote-tracking branch 'tor-github/pr/66' $ export PYTHONPATH=$PYTHONPATH:`pwd`/lib
Now chutney's configure command works the way it should:
$ python2.7 -m chutney.TorNet configure `pwd`/networks/basic NOTE: creating u'/Users/sajith/chutney/net/nodes.1625491797', linking to u'/Users/sajith/chutney/net/nodes' Creating identity key for test000a with tor-gencert Creating identity key for test001a with tor-gencert Creating identity key for test002a with tor-gencert
Made a pull request: https://github.com/tahoe-lafs/tahoe-lafs/pull/1092.
comment:3 Changed at 2021-07-05T17:27:13Z by sajith
- Resolution set to fixed
- Status changed from new to closed
Pretty sure this is because of Tor 0.4.6.6.
Get the specific revision of chutney:
Run chutney configure command, which fails (this example shows Python 2.7, but it will also fail with Python 3):