summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Rosmaita <rosmaita.fossdev@gmail.com>2022-09-30 12:19:11 -0400
committerBrian Rosmaita <rosmaita.fossdev@gmail.com>2022-10-12 09:45:44 -0400
commit0df64d5af92b46457fd3f13aceb69b4f94b8b53c (patch)
treee8992c0ddf8bbcaf5f103f2017069fe69aee244e
parentd2dfe692f366bf0ae55532c9509a6fd11fff410a (diff)
downloadglance_store-0df64d5af92b46457fd3f13aceb69b4f94b8b53c.tar.gz
[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
-rw-r--r--glance_store/tests/unit/test_cinder_base.py24
1 files changed, 18 insertions, 6 deletions
diff --git a/glance_store/tests/unit/test_cinder_base.py b/glance_store/tests/unit/test_cinder_base.py
index d7fca2f..c602549 100644
--- a/glance_store/tests/unit/test_cinder_base.py
+++ b/glance_store/tests/unit/test_cinder_base.py
@@ -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()))