tahoe-lafs/src/allmydata/test/test_client.py

1465 lines
51 KiB
Python
Raw Normal View History

import os, sys
2019-06-26 19:48:54 +00:00
from functools import (
partial,
)
import twisted
2019-06-12 20:47:25 +00:00
from yaml import (
safe_dump,
)
from fixtures import (
Fixture,
2019-06-13 15:58:14 +00:00
TempDir,
)
from hypothesis import (
given,
)
from hypothesis.strategies import (
sampled_from,
booleans,
)
2019-06-13 15:58:14 +00:00
from eliot.testing import (
capture_logging,
assertHasAction,
)
2006-11-30 23:23:01 +00:00
from twisted.trial import unittest
from twisted.application import service
from twisted.internet import defer
2019-06-12 20:47:25 +00:00
from twisted.python.filepath import (
FilePath,
)
from testtools.matchers import (
Equals,
AfterPreprocessing,
MatchesListwise,
MatchesDict,
Always,
Is,
raises,
2019-06-12 20:47:25 +00:00
)
from testtools.twistedsupport import (
succeeded,
failed,
2019-06-12 20:47:25 +00:00
)
2006-11-30 23:23:01 +00:00
import allmydata
import allmydata.util.log
from allmydata.nodemaker import (
NodeMaker,
)
2020-10-30 18:35:09 +00:00
from allmydata.node import OldConfigError, UnescapedHashError, create_node_dir
from allmydata import client
from allmydata.storage_client import (
StorageClientConfig,
StorageFarmBroker,
)
from allmydata.util import (
base32,
fileutil,
encodingutil,
configutil,
)
from allmydata.util.fileutil import abspath_expanduser_unicode
from allmydata.interfaces import IFilesystemNode, IFileNode, \
IImmutableFileNode, IMutableFileNode, IDirectoryNode
from allmydata.scripts.common import (
write_introducer,
)
from foolscap.api import flushEventualQueue
2010-02-26 08:14:33 +00:00
import allmydata.test.common_util as testutil
from .common import (
2019-08-19 20:09:26 +00:00
EMPTY_CLIENT_CONFIG,
2019-06-12 20:47:25 +00:00
SyncTestCase,
AsyncBrokenTestCase,
UseTestPlugins,
MemoryIntroducerClient,
get_published_announcements,
2019-06-12 20:47:25 +00:00
)
from .matchers import (
MatchesSameElements,
matches_storage_announcement,
matches_furl,
)
from .strategies import (
write_capabilities,
)
SOME_FURL = "pb://abcde@nowhere/fake"
BASECONFIG = "[client]\n"
2020-07-09 17:48:33 +00:00
class Basic(testutil.ReallyEqualMixin, unittest.TestCase):
2006-12-01 03:18:51 +00:00
def test_loadable(self):
basedir = "test_client.Basic.test_loadable"
os.mkdir(basedir)
fileutil.write(os.path.join(basedir, "tahoe.cfg"), \
BASECONFIG)
return client.create_client(basedir)
@defer.inlineCallbacks
def test_unreadable_introducers(self):
"""
2018-09-06 18:33:10 +00:00
The Deferred from create_client fails when
private/introducers.yaml is unreadable (but exists)
"""
basedir = "test_client.Basic.test_unreadable_introduers"
os.mkdir(basedir, 0o700)
os.mkdir(os.path.join(basedir, 'private'), 0o700)
intro_fname = os.path.join(basedir, 'private', 'introducers.yaml')
with open(intro_fname, 'w') as f:
f.write("---\n")
os.chmod(intro_fname, 0o000)
2018-09-07 16:42:41 +00:00
self.addCleanup(lambda: os.chmod(intro_fname, 0o700))
with self.assertRaises(EnvironmentError):
yield client.create_client(basedir)
@defer.inlineCallbacks
def test_comment(self):
2018-08-29 22:44:12 +00:00
"""
2020-10-30 17:59:57 +00:00
A comment character (#) in a furl results in an
2018-09-06 18:33:49 +00:00
UnescapedHashError Failure.
2018-08-29 22:44:12 +00:00
"""
2020-10-30 17:59:57 +00:00
should_fail = [r"test#test", r"#testtest", r"test\\#test", r"test\#test",
r"test\\\#test"]
basedir = "test_client.Basic.test_comment"
os.mkdir(basedir)
def write_config(s):
config = ("[client]\n"
"helper.furl = %s\n" % s)
fileutil.write(os.path.join(basedir, "tahoe.cfg"), config)
for s in should_fail:
write_config(s)
with self.assertRaises(UnescapedHashError) as ctx:
yield client.create_client(basedir)
self.assertIn("[client]helper.furl", str(ctx.exception))
2016-08-28 09:29:50 +00:00
def test_unreadable_config(self):
if sys.platform == "win32":
# if somebody knows a clever way to do this (cause
# EnvironmentError when reading a file that really exists), on
# windows, please fix this
raise unittest.SkipTest("can't make unreadable files on windows")
basedir = "test_client.Basic.test_unreadable_config"
os.mkdir(basedir)
fn = os.path.join(basedir, "tahoe.cfg")
fileutil.write(fn, BASECONFIG)
old_mode = os.stat(fn).st_mode
os.chmod(fn, 0)
try:
2018-05-29 21:52:09 +00:00
e = self.assertRaises(
EnvironmentError,
client.read_config,
2018-05-29 21:52:09 +00:00
basedir,
"client.port",
)
2016-08-28 09:29:50 +00:00
self.assertIn("Permission denied", str(e))
finally:
# don't leave undeleteable junk lying around
os.chmod(fn, old_mode)
def test_error_on_old_config_files(self):
basedir = "test_client.Basic.test_error_on_old_config_files"
os.mkdir(basedir)
fileutil.write(os.path.join(basedir, "tahoe.cfg"),
BASECONFIG +
"[storage]\n" +
"enabled = false\n" +
"reserved_space = bogus\n")
fileutil.write(os.path.join(basedir, "introducer.furl"), "")
fileutil.write(os.path.join(basedir, "no_storage"), "")
fileutil.write(os.path.join(basedir, "readonly_storage"), "")
fileutil.write(os.path.join(basedir, "debug_discard_storage"), "")
logged_messages = []
self.patch(twisted.python.log, 'msg', logged_messages.append)
2018-05-29 21:52:09 +00:00
e = self.failUnlessRaises(
OldConfigError,
client.read_config,
2018-05-29 21:52:09 +00:00
basedir,
"client.port",
)
abs_basedir = fileutil.abspath_expanduser_unicode(unicode(basedir)).encode(sys.getfilesystemencoding())
self.failUnlessIn(os.path.join(abs_basedir, "introducer.furl"), e.args[0])
self.failUnlessIn(os.path.join(abs_basedir, "no_storage"), e.args[0])
self.failUnlessIn(os.path.join(abs_basedir, "readonly_storage"), e.args[0])
self.failUnlessIn(os.path.join(abs_basedir, "debug_discard_storage"), e.args[0])
for oldfile in ['introducer.furl', 'no_storage', 'readonly_storage',
'debug_discard_storage']:
logged = [ m for m in logged_messages if
("Found pre-Tahoe-LAFS-v1.3 configuration file" in str(m) and oldfile in str(m)) ]
self.failUnless(logged, (oldfile, logged_messages))
for oldfile in [
'nickname', 'webport', 'keepalive_timeout', 'log_gatherer.furl',
'disconnect_timeout', 'advertised_ip_addresses', 'helper.furl',
'key_generator.furl', 'stats_gatherer.furl', 'sizelimit',
'run_helper']:
logged = [ m for m in logged_messages if
("Found pre-Tahoe-LAFS-v1.3 configuration file" in str(m) and oldfile in str(m)) ]
self.failIf(logged, (oldfile, logged_messages))
@defer.inlineCallbacks
def test_secrets(self):
2018-08-29 22:44:12 +00:00
"""
A new client has renewal + cancel secrets
"""
basedir = "test_client.Basic.test_secrets"
os.mkdir(basedir)
fileutil.write(os.path.join(basedir, "tahoe.cfg"), \
BASECONFIG)
c = yield client.create_client(basedir)
secret_fname = os.path.join(basedir, "private", "secret")
self.failUnless(os.path.exists(secret_fname), secret_fname)
renew_secret = c.get_renewal_secret()
self.failUnless(base32.b2a(renew_secret))
cancel_secret = c.get_cancel_secret()
self.failUnless(base32.b2a(cancel_secret))
@defer.inlineCallbacks
def test_nodekey_yes_storage(self):
2018-08-29 22:44:12 +00:00
"""
We have a nodeid if we're providing storage
"""
basedir = "test_client.Basic.test_nodekey_yes_storage"
os.mkdir(basedir)
fileutil.write(os.path.join(basedir, "tahoe.cfg"),
BASECONFIG)
c = yield client.create_client(basedir)
self.failUnless(c.get_long_nodeid().startswith("v0-"))
@defer.inlineCallbacks
def test_nodekey_no_storage(self):
2018-08-29 22:44:12 +00:00
"""
We have a nodeid if we're not providing storage
"""
basedir = "test_client.Basic.test_nodekey_no_storage"
os.mkdir(basedir)
fileutil.write(os.path.join(basedir, "tahoe.cfg"),
BASECONFIG + "[storage]\n" + "enabled = false\n")
c = yield client.create_client(basedir)
self.failUnless(c.get_long_nodeid().startswith("v0-"))
def test_storage_anonymous_enabled_by_default(self):
"""
Anonymous storage access is enabled if storage is enabled and *anonymous*
is not set.
"""
config = client.config_from_string(
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"test_storage_default_anonymous_enabled",
"tub.port",
BASECONFIG + (
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"[storage]\n"
"enabled = true\n"
)
)
self.assertTrue(client.anonymous_storage_enabled(config))
def test_storage_anonymous_enabled_explicitly(self):
"""
Anonymous storage access is enabled if storage is enabled and *anonymous*
is set to true.
"""
config = client.config_from_string(
self.id(),
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"tub.port",
BASECONFIG + (
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"[storage]\n"
"enabled = true\n"
"anonymous = true\n"
)
)
self.assertTrue(client.anonymous_storage_enabled(config))
def test_storage_anonymous_disabled_explicitly(self):
"""
Anonymous storage access is disabled if storage is enabled and *anonymous*
is set to false.
"""
config = client.config_from_string(
self.id(),
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"tub.port",
BASECONFIG + (
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"[storage]\n"
"enabled = true\n"
"anonymous = false\n"
)
)
self.assertFalse(client.anonymous_storage_enabled(config))
def test_storage_anonymous_disabled_by_storage(self):
"""
Anonymous storage access is disabled if storage is disabled and *anonymous*
is set to true.
"""
config = client.config_from_string(
self.id(),
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"tub.port",
BASECONFIG + (
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"[storage]\n"
"enabled = false\n"
"anonymous = true\n"
)
)
self.assertFalse(client.anonymous_storage_enabled(config))
@defer.inlineCallbacks
def test_reserved_1(self):
2018-08-29 22:44:12 +00:00
"""
reserved_space option is propagated
"""
basedir = "client.Basic.test_reserved_1"
os.mkdir(basedir)
fileutil.write(os.path.join(basedir, "tahoe.cfg"), \
BASECONFIG + \
"[storage]\n" + \
"enabled = true\n" + \
"reserved_space = 1000\n")
c = yield client.create_client(basedir)
self.failUnlessEqual(c.getServiceNamed("storage").reserved_space, 1000)
@defer.inlineCallbacks
def test_reserved_2(self):
2018-08-29 22:44:12 +00:00
"""
reserved_space option understands 'K' to mean kilobytes
"""
basedir = "client.Basic.test_reserved_2"
os.mkdir(basedir)
fileutil.write(os.path.join(basedir, "tahoe.cfg"), \
BASECONFIG + \
"[storage]\n" + \
"enabled = true\n" + \
"reserved_space = 10K\n")
c = yield client.create_client(basedir)
self.failUnlessEqual(c.getServiceNamed("storage").reserved_space, 10*1000)
@defer.inlineCallbacks
def test_reserved_3(self):
2018-08-29 22:44:12 +00:00
"""
reserved_space option understands 'mB' to mean megabytes
"""
basedir = "client.Basic.test_reserved_3"
os.mkdir(basedir)
fileutil.write(os.path.join(basedir, "tahoe.cfg"), \
BASECONFIG + \
"[storage]\n" + \
"enabled = true\n" + \
"reserved_space = 5mB\n")
c = yield client.create_client(basedir)
self.failUnlessEqual(c.getServiceNamed("storage").reserved_space,
5*1000*1000)
@defer.inlineCallbacks
def test_reserved_4(self):
2018-08-29 22:44:12 +00:00
"""
reserved_space option understands 'Gb' to mean gigabytes
"""
basedir = "client.Basic.test_reserved_4"
os.mkdir(basedir)
fileutil.write(os.path.join(basedir, "tahoe.cfg"), \
BASECONFIG + \
"[storage]\n" + \
"enabled = true\n" + \
"reserved_space = 78Gb\n")
c = yield client.create_client(basedir)
self.failUnlessEqual(c.getServiceNamed("storage").reserved_space,
78*1000*1000*1000)
@defer.inlineCallbacks
def test_reserved_bad(self):
2018-08-29 22:44:12 +00:00
"""
reserved_space option produces errors on non-numbers
"""
basedir = "client.Basic.test_reserved_bad"
os.mkdir(basedir)
fileutil.write(os.path.join(basedir, "tahoe.cfg"), \
BASECONFIG + \
"[storage]\n" + \
"enabled = true\n" + \
"reserved_space = bogus\n")
2018-01-29 04:58:24 +00:00
with self.assertRaises(ValueError):
yield client.create_client(basedir)
@defer.inlineCallbacks
2018-03-01 22:45:10 +00:00
def test_web_apiauthtoken(self):
2018-08-24 22:50:04 +00:00
"""
Client loads the proper API auth token from disk
"""
2018-03-01 22:45:10 +00:00
basedir = u"client.Basic.test_web_apiauthtoken"
create_node_dir(basedir, "testing")
c = yield client.create_client(basedir)
2018-03-01 22:45:10 +00:00
# this must come after we create the client, as it will create
# a new, random authtoken itself
with open(os.path.join(basedir, "private", "api_auth_token"), "w") as f:
f.write("deadbeef")
token = c.get_auth_token()
self.assertEqual("deadbeef", token)
@defer.inlineCallbacks
def test_web_staticdir(self):
2018-08-29 22:44:12 +00:00
"""
a relative web.static dir is expanded properly
"""
basedir = u"client.Basic.test_web_staticdir"
os.mkdir(basedir)
fileutil.write(os.path.join(basedir, "tahoe.cfg"),
BASECONFIG +
"[node]\n" +
"web.port = tcp:0:interface=127.0.0.1\n" +
"web.static = relative\n")
c = yield client.create_client(basedir)
w = c.getServiceNamed("webish")
abs_basedir = fileutil.abspath_expanduser_unicode(basedir)
expected = fileutil.abspath_expanduser_unicode(u"relative", abs_basedir)
self.failUnlessReallyEqual(w.staticdir, expected)
2021-01-06 18:37:52 +00:00
# TODO: also test config options for SFTP. See Git history for deleted FTP
# tests that could be used as basis for these tests.
2018-08-22 05:56:08 +00:00
@defer.inlineCallbacks
2018-03-19 18:21:28 +00:00
def _storage_dir_test(self, basedir, storage_path, expected_path):
2018-08-29 22:44:12 +00:00
"""
generic helper for following storage_dir tests
"""
os.mkdir(basedir)
2018-03-19 18:21:28 +00:00
cfg_path = os.path.join(basedir, "tahoe.cfg")
fileutil.write(
cfg_path,
BASECONFIG +
"[storage]\n"
"enabled = true\n",
)
if storage_path is not None:
fileutil.write(
cfg_path,
"storage_dir = %s\n" % (storage_path,),
mode="ab",
)
2018-08-22 05:56:08 +00:00
c = yield client.create_client(basedir)
2018-03-19 18:21:28 +00:00
self.assertEqual(
c.getServiceNamed("storage").storedir,
expected_path,
)
def test_default_storage_dir(self):
"""
If no value is given for ``storage_dir`` in the ``storage`` section of
``tahoe.cfg`` then the ``storage`` directory beneath the node
directory is used.
"""
basedir = u"client.Basic.test_default_storage_dir"
config_path = None
expected_path = os.path.join(
abspath_expanduser_unicode(basedir),
u"storage",
)
2018-08-22 05:56:08 +00:00
return self._storage_dir_test(
2018-03-19 18:21:28 +00:00
basedir,
config_path,
expected_path,
)
def test_relative_storage_dir(self):
"""
A storage node can be directed to use a particular directory for share
file storage by setting ``storage_dir`` in the ``storage`` section of
``tahoe.cfg``. If the path is relative, it is interpreted relative to
the node's basedir.
"""
basedir = u"client.Basic.test_relative_storage_dir"
config_path = b"myowndir"
expected_path = os.path.join(
abspath_expanduser_unicode(basedir),
u"myowndir",
)
2018-08-22 05:56:08 +00:00
return self._storage_dir_test(
2018-03-19 18:21:28 +00:00
basedir,
config_path,
expected_path,
)
def test_absolute_storage_dir(self):
"""
If the ``storage_dir`` item in the ``storage`` section of the
configuration gives an absolute path then exactly that path is used.
"""
basedir = u"client.Basic.test_absolute_storage_dir"
# create_client is going to try to make the storage directory so we
# don't want a literal absolute path like /myowndir which we won't
# have write permission to. So construct an absolute path that we
# should be able to write to.
base = u"\N{SNOWMAN}"
if encodingutil.filesystem_encoding != "utf-8":
base = u"melted_snowman"
2018-03-19 18:21:28 +00:00
expected_path = abspath_expanduser_unicode(
u"client.Basic.test_absolute_storage_dir_myowndir/" + base
2018-03-19 18:21:28 +00:00
)
config_path = expected_path.encode("utf-8")
2018-08-22 05:56:08 +00:00
return self._storage_dir_test(
2018-03-19 18:21:28 +00:00
basedir,
config_path,
expected_path,
)
def _permute(self, sb, key):
new introducer: signed extensible dictionary-based messages! refs #466 This introduces new client and server halves to the Introducer (renaming the old one with a _V1 suffix). Both have fallbacks to accomodate talking to a different version: the publishing client switches on whether the server's .get_version() advertises V2 support, the server switches on which subscription method was invoked by the subscribing client. The V2 protocol sends a three-tuple of (serialized announcement dictionary, signature, pubkey) for each announcement. The V2 server dispatches messages to subscribers according to the service-name, and throws errors for invalid signatures, but does not otherwise examine the messages. The V2 receiver's subscription callback will receive a (serverid, ann_dict) pair. The 'serverid' will be equal to the pubkey if all of the following are true: the originating client is V2, and was told a privkey to use the announcement went through a V2 server the signature is valid If not, 'serverid' will be equal to the tubid portion of the announced FURL, as was the case for V1 receivers. Servers will create a keypair if one does not exist yet, stored in private/server.privkey . The signed announcement dictionary puts the server FURL in a key named "anonymous-storage-FURL", which anticipates upcoming Accounting-related changes in the server advertisements. It also provides a key named "permutation-seed-base32" to tell clients what permutation seed to use. This is computed at startup, using tubid if there are existing shares, otherwise the pubkey, to retain share-order compatibility for existing servers.
2011-11-20 10:21:32 +00:00
return [ s.get_longname() for s in sb.get_servers_for_psi(key) ]
2006-12-01 03:18:51 +00:00
def test_permute(self):
2019-08-19 20:09:26 +00:00
sb = StorageFarmBroker(True, None, EMPTY_CLIENT_CONFIG)
for k in ["%d" % i for i in range(5)]:
ann = {"anonymous-storage-FURL": SOME_FURL,
new introducer: signed extensible dictionary-based messages! refs #466 This introduces new client and server halves to the Introducer (renaming the old one with a _V1 suffix). Both have fallbacks to accomodate talking to a different version: the publishing client switches on whether the server's .get_version() advertises V2 support, the server switches on which subscription method was invoked by the subscribing client. The V2 protocol sends a three-tuple of (serialized announcement dictionary, signature, pubkey) for each announcement. The V2 server dispatches messages to subscribers according to the service-name, and throws errors for invalid signatures, but does not otherwise examine the messages. The V2 receiver's subscription callback will receive a (serverid, ann_dict) pair. The 'serverid' will be equal to the pubkey if all of the following are true: the originating client is V2, and was told a privkey to use the announcement went through a V2 server the signature is valid If not, 'serverid' will be equal to the tubid portion of the announced FURL, as was the case for V1 receivers. Servers will create a keypair if one does not exist yet, stored in private/server.privkey . The signed announcement dictionary puts the server FURL in a key named "anonymous-storage-FURL", which anticipates upcoming Accounting-related changes in the server advertisements. It also provides a key named "permutation-seed-base32" to tell clients what permutation seed to use. This is computed at startup, using tubid if there are existing shares, otherwise the pubkey, to retain share-order compatibility for existing servers.
2011-11-20 10:21:32 +00:00
"permutation-seed-base32": base32.b2a(k) }
sb.test_add_rref(k, "rref", ann)
2007-03-30 03:19:52 +00:00
self.failUnlessReallyEqual(self._permute(sb, "one"), ['3','1','0','4','2'])
self.failUnlessReallyEqual(self._permute(sb, "two"), ['0','4','2','1','3'])
sb.servers.clear()
self.failUnlessReallyEqual(self._permute(sb, "one"), [])
def test_permute_with_preferred(self):
sb = StorageFarmBroker(
True,
None,
2019-08-19 20:09:26 +00:00
EMPTY_CLIENT_CONFIG,
StorageClientConfig(preferred_peers=['1','4']),
)
for k in ["%d" % i for i in range(5)]:
ann = {"anonymous-storage-FURL": SOME_FURL,
"permutation-seed-base32": base32.b2a(k) }
sb.test_add_rref(k, "rref", ann)
self.failUnlessReallyEqual(self._permute(sb, "one"), ['1','4','3','0','2'])
self.failUnlessReallyEqual(self._permute(sb, "two"), ['4','1','0','2','3'])
sb.servers.clear()
self.failUnlessReallyEqual(self._permute(sb, "one"), [])
@defer.inlineCallbacks
def test_versions(self):
2018-08-29 22:44:12 +00:00
"""
A client knows the versions of software it has
"""
basedir = "test_client.Basic.test_versions"
os.mkdir(basedir)
fileutil.write(os.path.join(basedir, "tahoe.cfg"), \
BASECONFIG + \
"[storage]\n" + \
"enabled = true\n")
c = yield client.create_client(basedir)
ss = c.getServiceNamed("storage")
verdict = ss.remote_get_version()
self.failUnlessReallyEqual(verdict["application-version"],
str(allmydata.__full_version__))
self.failIfEqual(str(allmydata.__version__), "unknown")
self.failUnless("." in str(allmydata.__full_version__),
"non-numeric version in '%s'" % allmydata.__version__)
# also test stats
stats = c.get_stats()
self.failUnless("node.uptime" in stats)
self.failUnless(isinstance(stats["node.uptime"], float))
@defer.inlineCallbacks
def test_helper_furl(self):
2018-08-29 22:44:12 +00:00
"""
various helper.furl arguments are parsed correctly
"""
basedir = "test_client.Basic.test_helper_furl"
os.mkdir(basedir)
@defer.inlineCallbacks
def _check(config, expected_furl):
fileutil.write(os.path.join(basedir, "tahoe.cfg"),
BASECONFIG + config)
c = yield client.create_client(basedir)
uploader = c.getServiceNamed("uploader")
furl, connected = uploader.get_helper_info()
self.failUnlessEqual(furl, expected_furl)
yield _check("", None)
yield _check("helper.furl =\n", None)
yield _check("helper.furl = \n", None)
yield _check("helper.furl = None", None)
yield _check("helper.furl = pb://blah\n", "pb://blah")
def flush_but_dont_ignore(res):
d = flushEventualQueue()
def _done(ignored):
return res
d.addCallback(_done)
return d
2018-02-02 07:10:45 +00:00
class AnonymousStorage(SyncTestCase):
"""
Tests for behaviors of the client object with respect to the anonymous
storage service.
"""
@defer.inlineCallbacks
def test_anonymous_storage_enabled(self):
"""
If anonymous storage access is enabled then the client announces it.
"""
2020-11-27 01:53:57 +00:00
basedir = FilePath(self.id())
basedir.child("private").makedirs()
write_introducer(basedir, "someintroducer", SOME_FURL)
config = client.config_from_string(
2020-11-27 01:53:57 +00:00
basedir.path,
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"tub.port",
BASECONFIG + (
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"[storage]\n"
"enabled = true\n"
"anonymous = true\n"
)
)
node = yield client.create_client_from_config(
config,
_introducer_factory=MemoryIntroducerClient,
)
self.assertThat(
get_published_announcements(node),
MatchesListwise([
matches_storage_announcement(
2020-11-27 01:53:57 +00:00
basedir.path,
anonymous=True,
),
]),
)
@defer.inlineCallbacks
def test_anonymous_storage_disabled(self):
"""
If anonymous storage access is disabled then the client does not announce
it nor does it write a fURL for it to beneath the node directory.
"""
2020-11-27 01:53:57 +00:00
basedir = FilePath(self.id())
basedir.child("private").makedirs()
write_introducer(basedir, "someintroducer", SOME_FURL)
config = client.config_from_string(
2020-11-27 01:53:57 +00:00
basedir.path,
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"tub.port",
BASECONFIG + (
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"[storage]\n"
"enabled = true\n"
"anonymous = false\n"
)
)
node = yield client.create_client_from_config(
config,
_introducer_factory=MemoryIntroducerClient,
)
self.expectThat(
get_published_announcements(node),
MatchesListwise([
matches_storage_announcement(
2020-11-27 01:53:57 +00:00
basedir.path,
anonymous=False,
),
]),
)
self.expectThat(
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
config.get_private_config("storage.furl", default=None),
Is(None),
)
@defer.inlineCallbacks
def test_anonymous_storage_enabled_then_disabled(self):
"""
If a node is run with anonymous storage enabled and then later anonymous
storage is disabled in the configuration for that node, it is not
possible to reach the anonymous storage server via the originally
published fURL.
"""
2020-11-27 01:53:57 +00:00
basedir = FilePath(self.id())
basedir.child("private").makedirs()
enabled_config = client.config_from_string(
2020-11-27 01:53:57 +00:00
basedir.path,
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"tub.port",
BASECONFIG + (
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"[storage]\n"
"enabled = true\n"
"anonymous = true\n"
)
)
node = yield client.create_client_from_config(
enabled_config,
_introducer_factory=MemoryIntroducerClient,
)
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
anonymous_storage_furl = enabled_config.get_private_config("storage.furl")
def check_furl():
return node.tub.getReferenceForURL(anonymous_storage_furl)
# Perform a sanity check that our test code makes sense: is this a
# legit way to verify whether a fURL will refer to an object?
self.assertThat(
check_furl(),
# If it doesn't raise a KeyError we're in business.
Always(),
)
disabled_config = client.config_from_string(
2020-11-27 01:53:57 +00:00
basedir.path,
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"tub.port",
BASECONFIG + (
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"[storage]\n"
"enabled = true\n"
"anonymous = false\n"
)
)
node = yield client.create_client_from_config(
disabled_config,
_introducer_factory=MemoryIntroducerClient,
)
self.assertThat(
check_furl,
raises(KeyError),
)
2018-02-02 07:10:45 +00:00
class IntroducerClients(unittest.TestCase):
def test_invalid_introducer_furl(self):
2018-08-29 22:44:12 +00:00
"""
An introducer.furl of 'None' in the deprecated [client]introducer.furl
field is invalid and causes `create_introducer_clients` to fail.
2018-08-29 22:44:12 +00:00
"""
2018-02-02 07:10:45 +00:00
cfg = (
"[client]\n"
"introducer.furl = None\n"
)
config = client.config_from_string("basedir", "client.port", cfg)
2018-02-02 07:10:45 +00:00
with self.assertRaises(ValueError) as ctx:
client.create_introducer_clients(config, main_tub=None)
self.assertIn(
"invalid 'introducer.furl = None'",
str(ctx.exception)
)
def get_known_server_details(a_client):
"""
Get some details about known storage servers from a client.
:param _Client a_client: The client to inspect.
:return: A ``list`` of two-tuples. Each element of the list corresponds
to a "known server". The first element of each tuple is a server id.
The second is the server's announcement.
"""
return list(
(s.get_serverid(), s.get_announcement())
for s
in a_client.storage_broker.get_known_servers()
)
class StaticServers(Fixture):
"""
Create a ``servers.yaml`` file.
"""
def __init__(self, basedir, server_details):
super(StaticServers, self).__init__()
self._basedir = basedir
self._server_details = server_details
def _setUp(self):
private = self._basedir.child(u"private")
private.makedirs()
servers = private.child(u"servers.yaml")
servers.setContent(safe_dump({
u"storage": {
serverid: {
u"ann": announcement,
}
for (serverid, announcement)
in self._server_details
},
}))
2019-06-12 20:47:25 +00:00
class StorageClients(SyncTestCase):
"""
Tests for storage-related behavior of ``_Client``.
"""
2019-06-13 15:58:14 +00:00
def setUp(self):
super(StorageClients, self).setUp()
# Some other tests create Nodes and Node mutates tempfile.tempdir and
# that screws us up because we're *not* making a Node. "Fix" it. See
# https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3052 for the real fix,
# though.
import tempfile
tempfile.tempdir = None
tempdir = TempDir()
self.useFixture(tempdir)
self.basedir = FilePath(tempdir.path)
2019-06-13 16:23:41 +00:00
@capture_logging(
lambda case, logger: assertHasAction(
case,
logger,
actionType=u"storage-client:broker:set-static-servers",
succeeded=True,
),
)
def test_static_servers(self, logger):
2019-06-12 20:47:25 +00:00
"""
Storage servers defined in ``private/servers.yaml`` are loaded into the
storage broker.
"""
serverid = u"v0-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
announcement = {
2019-06-12 21:03:24 +00:00
u"nickname": u"some-storage-server",
2019-06-12 20:47:25 +00:00
u"anonymous-storage-FURL": u"pb://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@tcp:storage.example:100/swissnum",
}
2019-06-21 12:17:53 +00:00
self.useFixture(
StaticServers(
2019-06-13 15:58:14 +00:00
self.basedir,
[(serverid, announcement)],
),
)
2019-06-12 20:47:25 +00:00
self.assertThat(
2019-06-13 15:58:14 +00:00
client.create_client(self.basedir.asTextMode().path),
2019-06-12 20:47:25 +00:00
succeeded(
AfterPreprocessing(
get_known_server_details,
Equals([(serverid, announcement)]),
),
),
)
2019-06-13 16:23:41 +00:00
@capture_logging(
lambda case, logger: assertHasAction(
case,
logger,
actionType=u"storage-client:broker:make-storage-server",
succeeded=False,
),
)
def test_invalid_static_server(self, logger):
2019-06-12 21:05:14 +00:00
"""
An invalid announcement for a static server does not prevent other static
servers from being loaded.
"""
# Some good details
2019-06-13 16:23:41 +00:00
serverid = u"v1-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2019-06-12 21:05:14 +00:00
announcement = {
u"nickname": u"some-storage-server",
u"anonymous-storage-FURL": u"pb://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@tcp:storage.example:100/swissnum",
}
2019-06-21 12:17:53 +00:00
self.useFixture(
2019-06-12 21:05:14 +00:00
StaticServers(
2019-06-13 15:58:14 +00:00
self.basedir,
2019-06-12 21:05:14 +00:00
[(serverid, announcement),
2019-06-13 16:23:41 +00:00
# Along with a "bad" server announcement. Order in this list
# doesn't matter, yaml serializer and Python dicts are going
# to shuffle everything around kind of randomly.
2019-06-12 21:05:14 +00:00
(u"v0-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
{u"nickname": u"another-storage-server",
u"anonymous-storage-FURL": None,
}),
],
),
)
self.assertThat(
2019-06-13 15:58:14 +00:00
client.create_client(self.basedir.asTextMode().path),
2019-06-12 21:05:14 +00:00
succeeded(
AfterPreprocessing(
get_known_server_details,
# It should have the good server details.
Equals([(serverid, announcement)]),
),
),
)
2019-06-12 20:47:25 +00:00
class Run(unittest.TestCase, testutil.StallMixin):
def setUp(self):
self.sparent = service.MultiService()
self.sparent.startService()
def tearDown(self):
d = self.sparent.stopService()
d.addBoth(flush_but_dont_ignore)
return d
@defer.inlineCallbacks
def test_loadable(self):
"""
A configuration consisting only of an introducer can be turned into a
client node.
"""
2020-11-27 01:53:57 +00:00
basedir = FilePath("test_client.Run.test_loadable")
private = basedir.child("private")
private.makedirs()
dummy = "pb://wl74cyahejagspqgy4x5ukrvfnevlknt@127.0.0.1:58889/bogus"
write_introducer(basedir, "someintroducer", dummy)
2020-11-27 01:53:57 +00:00
basedir.child("tahoe.cfg").setContent(BASECONFIG)
basedir.child(client._Client.EXIT_TRIGGER_FILE).touch()
yield client.create_client(basedir.path)
@defer.inlineCallbacks
def test_reloadable(self):
2020-11-27 01:53:57 +00:00
basedir = FilePath("test_client.Run.test_reloadable")
private = basedir.child("private")
private.makedirs()
dummy = "pb://wl74cyahejagspqgy4x5ukrvfnevlknt@127.0.0.1:58889/bogus"
write_introducer(basedir, "someintroducer", dummy)
2020-11-27 01:53:57 +00:00
basedir.child("tahoe.cfg").setContent(BASECONFIG)
c1 = yield client.create_client(basedir.path)
c1.setServiceParent(self.sparent)
# delay to let the service start up completely. I'm not entirely sure
# this is necessary.
yield self.stall(delay=2.0)
yield c1.disownServiceParent()
# the cygwin buildslave seems to need more time to let the old
# service completely shut down. When delay=0.1, I saw this test fail,
# probably due to the logport trying to reclaim the old socket
# number. This suggests that either we're dropping a Deferred
# somewhere in the shutdown sequence, or that cygwin is just cranky.
yield self.stall(delay=2.0)
# TODO: pause for slightly over one second, to let
# Client._check_exit_trigger poll the file once. That will exercise
# another few lines. Then add another test in which we don't
# update the file at all, and watch to see the node shutdown.
# (To do this, use a modified node which overrides Node.shutdown(),
# also change _check_exit_trigger to use it instead of a raw
# reactor.stop, also instrument the shutdown event in an
# attribute that we can check.)
2020-11-27 01:53:57 +00:00
c2 = yield client.create_client(basedir.path)
c2.setServiceParent(self.sparent)
yield c2.disownServiceParent()
class NodeMakerTests(testutil.ReallyEqualMixin, AsyncBrokenTestCase):
def _make_node_maker(self, mode, writecap, deep_immutable):
"""
Create a callable which can create an ``IFilesystemNode`` provider for the
given cap.
:param unicode mode: The read/write combination to pass to
``NodeMaker.create_from_cap``. If it contains ``u"r"`` then a
readcap will be passed in. If it contains ``u"w"`` then a
writecap will be passed in.
:param IURI writecap: The capability for which to create a node.
:param bool deep_immutable: Whether to request a "deep immutable" node
which forces the result to be an immutable ``IFilesystemNode`` (I
think -exarkun).
"""
if writecap.is_mutable():
# It's just not a valid combination to have a mutable alongside
# deep_immutable = True. It's easier to fix deep_immutable than
# writecap to clear up this conflict.
deep_immutable = False
if "r" in mode:
readcap = writecap.get_readonly().to_string()
else:
readcap = None
if "w" in mode:
writecap = writecap.to_string()
else:
writecap = None
nm = NodeMaker(
storage_broker=None,
secret_holder=None,
history=None,
uploader=None,
terminator=None,
default_encoding_parameters={u"k": 1, u"n": 1},
mutable_file_default=None,
key_generator=None,
blacklist=None,
)
return partial(
nm.create_from_cap,
writecap,
readcap,
deep_immutable,
)
@given(
mode=sampled_from(["w", "r", "rw"]),
writecap=write_capabilities(),
deep_immutable=booleans(),
)
def test_cached_result(self, mode, writecap, deep_immutable):
"""
``NodeMaker.create_from_cap`` returns the same object when called with the
same arguments.
"""
make_node = self._make_node_maker(mode, writecap, deep_immutable)
original = make_node()
additional = make_node()
self.assertThat(
original,
Is(additional),
)
@given(
mode=sampled_from(["w", "r", "rw"]),
writecap=write_capabilities(),
deep_immutable=booleans(),
)
def test_cache_expired(self, mode, writecap, deep_immutable):
"""
After the node object returned by an earlier call to
``NodeMaker.create_from_cap`` has been garbage collected, a new call
to ``NodeMaker.create_from_cap`` returns a node object, maybe even a
new one although we can't really prove it.
"""
make_node = self._make_node_maker(mode, writecap, deep_immutable)
make_node()
additional = make_node()
self.assertThat(
additional,
AfterPreprocessing(
lambda node: node.get_readonly_uri(),
Equals(writecap.get_readonly().to_string()),
),
)
@defer.inlineCallbacks
def test_maker(self):
basedir = "client/NodeMaker/maker"
fileutil.make_dirs(basedir)
fileutil.write(os.path.join(basedir, "tahoe.cfg"), BASECONFIG)
c = yield client.create_client(basedir)
n = c.create_node_from_uri("URI:CHK:6nmrpsubgbe57udnexlkiwzmlu:bjt7j6hshrlmadjyr7otq3dc24end5meo5xcr5xe5r663po6itmq:3:10:7277")
self.failUnless(IFilesystemNode.providedBy(n))
self.failUnless(IFileNode.providedBy(n))
self.failUnless(IImmutableFileNode.providedBy(n))
self.failIf(IMutableFileNode.providedBy(n))
self.failIf(IDirectoryNode.providedBy(n))
self.failUnless(n.is_readonly())
self.failIf(n.is_mutable())
2013-02-07 16:35:23 +00:00
# Testing #1679. There was a bug that would occur when downloader was
# downloading the same readcap more than once concurrently, so the
# filenode object was cached, and there was a failure from one of the
# servers in one of the download attempts. No subsequent download
# attempt would attempt to use that server again, which would lead to
# the file being undownloadable until the gateway was restarted. The
# current fix for this (hopefully to be superceded by a better fix
# eventually) is to prevent re-use of filenodes, so the NodeMaker is
# hereby required *not* to cache and re-use filenodes for CHKs.
other_n = c.create_node_from_uri("URI:CHK:6nmrpsubgbe57udnexlkiwzmlu:bjt7j6hshrlmadjyr7otq3dc24end5meo5xcr5xe5r663po6itmq:3:10:7277")
self.failIf(n is other_n, (n, other_n))
n = c.create_node_from_uri("URI:LIT:n5xgk")
self.failUnless(IFilesystemNode.providedBy(n))
self.failUnless(IFileNode.providedBy(n))
self.failUnless(IImmutableFileNode.providedBy(n))
self.failIf(IMutableFileNode.providedBy(n))
self.failIf(IDirectoryNode.providedBy(n))
self.failUnless(n.is_readonly())
self.failIf(n.is_mutable())
n = c.create_node_from_uri("URI:SSK:n6x24zd3seu725yluj75q5boaa:mm6yoqjhl6ueh7iereldqxue4nene4wl7rqfjfybqrehdqmqskvq")
self.failUnless(IFilesystemNode.providedBy(n))
self.failUnless(IFileNode.providedBy(n))
self.failIf(IImmutableFileNode.providedBy(n))
self.failUnless(IMutableFileNode.providedBy(n))
self.failIf(IDirectoryNode.providedBy(n))
self.failIf(n.is_readonly())
self.failUnless(n.is_mutable())
n = c.create_node_from_uri("URI:SSK-RO:b7sr5qsifnicca7cbk3rhrhbvq:mm6yoqjhl6ueh7iereldqxue4nene4wl7rqfjfybqrehdqmqskvq")
self.failUnless(IFilesystemNode.providedBy(n))
self.failUnless(IFileNode.providedBy(n))
self.failIf(IImmutableFileNode.providedBy(n))
self.failUnless(IMutableFileNode.providedBy(n))
self.failIf(IDirectoryNode.providedBy(n))
self.failUnless(n.is_readonly())
self.failUnless(n.is_mutable())
n = c.create_node_from_uri("URI:DIR2:n6x24zd3seu725yluj75q5boaa:mm6yoqjhl6ueh7iereldqxue4nene4wl7rqfjfybqrehdqmqskvq")
self.failUnless(IFilesystemNode.providedBy(n))
self.failIf(IFileNode.providedBy(n))
self.failIf(IImmutableFileNode.providedBy(n))
self.failIf(IMutableFileNode.providedBy(n))
self.failUnless(IDirectoryNode.providedBy(n))
self.failIf(n.is_readonly())
self.failUnless(n.is_mutable())
n = c.create_node_from_uri("URI:DIR2-RO:b7sr5qsifnicca7cbk3rhrhbvq:mm6yoqjhl6ueh7iereldqxue4nene4wl7rqfjfybqrehdqmqskvq")
self.failUnless(IFilesystemNode.providedBy(n))
self.failIf(IFileNode.providedBy(n))
self.failIf(IImmutableFileNode.providedBy(n))
self.failIf(IMutableFileNode.providedBy(n))
self.failUnless(IDirectoryNode.providedBy(n))
self.failUnless(n.is_readonly())
self.failUnless(n.is_mutable())
unknown_rw = "lafs://from_the_future"
unknown_ro = "lafs://readonly_from_the_future"
n = c.create_node_from_uri(unknown_rw, unknown_ro)
self.failUnless(IFilesystemNode.providedBy(n))
self.failIf(IFileNode.providedBy(n))
self.failIf(IImmutableFileNode.providedBy(n))
self.failIf(IMutableFileNode.providedBy(n))
self.failIf(IDirectoryNode.providedBy(n))
self.failUnless(n.is_unknown())
self.failUnlessReallyEqual(n.get_uri(), unknown_rw)
self.failUnlessReallyEqual(n.get_write_uri(), unknown_rw)
self.failUnlessReallyEqual(n.get_readonly_uri(), "ro." + unknown_ro)
2010-07-18 05:32:50 +00:00
# Note: it isn't that we *intend* to deploy non-ASCII caps in
# the future, it is that we want to make sure older Tahoe-LAFS
# versions wouldn't choke on them if we were to do so. See
# #1051 and wiki:NewCapDesign for details.
unknown_rw = u"lafs://from_the_future_rw_\u263A".encode('utf-8')
unknown_ro = u"lafs://readonly_from_the_future_ro_\u263A".encode('utf-8')
n = c.create_node_from_uri(unknown_rw, unknown_ro)
self.failUnless(IFilesystemNode.providedBy(n))
self.failIf(IFileNode.providedBy(n))
self.failIf(IImmutableFileNode.providedBy(n))
self.failIf(IMutableFileNode.providedBy(n))
self.failIf(IDirectoryNode.providedBy(n))
self.failUnless(n.is_unknown())
self.failUnlessReallyEqual(n.get_uri(), unknown_rw)
self.failUnlessReallyEqual(n.get_write_uri(), unknown_rw)
self.failUnlessReallyEqual(n.get_readonly_uri(), "ro." + unknown_ro)
def matches_dummy_announcement(name, value):
"""
Matches the portion of an announcement for the ``DummyStorage`` storage
server plugin.
:param unicode name: The name of the dummy plugin.
:param unicode value: The arbitrary value in the dummy plugin
announcement.
:return: a testtools-style matcher
"""
return MatchesDict({
# Everyone gets a name and a fURL added to their announcement.
u"name": Equals(name),
u"storage-server-FURL": matches_furl(),
# The plugin can contribute things, too.
u"value": Equals(value),
})
class StorageAnnouncementTests(SyncTestCase):
"""
Tests for the storage announcement published by the client.
"""
def setUp(self):
super(StorageAnnouncementTests, self).setUp()
2020-11-27 01:53:57 +00:00
self.basedir = FilePath(self.useFixture(TempDir()).path)
create_node_dir(self.basedir.path, u"")
# Write an introducer configuration or we can't observer
# announcements.
write_introducer(self.basedir, "someintroducer", SOME_FURL)
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
def get_config(self, storage_enabled, more_storage="", more_sections=""):
return """
[client]
# Empty
[node]
tub.location = tcp:192.0.2.0:1234
[storage]
enabled = {storage_enabled}
{more_storage}
{more_sections}
""".format(
storage_enabled=storage_enabled,
more_storage=more_storage,
more_sections=more_sections,
)
def test_no_announcement(self):
"""
No storage announcement is published if storage is not enabled.
"""
config = client.config_from_string(
2020-11-27 01:53:57 +00:00
self.basedir.path,
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"tub.port",
self.get_config(storage_enabled=False),
)
self.assertThat(
client.create_client_from_config(
config,
_introducer_factory=MemoryIntroducerClient,
),
succeeded(AfterPreprocessing(
get_published_announcements,
Equals([]),
)),
)
def test_anonymous_storage_announcement(self):
"""
A storage announcement with the anonymous storage fURL is published when
storage is enabled.
"""
config = client.config_from_string(
2020-11-27 01:53:57 +00:00
self.basedir.path,
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"tub.port",
self.get_config(storage_enabled=True),
)
client_deferred = client.create_client_from_config(
config,
_introducer_factory=MemoryIntroducerClient,
)
self.assertThat(
client_deferred,
# The Deferred succeeds
succeeded(AfterPreprocessing(
# The announcements published by the client should ...
get_published_announcements,
# Match the following list (of one element) ...
MatchesListwise([
# The only element in the list ...
2020-11-27 01:53:57 +00:00
matches_storage_announcement(self.basedir.path),
]),
)),
)
def test_single_storage_plugin_announcement(self):
"""
The announcement from a single enabled storage plugin is published when
storage is enabled.
"""
self.useFixture(UseTestPlugins())
value = u"thing"
config = client.config_from_string(
2020-11-27 01:53:57 +00:00
self.basedir.path,
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"tub.port",
self.get_config(
storage_enabled=True,
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
more_storage="plugins=tahoe-lafs-dummy-v1",
more_sections=(
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"[storageserver.plugins.tahoe-lafs-dummy-v1]\n"
"some = {}\n".format(value)
),
),
)
self.assertThat(
client.create_client_from_config(
config,
_introducer_factory=MemoryIntroducerClient,
),
succeeded(AfterPreprocessing(
get_published_announcements,
MatchesListwise([
matches_storage_announcement(
2020-11-27 01:53:57 +00:00
self.basedir.path,
options=[
matches_dummy_announcement(
u"tahoe-lafs-dummy-v1",
value,
),
],
),
]),
)),
)
2019-06-14 21:54:35 +00:00
def test_multiple_storage_plugin_announcements(self):
"""
The announcements from several enabled storage plugins are published when
storage is enabled.
"""
self.useFixture(UseTestPlugins())
config = client.config_from_string(
2020-11-27 01:53:57 +00:00
self.basedir.path,
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"tub.port",
2019-06-14 21:54:35 +00:00
self.get_config(
storage_enabled=True,
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
more_storage="plugins=tahoe-lafs-dummy-v1,tahoe-lafs-dummy-v2",
2019-06-14 21:54:35 +00:00
more_sections=(
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"[storageserver.plugins.tahoe-lafs-dummy-v1]\n"
"some = thing-1\n"
"[storageserver.plugins.tahoe-lafs-dummy-v2]\n"
"some = thing-2\n"
2019-06-14 21:54:35 +00:00
),
),
)
self.assertThat(
client.create_client_from_config(
config,
_introducer_factory=MemoryIntroducerClient,
),
2019-06-14 21:54:35 +00:00
succeeded(AfterPreprocessing(
get_published_announcements,
MatchesListwise([
matches_storage_announcement(
2020-11-27 01:53:57 +00:00
self.basedir.path,
options=[
matches_dummy_announcement(
u"tahoe-lafs-dummy-v1",
u"thing-1",
),
matches_dummy_announcement(
u"tahoe-lafs-dummy-v2",
u"thing-2",
),
],
),
2019-06-14 21:54:35 +00:00
]),
)),
)
def test_stable_storage_server_furl(self):
"""
The value for the ``storage-server-FURL`` item in the announcement for a
particular storage server plugin is stable across different node
instantiations.
"""
self.useFixture(UseTestPlugins())
config = client.config_from_string(
2020-11-27 01:53:57 +00:00
self.basedir.path,
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"tub.port",
self.get_config(
storage_enabled=True,
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
more_storage="plugins=tahoe-lafs-dummy-v1",
more_sections=(
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"[storageserver.plugins.tahoe-lafs-dummy-v1]\n"
"some = thing\n"
),
),
)
node_a = client.create_client_from_config(
config,
_introducer_factory=MemoryIntroducerClient,
)
node_b = client.create_client_from_config(
config,
_introducer_factory=MemoryIntroducerClient,
)
self.assertThat(
defer.gatherResults([node_a, node_b]),
succeeded(AfterPreprocessing(
2019-06-26 19:48:54 +00:00
partial(map, get_published_announcements),
MatchesSameElements(),
)),
)
def test_storage_plugin_without_configuration(self):
"""
A storage plugin with no configuration is loaded and announced.
"""
self.useFixture(UseTestPlugins())
config = client.config_from_string(
2020-11-27 01:53:57 +00:00
self.basedir.path,
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"tub.port",
self.get_config(
storage_enabled=True,
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
more_storage="plugins=tahoe-lafs-dummy-v1",
),
)
self.assertThat(
client.create_client_from_config(
config,
_introducer_factory=MemoryIntroducerClient,
),
succeeded(AfterPreprocessing(
get_published_announcements,
MatchesListwise([
matches_storage_announcement(
2020-11-27 01:53:57 +00:00
self.basedir.path,
options=[
matches_dummy_announcement(
u"tahoe-lafs-dummy-v1",
u"default-value",
),
],
),
]),
)),
)
def test_broken_storage_plugin(self):
"""
A storage plugin that raises an exception from ``get_storage_server``
causes ``client.create_client_from_config`` to return ``Deferred``
that fails.
"""
self.useFixture(UseTestPlugins())
config = client.config_from_string(
2020-11-27 01:53:57 +00:00
self.basedir.path,
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"tub.port",
self.get_config(
storage_enabled=True,
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
more_storage="plugins=tahoe-lafs-dummy-v1",
more_sections=(
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"[storageserver.plugins.tahoe-lafs-dummy-v1]\n"
# This will make it explode on instantiation.
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"invalid = configuration\n"
)
),
)
self.assertThat(
client.create_client_from_config(
config,
_introducer_factory=MemoryIntroducerClient,
),
failed(Always()),
)
def test_storage_plugin_not_found(self):
"""
``client.create_client_from_config`` raises ``UnknownConfigError`` when
called with a configuration which enables a storage plugin that is not
available on the system.
"""
config = client.config_from_string(
2020-11-27 01:53:57 +00:00
self.basedir.path,
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
"tub.port",
self.get_config(
storage_enabled=True,
feat(py3): Fix config from string compatibility I did an audit of the code base and AFAICT the `node.config_from_string(...)` is only used internally. Much of that usage is in tests where most of the usages feed in non-specific, simple `"..."` string literals (IOW, bytes under py2, unicode under py3) while one test module used `b"..."` byte string literals. Given all that it seems to me that the best goal would be to use simple string literals throughout the usage of `node.config_from_string(...)` and have only one special case in that function to handle the difference between versions. I just discovered that running the test with `TEST_SUITE=allmydata` doesn't run the tests in `allmydata.test.test_node` but running them with `TEST_SUITE=allmydata.test.test_node` does run them. I'm trying to figure out why that is, but in the meantime here are the differences in the Python 3 test output when running just the `allmydata.test.test_node` tests. This changes converts 11 tests from errros to success, changes the specific errors for others and improves coverage a bit: ```diff --- ../../.tox/make-test-py3-all-old.log 2020-10-01 11:56:15.428609940 -0700 +++ ../../.tox/make-test-py3-all-new.log 2020-10-01 11:56:55.052792565 -0700 @@ -95,9 +95,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -158,53 +158,29 @@ (#.### secs) allmydata.test.test_node.TestCase.test_config_required ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location1 ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location1 ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_location2 ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_auto_and_explicit ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_location_not_set ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_location_not_set ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_logdir_is_str ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str @@ -215,27 +191,31 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' [ERROR] (#.### secs) allmydata.test.test_node.TestCase.test_private_config ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' +[FAILURE] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_missing ... [OK] (#.### secs) allmydata.test.test_node.TestCase.test_private_config_unreadable ... Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -258,77 +238,33 @@ (#.### secs) allmydata.test.test_node.TestCase.test_timestamp ... [OK] (#.### secs) -allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestCase.test_write_config_unwritable_file ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_location ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_empty_tub_port ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled ... [OK] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_defaults ... [OK] (#.### secs) allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object [ERROR] (#.### secs) -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' -[ERROR] +allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ... [OK] (#.### secs) =============================================================================== @@ -415,9 +351,9 @@ tor_provider, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/introducer/server.py", line 87, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -449,6 +385,20 @@ allmydata.test.test_node.TestCase.test_config_items =============================================================================== +[FAIL] +Traceback (most recent call last): + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 261, in test_private_config + self.assertEqual(config.get_private_config("already"), "secret") + File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_synctest.py", line 434, in assertEqual + super(_Assertions, self).assertEqual(first, second, msg) + File "/usr/lib/python3.6/unittest/case.py", line 829, in assertEqual + assertion_func(first, second, msg=msg) + File "/usr/lib/python3.6/unittest/case.py", line 822, in _baseAssertEqual + raise self.failureException(msg) +twisted.trial.unittest.FailTest: b'secret' != 'secret' + +allmydata.test.test_node.TestCase.test_private_config +=============================================================================== [ERROR] Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 657, in test_disabled @@ -503,62 +453,26 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 112, in test_location1 - tub_location="192.0.2.0:1234") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location1 -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 117, in test_location2 tub_location="192.0.2.0:1234,example.org:8091") File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 65, in testing_tub + cert_filename='DEFAULT_CERTFILE_BLANK' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 669, in create_main_tub + portlocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestCase.test_location2 =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 142, in test_location_auto_and_explicit - local_addresses=["127.0.0.1", "192.0.2.0", "example.com:4321"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_auto_and_explicit -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 128, in test_location_not_set - local_addresses=["127.0.0.1", "192.0.2.0"], - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 99, in _test_location - tub = testing_tub(config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 53, in testing_tub - config = config_from_string(basedir, 'DEFAULT_PORTNUMFILE_BLANK', config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_location_not_set -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 340, in test_logdir_is_str yield client.create_client(basedir) File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks @@ -567,9 +481,9 @@ storage_broker, File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/client.py", line 676, in __init__ node.Node.__init__(self, config, main_tub, control_tub, i2p_provider, tor_provider) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 734, in __init__ + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 739, in __init__ self.setup_logging() - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 826, in setup_logging + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 831, in setup_logging newmeth = types.UnboundMethodType(formatTimeTahoeStyle, ob, ob.__class__) builtins.AttributeError: module 'types' has no attribute 'UnboundMethodType' @@ -577,19 +491,9 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 259, in test_private_config - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_private_config -=============================================================================== -[ERROR] -Traceback (most recent call last): File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 213, in test_private_config_unreadable config.get_or_create_private_config("foo", "contents") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 369, in get_or_create_private_config + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 374, in get_or_create_private_config fileutil.write(privname, value) File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/util/fileutil.py", line 275, in write f.write(data) @@ -607,97 +511,21 @@ =============================================================================== [ERROR] Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 288, in test_write_config_unwritable_file - config = config_from_string(basedir, "", "") - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestCase.test_write_config_unwritable_file -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 488, in test_disabled_port_not_tub - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_port_not_tub -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 506, in test_disabled_tub_not_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_disabled_tub_not_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 470, in test_empty_tub_location - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_location -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 453, in test_empty_tub_port - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_empty_tub_port -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 439, in test_parsing_all_disabled - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_all_disabled -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 392, in test_parsing_defaults - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_defaults -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 415, in test_parsing_location_complex - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 418, in test_parsing_location_complex + tubport, tublocation = _tub_portlocation(config) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 596, in _tub_portlocation + tubport = _convert_tub_port(file_tubport) + File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 552, in _convert_tub_port + if re.search(r'^\d+$', s): + File "/usr/lib/python3.6/re.py", line 182, in search + return _compile(pattern, flags).search(string) +builtins.TypeError: cannot use a string pattern on a bytes-like object allmydata.test.test_node.TestMissingPorts.test_parsing_location_complex -=============================================================================== -[ERROR] -Traceback (most recent call last): - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_node.py", line 370, in test_parsing_tcp - config = config_from_string(self.basedir, "portnum", config_data) - File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/node.py", line 209, in config_from_string - parser.readfp(BytesIO(config_str)) -builtins.TypeError: a bytes-like object is required, not 'str' - -allmydata.test.test_node.TestMissingPorts.test_parsing_tcp ------------------------------------------------------------------------------- -Ran 34 tests in 2.788s +Ran 34 tests in 2.516s -FAILED (failures=4, errors=21, successes=9) +FAILED (failures=5, errors=9, successes=20) Name Stmts Miss Branch BrPart Cover Missing ------------------------------------------------------------------------------------------------ src/allmydata/__init__.py 16 4 0 0 75% 18-22, 28-32 @@ -751,7 +579,7 @@ src/allmydata/mutable/repairer.py 57 37 18 0 29% 13, 15, 17, 19, 29-34, 65-71, 74-126, 129-131 src/allmydata/mutable/retrieve.py 489 411 120 0 13% 29-43, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 67-69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89-90, 105-160, 164, 167-171, 174-175, 186-193, 201-208, 211-212, 223-227, 230-232, 236-254, 257-275, 278-283, 286-332, 344-354, 362-454, 485-516, 529-540, 564-578, 586-597, 607-633, 643-663, 671-699, 712-729, 738-798, 806-829, 839-889, 897-905, 909-910, 919-941, 950-971, 981-994, 999-1005 src/allmydata/mutable/servermap.py 623 524 198 0 12% 26-38, 41-42, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 70, 72, 74, 76, 78, 80, 82, 116-124, 130-139, 142, 145, 148, 159-161, 165, 170-172, 175, 177, 180-181, 183, 186-199, 202, 206, 213, 217-220, 225-228, 231, 234-238, 243-252, 255-259, 263-265, 269-275, 280-290, 295-305, 311-315, 320-322, 328-350, 358-363, 370-372, 379, 390-450, 454, 457-461, 466-545, 549-557, 560-575, 578-593, 596-613, 623-638, 642-779, 787, 791-799, 803-804, 816-880, 883-904, 910-914, 919-920, 928-944, 960-974, 981-998, 1002-1012, 1020-1183, 1186-1205, 1209-1225, 1228-1229 -src/allmydata/node.py 388 106 146 39 69% 120, 132, 190, 211-213, 241, 243-245, 278, 284, 291-295, 303-306, 315, 320, 339, 341, 361, 368, 370, 377-379, 393-396, 422, 424, 449, 453, 490, 493, 500, 511-512, 547-549, 566, 574, 581, 583, 590-591, 597, 601, 612, 622-634, 679, 681, 736-750, 756, 764, 792-805, 808-809, 814-815, 827-846, 189->190, 204->208, 240->241, 242->243, 277->278, 314->315, 319->320, 338->339, 340->341, 360->361, 365->368, 391->393, 421->422, 423->424, 448->449, 451->453, 489->490, 492->493, 499->500, 510->511, 565->566, 567->570, 573->574, 575->578, 580->581, 582->583, 585->597, 589->590, 600->601, 603->606, 610->616, 611->612, 618->622, 673->679, 680->681, 763->764, 766->768, 821->830, 823->821 +src/allmydata/node.py 391 87 148 30 75% 20, 125, 137, 195, 246, 248-250, 283, 289, 308-311, 320, 325, 344, 346, 366, 373, 375, 382-384, 398-401, 427, 429, 454, 458, 495, 498, 505, 516-517, 606, 617, 634-638, 684, 686, 741-755, 761, 769, 797-810, 813-814, 819-820, 832-851, 19->20, 194->195, 209->213, 245->246, 247->248, 282->283, 319->320, 324->325, 343->344, 345->346, 365->366, 370->373, 396->398, 426->427, 428->429, 453->454, 456->458, 494->495, 497->498, 504->505, 515->516, 605->606, 616->617, 627->634, 678->684, 685->686, 768->769, 771->773, 826->835, 828->826 src/allmydata/nodemaker.py 97 71 38 0 21% 23-33, 36, 38, 41, 44-47, 49, 53-95, 98-115, 118-125, 129-138, 141-150 src/allmydata/scripts/admin.py 51 31 2 0 38% 9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78 src/allmydata/scripts/backupdb.py 146 146 14 0 0% 1-341 @@ -810,7 +638,7 @@ src/allmydata/util/dictutil.py 38 22 12 1 34% 16, 21-24, 27-31, 34-38, 55-56, 59-60, 63-64, 71, 77-78, 12->16 src/allmydata/util/eliotutil.py 115 68 24 0 35% 82-85, 91-94, 104, 117-122, 129-139, 151, 155-159, 163-167, 179-186, 198-199, 202-210, 222-226, 231-247, 250, 266-294, 308-312 src/allmydata/util/encodingutil.py 217 123 80 12 36% 18, 37-38, 41, 43, 52-53, 69, 75-78, 102, 108, 114-122, 130-134, 145-155, 164, 173-175, 178-181, 187, 196-213, 217-231, 237-243, 279-282, 291-296, 314, 320-322, 327, 334-340, 343-355, 358-363, 366-367, 370-373, 379, 395-405, 412-420, 423, 429, 16->18, 36->37, 40->41, 42->43, 66->69, 72->74, 74->75, 278->279, 285->295, 288->291, 299->310, 319->320 -src/allmydata/util/fileutil.py 343 244 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 279, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 +src/allmydata/util/fileutil.py 343 243 120 13 25% 15, 23-25, 47-55, 71-85, 96-97, 100, 103, 106, 109, 115-116, 119-125, 128, 131, 134, 137-138, 142-145, 151-153, 158, 166-176, 179-184, 201-203, 214-237, 241-244, 247-254, 262, 282-290, 293-304, 326, 328, 336-342, 348, 351, 358, 366-376, 382-400, 405, 410-426, 434-462, 486-529, 548-554, 566-568, 573-604, 608-612, 615-627, 633, 636-659, 13->15, 22->23, 200->201, 259->262, 325->326, 327->328, 332->336, 345->351, 347->348, 357->358, 380->382, 404->405, 571->573 src/allmydata/util/gcutil.py 23 3 8 3 81% 20, 51-57, 19->20, 50->51, 64->exit src/allmydata/util/happinessutil.py 77 62 42 1 13% 15, 25-54, 64-69, 82-92, 142-183, 207-223, 235-249, 13->15 src/allmydata/util/hashutil.py 157 76 8 1 50% 14, 40-42, 45-46, 49-56, 60-62, 66-68, 72-76, 118, 122, 126, 130, 134, 138, 142, 146, 150, 154, 158, 162, 166, 174-176, 180-183, 187, 191, 195, 199, 204, 209-210, 214-215, 219, 223-228, 232, 236, 240, 244, 248-250, 254, 258, 262, 266, 270-271, 278, 282, 12->14 @@ -818,7 +646,7 @@ src/allmydata/util/i2p_provider.py 121 73 36 5 35% 44-67, 72-81, 85-135, 151-161, 168, 176-180, 183-184, 187, 193-216, 219, 226, 167->168, 175->176, 182->183, 186->187, 192->193 src/allmydata/util/idlib.py 5 2 0 0 60% 6, 9 src/allmydata/util/iputil.py 172 74 56 12 52% 14, 63-102, 123-140, 151-184, 209, 216, 229, 237-238, 242, 246, 254-257, 271-277, 328-329, 353-354, 13->14, 215->216, 220->242, 226->229, 234->220, 239->234, 245->246, 249->259, 265->261, 291->329, 295->328, 360->exit -src/allmydata/util/log.py 52 27 16 1 38% 13, 38-41, 46-48, 51-61, 67-75, 78, 12->13 +src/allmydata/util/log.py 52 23 16 2 46% 13, 46-48, 51-61, 67-75, 78, 12->13, 39->41 src/allmydata/util/mathutil.py 12 3 2 1 71% 16, 25-26, 15->16 src/allmydata/util/netstring.py 35 24 12 1 26% 13, 31-54, 12->13 src/allmydata/util/observer.py 91 56 20 1 32% 14, 29-32, 36-38, 41, 44, 47, 50-54, 57-60, 63-66, 69-70, 79, 82, 93-97, 103, 106, 109, 112-113, 119-121, 134, 137-139, 142-145, 148-151, 154-157, 13->14 @@ -854,7 +682,7 @@ src/allmydata/windows/fixups.py 133 133 54 0 0% 1-237 src/allmydata/windows/registry.py 42 42 12 0 0% 1-77 ------------------------------------------------------------------------------------------------ -TOTAL 27467 22018 8248 184 17% +TOTAL 27470 21994 8250 176 17% 12 files skipped due to complete coverage. make[#]: Leaving directory '/home/rpatterson/src/work/sfu/tahoe-lafs' ```
2020-10-01 18:23:52 +00:00
more_storage="plugins=tahoe-lafs-dummy-vX",
),
)
self.assertThat(
client.create_client_from_config(
config,
_introducer_factory=MemoryIntroducerClient,
),
failed(
AfterPreprocessing(
lambda f: f.type,
Equals(configutil.UnknownConfigError),
),
),
)