File: OverflowError_running_on_32-bit_systems.patch

package info (click to toggle)
python-glance-store 4.1.0-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,872 kB
  • sloc: python: 17,197; sh: 231; makefile: 33
file content (79 lines) | stat: -rw-r--r-- 3,671 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
From: Brian Rosmaita <rosmaita.fossdev@gmail.com>
Date: Fri, 30 Sep 2022 12:19:11 -0400
Description: 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
Origin: upstream, https://review.opendev.org/c/openstack/glance_store/+/860004
Last-Update: 2022-10-01

diff --git a/glance_store/tests/unit/test_cinder_base.py b/glance_store/tests/unit/test_cinder_base.py
index d7fca2f..712ed15 100644
--- a/glance_store/tests/unit/test_cinder_base.py
+++ b/glance_store/tests/unit/test_cinder_base.py
@@ -591,7 +591,11 @@
         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 = units.Gi
 
         def get_fake_hash(type, secure=False):
             if type == 'md5':
@@ -603,7 +607,7 @@
         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 @@
         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 @@
         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()))