Merge pull request #823 from tahoe-lafs/3431.port-test_immutable
Port test_immutable to Python 3
This commit is contained in:
commit
afd28f3402
|
@ -781,7 +781,7 @@ def create_mutable_filenode(contents, mdmf=False, all_contents=None):
|
|||
return filenode
|
||||
|
||||
|
||||
TEST_DATA="\x02"*(Uploader.URI_LIT_SIZE_THRESHOLD+1)
|
||||
TEST_DATA=b"\x02"*(Uploader.URI_LIT_SIZE_THRESHOLD+1)
|
||||
|
||||
|
||||
class WebErrorMixin(object):
|
||||
|
@ -958,12 +958,12 @@ def _corrupt_offset_of_block_hashes_to_truncate_crypttext_hashes(data, debug=Fal
|
|||
assert sharevernum in (1, 2), "This test is designed to corrupt immutable shares of v1 or v2 in specific ways."
|
||||
if sharevernum == 1:
|
||||
curval = struct.unpack(">L", data[0x0c+0x18:0x0c+0x18+4])[0]
|
||||
newval = random.randrange(0, max(1, (curval/hashutil.CRYPTO_VAL_SIZE)/2))*hashutil.CRYPTO_VAL_SIZE
|
||||
newval = random.randrange(0, max(1, (curval//hashutil.CRYPTO_VAL_SIZE)//2))*hashutil.CRYPTO_VAL_SIZE
|
||||
newvalstr = struct.pack(">L", newval)
|
||||
return data[:0x0c+0x18]+newvalstr+data[0x0c+0x18+4:]
|
||||
else:
|
||||
curval = struct.unpack(">Q", data[0x0c+0x2c:0x0c+0x2c+8])[0]
|
||||
newval = random.randrange(0, max(1, (curval/hashutil.CRYPTO_VAL_SIZE)/2))*hashutil.CRYPTO_VAL_SIZE
|
||||
newval = random.randrange(0, max(1, (curval//hashutil.CRYPTO_VAL_SIZE)//2))*hashutil.CRYPTO_VAL_SIZE
|
||||
newvalstr = struct.pack(">Q", newval)
|
||||
return data[:0x0c+0x2c]+newvalstr+data[0x0c+0x2c+8:]
|
||||
|
||||
|
|
|
@ -8,12 +8,10 @@ from twisted.internet import reactor, defer
|
|||
from twisted.trial import unittest
|
||||
|
||||
from ..util.assertutil import precondition
|
||||
from allmydata.util.encodingutil import get_io_encoding
|
||||
from future.utils import PY2
|
||||
if PY2: # XXX this is a hack that makes some tests pass on Python3, remove
|
||||
# in the future
|
||||
from ..scripts import runner
|
||||
from allmydata.util.encodingutil import get_io_encoding
|
||||
# Imported for backwards compatibility:
|
||||
from future.utils import bord, bchr, binary_type
|
||||
from .common_py3 import (
|
||||
SignalMixin, skip_if_cannot_represent_filename, ReallyEqualMixin, ShouldFailMixin
|
||||
)
|
||||
|
@ -57,9 +55,10 @@ class DevNullDictionary(dict):
|
|||
return
|
||||
|
||||
def insecurerandstr(n):
|
||||
return ''.join(map(chr, map(randrange, [0]*n, [256]*n)))
|
||||
return b''.join(map(bchr, map(randrange, [0]*n, [256]*n)))
|
||||
|
||||
def flip_bit(good, which):
|
||||
# TODO Probs need to update with bchr/bord as with flip_one_bit, below.
|
||||
# flip the low-order bit of good[which]
|
||||
if which == -1:
|
||||
pieces = good[:which], good[-1:], ""
|
||||
|
@ -70,10 +69,11 @@ def flip_bit(good, which):
|
|||
def flip_one_bit(s, offset=0, size=None):
|
||||
""" flip one random bit of the string s, in a byte greater than or equal to offset and less
|
||||
than offset+size. """
|
||||
precondition(isinstance(s, binary_type))
|
||||
if size is None:
|
||||
size=len(s)-offset
|
||||
i = randrange(offset, offset+size)
|
||||
result = s[:i] + chr(ord(s[i])^(0x01<<randrange(0, 8))) + s[i+1:]
|
||||
result = s[:i] + bchr(bord(s[i])^(0x01<<randrange(0, 8))) + s[i+1:]
|
||||
assert result != s, "Internal error -- flip_one_bit() produced the same string as its input: %s == %s" % (result, s)
|
||||
return result
|
||||
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
"""
|
||||
This module has been ported to Python 3.
|
||||
"""
|
||||
from __future__ import absolute_import
|
||||
from __future__ import division
|
||||
from __future__ import print_function
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from future.utils import PY2
|
||||
if PY2:
|
||||
from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401
|
||||
|
||||
import random
|
||||
import unittest
|
||||
|
||||
from allmydata.test.common_util import flip_one_bit
|
||||
|
||||
|
||||
class TestFlipOneBit(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
random.seed(42) # I tried using version=1 on PY3 to avoid the if below, to no avail.
|
||||
|
||||
def test_accepts_byte_string(self):
|
||||
actual = flip_one_bit(b'foo')
|
||||
self.assertEqual(actual, b'fno' if PY2 else b'fom')
|
||||
|
||||
def test_rejects_unicode_string(self):
|
||||
self.assertRaises(AssertionError, flip_one_bit, u'foo')
|
|
@ -1,3 +1,14 @@
|
|||
"""
|
||||
This module has been ported to Python 3.
|
||||
"""
|
||||
from __future__ import absolute_import
|
||||
from __future__ import division
|
||||
from __future__ import print_function
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from future.utils import PY2
|
||||
if PY2:
|
||||
from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401
|
||||
|
||||
import random
|
||||
|
||||
|
@ -79,7 +90,7 @@ class TestShareFinder(unittest.TestCase):
|
|||
# ever", and then immediately tell them "oh, and here's
|
||||
# another share", then you lose.
|
||||
|
||||
rcap = uri.CHKFileURI('a'*32, 'a'*32, 3, 99, 100)
|
||||
rcap = uri.CHKFileURI(b'a'*32, b'a'*32, 3, 99, 100)
|
||||
vcap = rcap.get_verify_cap()
|
||||
|
||||
class MockBuckets(object):
|
||||
|
@ -88,8 +99,8 @@ class TestShareFinder(unittest.TestCase):
|
|||
class MockServer(object):
|
||||
def __init__(self, buckets):
|
||||
self.version = {
|
||||
'http://allmydata.org/tahoe/protocols/storage/v1': {
|
||||
"tolerates-immutable-read-overrun": True
|
||||
b'http://allmydata.org/tahoe/protocols/storage/v1': {
|
||||
b"tolerates-immutable-read-overrun": True
|
||||
}
|
||||
}
|
||||
self.buckets = buckets
|
||||
|
@ -126,9 +137,9 @@ class TestShareFinder(unittest.TestCase):
|
|||
mockserver1 = MockServer({1: MockBuckets(), 2: MockBuckets()})
|
||||
mockserver2 = MockServer({})
|
||||
mockserver3 = MockServer({3: MockBuckets()})
|
||||
servers = [ NoNetworkServer("ms1", mockserver1),
|
||||
NoNetworkServer("ms2", mockserver2),
|
||||
NoNetworkServer("ms3", mockserver3), ]
|
||||
servers = [ NoNetworkServer(b"ms1", mockserver1),
|
||||
NoNetworkServer(b"ms2", mockserver2),
|
||||
NoNetworkServer(b"ms3", mockserver3), ]
|
||||
mockstoragebroker = MockStorageBroker(servers)
|
||||
mockdownloadstatus = MockDownloadStatus()
|
||||
mocknode = MockNode(check_reneging=True, check_fetch_failed=True)
|
||||
|
@ -155,7 +166,7 @@ class Test(GridTestMixin, unittest.TestCase, common.ShouldFailMixin):
|
|||
# Tests that need to test servers of happiness using this should
|
||||
# set their own value for happy -- the default (7) breaks stuff.
|
||||
c1.encoding_params['happy'] = 1
|
||||
d = c1.upload(Data(TEST_DATA, convergence=""))
|
||||
d = c1.upload(Data(TEST_DATA, convergence=b""))
|
||||
def _after_upload(ur):
|
||||
self.uri = ur.get_uri()
|
||||
self.filenode = self.g.clients[0].create_node_from_uri(ur.get_uri())
|
||||
|
@ -176,7 +187,7 @@ class Test(GridTestMixin, unittest.TestCase, common.ShouldFailMixin):
|
|||
return d
|
||||
|
||||
def _shuffled(self, num_shnums):
|
||||
shnums = range(10)
|
||||
shnums = list(range(10))
|
||||
random.shuffle(shnums)
|
||||
return shnums[:num_shnums]
|
||||
|
||||
|
|
|
@ -79,6 +79,7 @@ PORTED_TEST_MODULES = [
|
|||
"allmydata.test.test_base32",
|
||||
"allmydata.test.test_base62",
|
||||
"allmydata.test.test_codec",
|
||||
"allmydata.test.test_common_util",
|
||||
"allmydata.test.test_configutil",
|
||||
"allmydata.test.test_connection_status",
|
||||
"allmydata.test.test_crawler",
|
||||
|
@ -92,6 +93,7 @@ PORTED_TEST_MODULES = [
|
|||
"allmydata.test.test_hashtree",
|
||||
"allmydata.test.test_hashutil",
|
||||
"allmydata.test.test_humanreadable",
|
||||
"allmydata.test.test_immutable",
|
||||
"allmydata.test.test_iputil",
|
||||
"allmydata.test.test_log",
|
||||
"allmydata.test.test_monitor",
|
||||
|
|
Loading…
Reference in New Issue