Merge ~rodrigo-barbieri2010/ubuntu/+source/heat:lp2012073_yoga into ~ubuntu-openstack-dev/ubuntu/+source/heat:stable/yoga

Proposed by Rodrigo Barbieri
Status: Merged
Merged at revision: b442d2f38ed06af662c66502406e7c6282c8579f
Proposed branch: ~rodrigo-barbieri2010/ubuntu/+source/heat:lp2012073_yoga
Merge into: ~ubuntu-openstack-dev/ubuntu/+source/heat:stable/yoga
Diff against target: 344 lines (+322/-0)
3 files modified
debian/changelog (+6/-0)
debian/patches/lp2012073.patch (+315/-0)
debian/patches/series (+1/-0)
Reviewer Review Type Date Requested Status
Corey Bryant Pending
Review via email: mp+439169@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/debian/changelog b/debian/changelog
2index 67b6f4f..fc3911b 100644
3--- a/debian/changelog
4+++ b/debian/changelog
5@@ -1,3 +1,9 @@
6+heat (1:18.0.0-0ubuntu1.2) UNRELEASED; urgency=medium
7+
8+ * d/p/lp2012073.patch: Decode UTF-8 body data in SwiftSignal (LP: #2012073).
9+
10+ -- Rodrigo Barbieri <rodrigo.barbieri@canonical.com> Fri, 17 Mar 2023 12:46:43 -0300
11+
12 heat (1:18.0.0-0ubuntu1.1) jammy; urgency=medium
13
14 * d/gbp.conf: Create stable/yoga branch.
15diff --git a/debian/patches/lp2012073.patch b/debian/patches/lp2012073.patch
16new file mode 100644
17index 0000000..6014c58
18--- /dev/null
19+++ b/debian/patches/lp2012073.patch
20@@ -0,0 +1,315 @@
21+From 8eaaf6fcabf9b2f3e6d0bc967c8d1b67ac532f50 Mon Sep 17 00:00:00 2001
22+From: Zane Bitter <zbitter@redhat.com>
23+Date: Tue, 20 Dec 2022 22:51:55 -0500
24+Subject: [PATCH] Decode UTF-8 body data in SwiftSignal
25+
26+Change-Id: Ie12c2df93f846629a7c8b7c6415cebc31eaba1bc
27+Story: #2010485
28+Task: 47053
29+(cherry picked from commit a0ff4b98b700c7f31a9f14d3d62eeaf3b2047139)
30+(cherry picked from commit 6343b64e703221402f0d40fc0e62da944551e2dd)
31+---
32+ .../resources/openstack/heat/swiftsignal.py | 2 +
33+ heat/tests/openstack/heat/test_swiftsignal.py | 111 +++++++++---------
34+ 2 files changed, 59 insertions(+), 54 deletions(-)
35+
36+diff --git a/heat/engine/resources/openstack/heat/swiftsignal.py b/heat/engine/resources/openstack/heat/swiftsignal.py
37+index dc78b9310..295f6ae4f 100644
38+--- a/heat/engine/resources/openstack/heat/swiftsignal.py
39++++ b/heat/engine/resources/openstack/heat/swiftsignal.py
40+@@ -267,6 +267,8 @@ class SwiftSignal(resource.Resource):
41+ continue
42+
43+ body = signal[1]
44++ if isinstance(body, bytes):
45++ body = body.decode()
46+ if body == swift.IN_PROGRESS: # Ignore the initial object
47+ continue
48+ if body == "":
49+diff --git a/heat/tests/openstack/heat/test_swiftsignal.py b/heat/tests/openstack/heat/test_swiftsignal.py
50+index c3d2db0d6..427a87e79 100644
51+--- a/heat/tests/openstack/heat/test_swiftsignal.py
52++++ b/heat/tests/openstack/heat/test_swiftsignal.py
53+@@ -129,7 +129,8 @@ class SwiftSignalHandleTest(common.HeatTestCase):
54+ obj_name = "%s-%s-abcdefghijkl" % (st.name, handle.name)
55+ mock_name.return_value = obj_name
56+ mock_swift_object.get_container.return_value = cont_index(obj_name, 2)
57+- mock_swift_object.get_object.return_value = (obj_header, '{"id": "1"}')
58++ mock_swift_object.get_object.return_value = (obj_header,
59++ b'{"id": "1"}')
60+
61+ st.create()
62+ handle = st.resources['test_wait_condition_handle']
63+@@ -311,7 +312,7 @@ class SwiftSignalTest(common.HeatTestCase):
64+ obj_name = "%s-%s-abcdefghijkl" % (st.name, handle.name)
65+ mock_name.return_value = obj_name
66+ mock_swift_object.get_container.return_value = cont_index(obj_name, 2)
67+- mock_swift_object.get_object.return_value = (obj_header, '')
68++ mock_swift_object.get_object.return_value = (obj_header, b'')
69+
70+ st.create()
71+ self.assertEqual(('CREATE', 'COMPLETE'), st.state)
72+@@ -358,13 +359,13 @@ class SwiftSignalTest(common.HeatTestCase):
73+ mock_name.return_value = obj_name
74+ mock_swift_object.get_container.return_value = cont_index(obj_name, 2)
75+ mock_swift_object.get_object.side_effect = (
76+- (obj_header, json.dumps({'id': 1})),
77+- (obj_header, json.dumps({'id': 1})),
78+- (obj_header, json.dumps({'id': 1})),
79++ (obj_header, json.dumps({'id': 1}).encode()),
80++ (obj_header, json.dumps({'id': 1}).encode()),
81++ (obj_header, json.dumps({'id': 1}).encode()),
82+
83+- (obj_header, json.dumps({'id': 1})),
84+- (obj_header, json.dumps({'id': 2})),
85+- (obj_header, json.dumps({'id': 3})),
86++ (obj_header, json.dumps({'id': 1}).encode()),
87++ (obj_header, json.dumps({'id': 2}).encode()),
88++ (obj_header, json.dumps({'id': 3}).encode()),
89+ )
90+
91+ st.create()
92+@@ -385,8 +386,8 @@ class SwiftSignalTest(common.HeatTestCase):
93+ obj_name = "%s-%s-abcdefghijkl" % (st.name, handle.name)
94+ mock_name.return_value = obj_name
95+ mock_swift_object.get_container.return_value = cont_index(obj_name, 2)
96+- mock_swift_object.get_object.return_value = (obj_header,
97+- json.dumps({'id': 1}))
98++ body = json.dumps({'id': 1}).encode()
99++ mock_swift_object.get_object.return_value = (obj_header, body)
100+
101+ time_now = timeutils.utcnow()
102+ time_series = [datetime.timedelta(0, t) + time_now
103+@@ -419,9 +420,9 @@ class SwiftSignalTest(common.HeatTestCase):
104+ mock_name.return_value = obj_name
105+ mock_swift_object.get_container.return_value = cont_index(obj_name, 2)
106+ mock_swift_object.get_object.side_effect = (
107+- (obj_header, json.dumps({'id': 1, 'status': "SUCCESS"})),
108+- (obj_header, json.dumps({'id': 1, 'status': "SUCCESS"})),
109+- (obj_header, json.dumps({'id': 2, 'status': "SUCCESS"})),
110++ (obj_header, json.dumps({'id': 1, 'status': "SUCCESS"}).encode()),
111++ (obj_header, json.dumps({'id': 1, 'status': "SUCCESS"}).encode()),
112++ (obj_header, json.dumps({'id': 2, 'status': "SUCCESS"}).encode()),
113+ )
114+
115+ st.create()
116+@@ -445,15 +446,15 @@ class SwiftSignalTest(common.HeatTestCase):
117+ mock_swift_object.get_object.side_effect = (
118+ # Create
119+ (obj_header, json.dumps({'id': 1, 'status': "FAILURE",
120+- 'reason': "foo"})),
121++ 'reason': "foo"}).encode()),
122+ (obj_header, json.dumps({'id': 2, 'status': "FAILURE",
123+- 'reason': "bar"})),
124++ 'reason': "bar"}).encode()),
125+
126+ # SwiftSignalFailure
127+ (obj_header, json.dumps({'id': 1, 'status': "FAILURE",
128+- 'reason': "foo"})),
129++ 'reason': "foo"}).encode()),
130+ (obj_header, json.dumps({'id': 2, 'status': "FAILURE",
131+- 'reason': "bar"})),
132++ 'reason': "bar"}).encode()),
133+ )
134+
135+ st.create()
136+@@ -480,14 +481,14 @@ class SwiftSignalTest(common.HeatTestCase):
137+
138+ mock_swift_object.get_object.side_effect = (
139+ # st create
140+- (obj_header, json.dumps({'id': 1, 'data': "foo"})),
141+- (obj_header, json.dumps({'id': 2, 'data': "bar"})),
142+- (obj_header, json.dumps({'id': 3, 'data': "baz"})),
143++ (obj_header, json.dumps({'id': 1, 'data': "foo"}).encode()),
144++ (obj_header, json.dumps({'id': 2, 'data': "bar"}).encode()),
145++ (obj_header, json.dumps({'id': 3, 'data': "baz"}).encode()),
146+
147+ # FnGetAtt call
148+- (obj_header, json.dumps({'id': 1, 'data': "foo"})),
149+- (obj_header, json.dumps({'id': 2, 'data': "bar"})),
150+- (obj_header, json.dumps({'id': 3, 'data': "baz"})),
151++ (obj_header, json.dumps({'id': 1, 'data': "foo"}).encode()),
152++ (obj_header, json.dumps({'id': 2, 'data': "bar"}).encode()),
153++ (obj_header, json.dumps({'id': 3, 'data': "baz"}).encode()),
154+ )
155+
156+ st.create()
157+@@ -515,15 +516,15 @@ class SwiftSignalTest(common.HeatTestCase):
158+ mock_swift_object.get_object.side_effect = (
159+ # st create
160+ (obj_header, json.dumps({'data': "foo", 'reason': "bar",
161+- 'status': "SUCCESS"})),
162++ 'status': "SUCCESS"}).encode()),
163+ (obj_header, json.dumps({'data': "dog", 'reason': "cat",
164+- 'status': "SUCCESS"})),
165++ 'status': "SUCCESS"}).encode()),
166+
167+ # FnGetAtt call
168+ (obj_header, json.dumps({'data': "foo", 'reason': "bar",
169+- 'status': "SUCCESS"})),
170++ 'status': "SUCCESS"}).encode()),
171+ (obj_header, json.dumps({'data': "dog", 'reason': "cat",
172+- 'status': "SUCCESS"})),
173++ 'status': "SUCCESS"}).encode()),
174+ )
175+
176+ st.create()
177+@@ -549,12 +550,12 @@ class SwiftSignalTest(common.HeatTestCase):
178+
179+ mock_swift_object.get_object.side_effect = (
180+ # st create
181+- (obj_header, ''),
182+- (obj_header, ''),
183++ (obj_header, b''),
184++ (obj_header, b''),
185+
186+ # FnGetAtt call
187+- (obj_header, ''),
188+- (obj_header, ''),
189++ (obj_header, b''),
190++ (obj_header, b''),
191+ )
192+
193+ st.create()
194+@@ -579,7 +580,7 @@ class SwiftSignalTest(common.HeatTestCase):
195+ mock_name.return_value = obj_name
196+ mock_swift_object.get_container.return_value = cont_index(obj_name, 1)
197+ mock_swift_object.get_object.return_value = (
198+- obj_header, json.dumps({'status': 'SUCCESS'}))
199++ obj_header, json.dumps({'status': 'SUCCESS'}).encode())
200+
201+ st.create()
202+ self.assertEqual(['SUCCESS', 'SUCCESS'], wc.get_status())
203+@@ -605,7 +606,7 @@ class SwiftSignalTest(common.HeatTestCase):
204+ obj_name = "%s-%s-abcdefghijkl" % (st.name, handle.name)
205+ mock_name.return_value = obj_name
206+ mock_swift_object.get_container.return_value = cont_index(obj_name, 1)
207+- mock_swift_object.get_object.return_value = (obj_header, '')
208++ mock_swift_object.get_object.return_value = (obj_header, b'')
209+
210+ st.create()
211+ self.assertEqual(['SUCCESS', 'SUCCESS'], wc.get_status())
212+@@ -632,7 +633,7 @@ class SwiftSignalTest(common.HeatTestCase):
213+ mock_name.return_value = obj_name
214+ mock_swift_object.get_container.return_value = cont_index(obj_name, 1)
215+ mock_swift_object.get_object.return_value = (
216+- obj_header, json.dumps({'id': 1, 'status': "SUCCESS"}))
217++ obj_header, json.dumps({'id': 1, 'status': "SUCCESS"}).encode())
218+
219+ st.create()
220+ self.assertEqual(['SUCCESS'], wc.get_status())
221+@@ -657,7 +658,7 @@ class SwiftSignalTest(common.HeatTestCase):
222+ mock_name.return_value = obj_name
223+ mock_swift_object.get_container.return_value = cont_index(obj_name, 1)
224+ mock_swift_object.get_object.return_value = (
225+- obj_header, json.dumps({'id': 1, 'status': "FAILURE"}))
226++ obj_header, json.dumps({'id': 1, 'status': "FAILURE"}).encode())
227+
228+ st.create()
229+ self.assertEqual(('CREATE', 'FAILED'), st.state)
230+@@ -684,8 +685,8 @@ class SwiftSignalTest(common.HeatTestCase):
231+
232+ mock_swift_object.get_object.side_effect = (
233+ # st create
234+- (obj_header, ''),
235+- (obj_header, ''),
236++ (obj_header, b''),
237++ (obj_header, b''),
238+ )
239+
240+ st.create()
241+@@ -710,8 +711,8 @@ class SwiftSignalTest(common.HeatTestCase):
242+
243+ mock_swift_object.get_object.side_effect = (
244+ # st create
245+- (obj_header, ''),
246+- (obj_header, ''),
247++ (obj_header, b''),
248++ (obj_header, b''),
249+ )
250+
251+ st.create()
252+@@ -740,8 +741,8 @@ class SwiftSignalTest(common.HeatTestCase):
253+
254+ mock_swift_object.get_object.side_effect = (
255+ # st create
256+- (obj_header, ''),
257+- (obj_header, ''),
258++ (obj_header, b''),
259++ (obj_header, b''),
260+ )
261+
262+ st.create()
263+@@ -771,8 +772,8 @@ class SwiftSignalTest(common.HeatTestCase):
264+
265+ mock_swift_object.get_object.side_effect = (
266+ # st create
267+- (obj_header, '{"status": "SUCCESS"'),
268+- (obj_header, '{"status": "FAI'),
269++ (obj_header, b'{"status": "SUCCESS"'),
270++ (obj_header, b'{"status": "FAI'),
271+ )
272+
273+ st.create()
274+@@ -799,7 +800,7 @@ class SwiftSignalTest(common.HeatTestCase):
275+ mock_swift_object.get_container.return_value = cont_index(obj_name, 1)
276+
277+ mock_swift_object.get_object.return_value = (
278+- obj_header, '{"status": "BOO"}')
279++ obj_header, b'{"status": "BOO"}')
280+
281+ st.create()
282+ self.assertEqual(('CREATE', 'FAILED'), st.state)
283+@@ -826,9 +827,10 @@ class SwiftSignalTest(common.HeatTestCase):
284+ (container_header, []), # The user deleted the objects
285+ )
286+ mock_swift_object.get_object.side_effect = (
287+- (obj_header, json.dumps({'id': 1})), # Objects there during create
288+- (obj_header, json.dumps({'id': 2})),
289+- (obj_header, json.dumps({'id': 3})),
290++ # Objects there during create
291++ (obj_header, json.dumps({'id': 1}).encode()),
292++ (obj_header, json.dumps({'id': 2}).encode()),
293++ (obj_header, json.dumps({'id': 3}).encode()),
294+ )
295+
296+ st.create()
297+@@ -859,8 +861,8 @@ class SwiftSignalTest(common.HeatTestCase):
298+ cont_index(obj_name, 1),
299+ )
300+ mock_swift_object.get_object.side_effect = (
301+- (obj_header, json.dumps({'id': 1})),
302+- (obj_header, json.dumps({'id': 2})),
303++ (obj_header, json.dumps({'id': 1}).encode()),
304++ (obj_header, json.dumps({'id': 2}).encode()),
305+ )
306+
307+ st.create()
308+@@ -886,9 +888,10 @@ class SwiftSignalTest(common.HeatTestCase):
309+ http_status=404) # User deleted
310+ ]
311+ mock_swift_object.get_object.side_effect = (
312+- (obj_header, json.dumps({'id': 1})), # Objects there during create
313+- (obj_header, json.dumps({'id': 2})),
314+- (obj_header, json.dumps({'id': 3})),
315++ # Objects there during create
316++ (obj_header, json.dumps({'id': 1}).encode()),
317++ (obj_header, json.dumps({'id': 2}).encode()),
318++ (obj_header, json.dumps({'id': 3}).encode()),
319+ )
320+
321+ st.create()
322+@@ -914,8 +917,8 @@ class SwiftSignalTest(common.HeatTestCase):
323+ mock_swift_object.get_object.side_effect = (
324+ swiftclient_client.ClientException(
325+ "Object %s not found" % obj_name, http_status=404),
326+- (obj_header, '{"id": 1}'),
327+- (obj_header, '{"id": 2}'),
328++ (obj_header, b'{"id": 1}'),
329++ (obj_header, b'{"id": 2}'),
330+ )
331+
332+ st.create()
333+--
334+2.34.1
335+
336diff --git a/debian/patches/series b/debian/patches/series
337index 7e82124..533ddfa 100644
338--- a/debian/patches/series
339+++ b/debian/patches/series
340@@ -1,3 +1,4 @@
341 drop-zun.patch
342 sudoers_patch.patch
343 honor-hidden-parameter.patch
344+lp2012073.patch

Subscribers

People subscribed via source and target branches