diff options
author | Brian Rosmaita <rosmaita.fossdev@gmail.com> | 2022-09-30 12:19:11 -0400 |
---|---|---|
committer | Brian Rosmaita <rosmaita.fossdev@gmail.com> | 2022-10-12 09:45:44 -0400 |
commit | 0df64d5af92b46457fd3f13aceb69b4f94b8b53c (patch) | |
tree | e8992c0ddf8bbcaf5f103f2017069fe69aee244e | |
parent | d2dfe692f366bf0ae55532c9509a6fd11fff410a (diff) | |
download | glance_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.py | 24 |
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())) |