From 6acddc9104b72bd7f6230322d74d503593a6215c Mon Sep 17 00:00:00 2001 From: Artem Goncharov Date: Fri, 30 Sep 2022 19:16:47 +0200 Subject: [PATCH] Improve swift headers handling Test on a cloud with RADOS uncovered that headers come back lowcase. Our devstack tests do not have this issue. To fix this ensure we do lowcase and also add tests for that. Change-Id: I8e3c44e04238dc19d65c670e6b24e8251e44364f --- openstack/object_store/v1/_base.py | 5 ++++- openstack/tests/unit/object_store/v1/test_obj.py | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/openstack/object_store/v1/_base.py b/openstack/object_store/v1/_base.py index 96b620ede..d429b13a1 100644 --- a/openstack/object_store/v1/_base.py +++ b/openstack/object_store/v1/_base.py @@ -84,7 +84,10 @@ class BaseResource(resource.Resource): self.metadata = dict() for header in headers: - if header.startswith(self._custom_metadata_prefix): + # RADOS and other stuff in front may actually lowcase headers + if header.lower().startswith( + self._custom_metadata_prefix.lower() + ): key = header[len(self._custom_metadata_prefix):].lower() self.metadata[key] = headers[header] diff --git a/openstack/tests/unit/object_store/v1/test_obj.py b/openstack/tests/unit/object_store/v1/test_obj.py index b4af0c540..30f58a3f4 100644 --- a/openstack/tests/unit/object_store/v1/test_obj.py +++ b/openstack/tests/unit/object_store/v1/test_obj.py @@ -116,6 +116,15 @@ class TestObject(base_test_object.BaseTestObject): self.assertEqual(self.headers['Content-Type'], sot.content_type) self.assertEqual(self.headers['X-Delete-At'], sot.delete_at) + # Verify that we also properly process lowcased headers + # All headers are processed in _base._set_metadata therefore invoke it + # here directly + sot._set_metadata(headers={"x-object-meta-foo": "bar"}) + self.assert_no_calls() + + # Attributes from header + self.assertEqual("bar", sot.metadata["foo"]) + def test_download(self): headers = { 'X-Newest': 'True',