[test-only] OverflowError running on 32-bit systems

Change I59b1579dc9877668b82d4195431c1 added tests that mock an
input buffer, but the mocked return_value for __len__ exceeds the
allowable maximum value for an index in the CPython implementation
on 32-bit systems.  Fix this by using half the value and allowing
the buffer to be called twice during the tests.

Change-Id: Iaba20c01fb4d994cd738a570197f8f6f04f22606
Closes-bug: #1991406
This commit is contained in:
Brian Rosmaita 2022-09-30 12:19:11 -04:00
parent d2dfe692f3
commit 0df64d5af9
1 changed files with 18 additions and 6 deletions

View File

@ -591,7 +591,11 @@ class TestCinderStoreBase(object):
expected_multihash = 'fake_hash'
fakebuffer = mock.MagicMock()
fakebuffer.__len__.return_value = expected_volume_size
# CPython implementation detail: __len__ cannot return > sys.maxsize,
# which on a 32-bit system is 2*units.Gi - 1
# https://docs.python.org/3/reference/datamodel.html#object.__len__
fakebuffer.__len__.return_value = int(expected_volume_size / 2)
def get_fake_hash(type, secure=False):
if type == 'md5':
@ -603,7 +607,7 @@ class TestCinderStoreBase(object):
expected_volume_id = str(uuid.uuid4())
expected_size = 0
image_file = mock.MagicMock(
read=mock.MagicMock(side_effect=[fakebuffer, None]))
read=mock.MagicMock(side_effect=[fakebuffer, fakebuffer, None]))
fake_volume = mock.MagicMock(id=expected_volume_id, status='available',
size=1)
expected_checksum = 'fake_checksum'
@ -667,13 +671,17 @@ class TestCinderStoreBase(object):
expected_volume_size = 2 * units.Gi
fakebuffer = mock.MagicMock()
fakebuffer.__len__.return_value = expected_volume_size
# CPython implementation detail: __len__ cannot return > sys.maxsize,
# which on a 32-bit system is 2*units.Gi - 1
# https://docs.python.org/3/reference/datamodel.html#object.__len__
fakebuffer.__len__.return_value = int(expected_volume_size / 2)
expected_image_id = str(uuid.uuid4())
expected_volume_id = str(uuid.uuid4())
expected_size = 0
image_file = mock.MagicMock(
read=mock.MagicMock(side_effect=[fakebuffer, None]))
read=mock.MagicMock(side_effect=[fakebuffer, fakebuffer, None]))
fake_volume = mock.MagicMock(id=expected_volume_id, status='available',
size=1)
verifier = None
@ -704,13 +712,17 @@ class TestCinderStoreBase(object):
expected_volume_size = 2 * units.Gi
fakebuffer = mock.MagicMock()
fakebuffer.__len__.return_value = expected_volume_size
# CPython implementation detail: __len__ cannot return > sys.maxsize,
# which on a 32-bit system is 2*units.Gi - 1
# https://docs.python.org/3/reference/datamodel.html#object.__len__
fakebuffer.__len__.return_value = int(expected_volume_size / 2)
expected_image_id = str(uuid.uuid4())
expected_volume_id = str(uuid.uuid4())
expected_size = 0
image_file = mock.MagicMock(
read=mock.MagicMock(side_effect=[fakebuffer, None]))
read=mock.MagicMock(side_effect=[fakebuffer, fakebuffer, None]))
fake_volume = mock.MagicMock(
id=expected_volume_id, status='available', size=1,
delete=mock.MagicMock(side_effect=Exception()))