Tests pass on Python 2 and 3.

This commit is contained in:
Itamar Turner-Trauring 2020-08-24 13:53:27 -04:00
parent 388f27d206
commit 0e15712e34
2 changed files with 32 additions and 33 deletions

View File

@ -202,24 +202,24 @@ class CHKFile(testutil.ReallyEqualMixin, unittest.TestCase):
class Extension(testutil.ReallyEqualMixin, unittest.TestCase): class Extension(testutil.ReallyEqualMixin, unittest.TestCase):
def test_pack(self): def test_pack(self):
data = {"stuff": b"value", data = {b"stuff": b"value",
"size": 12, b"size": 12,
"needed_shares": 3, b"needed_shares": 3,
"big_hash": hashutil.tagged_hash(b"foo", b"bar"), b"big_hash": hashutil.tagged_hash(b"foo", b"bar"),
} }
ext = uri.pack_extension(data) ext = uri.pack_extension(data)
d = uri.unpack_extension(ext) d = uri.unpack_extension(ext)
self.failUnlessReallyEqual(d["stuff"], b"value") self.failUnlessReallyEqual(d[b"stuff"], b"value")
self.failUnlessReallyEqual(d["size"], 12) self.failUnlessReallyEqual(d[b"size"], 12)
self.failUnlessReallyEqual(d["big_hash"], hashutil.tagged_hash(b"foo", b"bar")) self.failUnlessReallyEqual(d[b"big_hash"], hashutil.tagged_hash(b"foo", b"bar"))
readable = uri.unpack_extension_readable(ext) readable = uri.unpack_extension_readable(ext)
self.failUnlessReallyEqual(readable["needed_shares"], 3) self.failUnlessReallyEqual(readable[b"needed_shares"], 3)
self.failUnlessReallyEqual(readable["stuff"], b"value") self.failUnlessReallyEqual(readable[b"stuff"], b"value")
self.failUnlessReallyEqual(readable["size"], 12) self.failUnlessReallyEqual(readable[b"size"], 12)
self.failUnlessReallyEqual(readable["big_hash"], self.failUnlessReallyEqual(readable[b"big_hash"],
base32.b2a(hashutil.tagged_hash(b"foo", b"bar"))) base32.b2a(hashutil.tagged_hash(b"foo", b"bar")))
self.failUnlessReallyEqual(readable["UEB_hash"], self.failUnlessReallyEqual(readable[b"UEB_hash"],
base32.b2a(hashutil.uri_extension_hash(ext))) base32.b2a(hashutil.uri_extension_hash(ext)))
class Unknown(testutil.ReallyEqualMixin, unittest.TestCase): class Unknown(testutil.ReallyEqualMixin, unittest.TestCase):
@ -254,7 +254,7 @@ class Unknown(testutil.ReallyEqualMixin, unittest.TestCase):
class Constraint(testutil.ReallyEqualMixin, unittest.TestCase): class Constraint(testutil.ReallyEqualMixin, unittest.TestCase):
def test_constraint(self): def test_constraint(self):
bad = "http://127.0.0.1:3456/uri/URI%3ADIR2%3Agh3l5rbvnv2333mrfvalmjfr4i%3Alz6l7u3z3b7g37s4zkdmfpx5ly4ib4m6thrpbusi6ys62qtc6mma/" bad = b"http://127.0.0.1:3456/uri/URI%3ADIR2%3Agh3l5rbvnv2333mrfvalmjfr4i%3Alz6l7u3z3b7g37s4zkdmfpx5ly4ib4m6thrpbusi6ys62qtc6mma/"
self.failUnlessRaises(uri.BadURIError, uri.DirectoryURI.init_from_string, bad) self.failUnlessRaises(uri.BadURIError, uri.DirectoryURI.init_from_string, bad)
fileURI = b'URI:CHK:gh3l5rbvnv2333mrfvalmjfr4i:lz6l7u3z3b7g37s4zkdmfpx5ly4ib4m6thrpbusi6ys62qtc6mma:3:10:345834' fileURI = b'URI:CHK:gh3l5rbvnv2333mrfvalmjfr4i:lz6l7u3z3b7g37s4zkdmfpx5ly4ib4m6thrpbusi6ys62qtc6mma:3:10:345834'
uri.CHKFileURI.init_from_string(fileURI) uri.CHKFileURI.init_from_string(fileURI)

View File

@ -167,7 +167,7 @@ class LiteralFileURI(_BaseURI):
def __init__(self, data=None): def __init__(self, data=None):
if data is not None: if data is not None:
assert isinstance(data, str) assert isinstance(data, bytes)
self.data = data self.data = data
@classmethod @classmethod
@ -222,8 +222,8 @@ class WriteableSSKFileURI(_BaseURI):
return cls(base32.a2b(mo.group(1)), base32.a2b(mo.group(2))) return cls(base32.a2b(mo.group(1)), base32.a2b(mo.group(2)))
def to_string(self): def to_string(self):
assert isinstance(self.writekey, str) assert isinstance(self.writekey, bytes)
assert isinstance(self.fingerprint, str) assert isinstance(self.fingerprint, bytes)
return b'URI:SSK:%s:%s' % (base32.b2a(self.writekey), return b'URI:SSK:%s:%s' % (base32.b2a(self.writekey),
base32.b2a(self.fingerprint)) base32.b2a(self.fingerprint))
@ -269,8 +269,8 @@ class ReadonlySSKFileURI(_BaseURI):
return cls(base32.a2b(mo.group(1)), base32.a2b(mo.group(2))) return cls(base32.a2b(mo.group(1)), base32.a2b(mo.group(2)))
def to_string(self): def to_string(self):
assert isinstance(self.readkey, str) assert isinstance(self.readkey, bytes)
assert isinstance(self.fingerprint, str) assert isinstance(self.fingerprint, bytes)
return b'URI:SSK-RO:%s:%s' % (base32.b2a(self.readkey), return b'URI:SSK-RO:%s:%s' % (base32.b2a(self.readkey),
base32.b2a(self.fingerprint)) base32.b2a(self.fingerprint))
@ -315,8 +315,8 @@ class SSKVerifierURI(_BaseURI):
return cls(si_a2b(mo.group(1)), base32.a2b(mo.group(2))) return cls(si_a2b(mo.group(1)), base32.a2b(mo.group(2)))
def to_string(self): def to_string(self):
assert isinstance(self.storage_index, str) assert isinstance(self.storage_index, bytes)
assert isinstance(self.fingerprint, str) assert isinstance(self.fingerprint, bytes)
return b'URI:SSK-Verifier:%s:%s' % (si_b2a(self.storage_index), return b'URI:SSK-Verifier:%s:%s' % (si_b2a(self.storage_index),
base32.b2a(self.fingerprint)) base32.b2a(self.fingerprint))
@ -354,8 +354,8 @@ class WriteableMDMFFileURI(_BaseURI):
return cls(base32.a2b(mo.group(1)), base32.a2b(mo.group(2))) return cls(base32.a2b(mo.group(1)), base32.a2b(mo.group(2)))
def to_string(self): def to_string(self):
assert isinstance(self.writekey, str) assert isinstance(self.writekey, bytes)
assert isinstance(self.fingerprint, str) assert isinstance(self.fingerprint, bytes)
ret = b'URI:MDMF:%s:%s' % (base32.b2a(self.writekey), ret = b'URI:MDMF:%s:%s' % (base32.b2a(self.writekey),
base32.b2a(self.fingerprint)) base32.b2a(self.fingerprint))
return ret return ret
@ -403,8 +403,8 @@ class ReadonlyMDMFFileURI(_BaseURI):
return cls(base32.a2b(mo.group(1)), base32.a2b(mo.group(2))) return cls(base32.a2b(mo.group(1)), base32.a2b(mo.group(2)))
def to_string(self): def to_string(self):
assert isinstance(self.readkey, str) assert isinstance(self.readkey, bytes)
assert isinstance(self.fingerprint, str) assert isinstance(self.fingerprint, bytes)
ret = b'URI:MDMF-RO:%s:%s' % (base32.b2a(self.readkey), ret = b'URI:MDMF-RO:%s:%s' % (base32.b2a(self.readkey),
base32.b2a(self.fingerprint)) base32.b2a(self.fingerprint))
return ret return ret
@ -450,8 +450,8 @@ class MDMFVerifierURI(_BaseURI):
return cls(si_a2b(mo.group(1)), base32.a2b(mo.group(2))) return cls(si_a2b(mo.group(1)), base32.a2b(mo.group(2)))
def to_string(self): def to_string(self):
assert isinstance(self.storage_index, str) assert isinstance(self.storage_index, bytes)
assert isinstance(self.fingerprint, str) assert isinstance(self.fingerprint, bytes)
ret = b'URI:MDMF-Verifier:%s:%s' % (si_b2a(self.storage_index), ret = b'URI:MDMF-Verifier:%s:%s' % (si_b2a(self.storage_index),
base32.b2a(self.fingerprint)) base32.b2a(self.fingerprint))
return ret return ret
@ -907,14 +907,14 @@ def unpack_extension(data):
data = data[colon+1:] data = data[colon+1:]
value = data[:length] value = data[:length]
assert data[length] == b',' assert data[length:length+1] == b','
data = data[length+1:] data = data[length+1:]
d[key.decode("utf-8")] = value d[key] = value
# convert certain things to numbers # convert certain things to numbers
for intkey in ('size', 'segment_size', 'num_segments', for intkey in (b'size', b'segment_size', b'num_segments',
'needed_shares', 'total_shares'): b'needed_shares', b'total_shares'):
if intkey in d: if intkey in d:
d[intkey] = int(d[intkey]) d[intkey] = int(d[intkey])
return d return d
@ -922,10 +922,9 @@ def unpack_extension(data):
def unpack_extension_readable(data): def unpack_extension_readable(data):
unpacked = unpack_extension(data) unpacked = unpack_extension(data)
unpacked["UEB_hash"] = hashutil.uri_extension_hash(data) unpacked[b"UEB_hash"] = hashutil.uri_extension_hash(data)
for k in sorted(unpacked.keys()): for k in sorted(unpacked.keys()):
k = k.decode("utf-8") if b'hash' in k:
if 'hash' in k:
unpacked[k] = base32.b2a(unpacked[k]) unpacked[k] = base32.b2a(unpacked[k])
return unpacked return unpacked