From a54503e9921ca2abaadbbc17f9c21dc0f66d3300 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Fri, 14 Feb 2025 00:02:21 +0900 Subject: [PATCH] Fix handling of empty reseller_prefix The reseller_prefix can be an empty string. Make sure that the bare account string is used in case it's empty. Closes-Bug: #1835894 Change-Id: If181f812d06cfb68f07faf6b6bd050574eafde46 --- ceilometermiddleware/swift.py | 6 +++++- ceilometermiddleware/tests/test_swift.py | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/ceilometermiddleware/swift.py b/ceilometermiddleware/swift.py index 9e0082c..9743121 100644 --- a/ceilometermiddleware/swift.py +++ b/ceilometermiddleware/swift.py @@ -355,9 +355,13 @@ class Swift(object): header.upper()) # build object store details + if self.reseller_prefix: + resource_id = account.partition(self.reseller_prefix)[2] or path + else: + resource_id = account target = cadf_resource.Resource( typeURI='service/storage/object', - id=account.partition(self.reseller_prefix)[2] or path) + id=resource_id) target.metadata = resource_metadata target.action = method.lower() diff --git a/ceilometermiddleware/tests/test_swift.py b/ceilometermiddleware/tests/test_swift.py index 43e0835..d527513 100644 --- a/ceilometermiddleware/tests/test_swift.py +++ b/ceilometermiddleware/tests/test_swift.py @@ -337,7 +337,7 @@ class TestSwift(tests_base.TestCase): data = notify.call_args_list[0][0] self.assertEqual("account", data[2]['target']['id']) - def test_custom_prefix(self): + def test_custom_reseller_prefix(self): app = swift.Swift(FakeApp(), {'reseller_prefix': 'CUSTOM_'}) req = FakeRequest('/1.0/CUSTOM_account/container/obj', environ={'REQUEST_METHOD': 'GET'}) @@ -347,6 +347,16 @@ class TestSwift(tests_base.TestCase): data = notify.call_args_list[0][0] self.assertEqual("account", data[2]['target']['id']) + def test_empty_reseller_prefix(self): + app = swift.Swift(FakeApp(), {'reseller_prefix': ''}) + req = FakeRequest('/1.0/account/container/obj', + environ={'REQUEST_METHOD': 'GET'}) + with mock.patch('oslo_messaging.Notifier.info') as notify: + list(app(req.environ, self.start_response)) + self.assertEqual(1, len(notify.call_args_list)) + data = notify.call_args_list[0][0] + self.assertEqual("account", data[2]['target']['id']) + def test_incomplete_reseller_prefix(self): # Custom reseller prefix set, but without trailing underscore app = swift.Swift( @@ -397,7 +407,7 @@ class TestSwift(tests_base.TestCase): list(app(req.environ, self.start_response)) self.assertEqual(calls, len(notify.call_args_list)) - def test_empty_reseller_prefix(self): + def test_only_reseller_prefix(self): app = swift.Swift( FakeApp(), {'reseller_prefix': 'CUSTOM'}) req = FakeRequest('/1.0/CUSTOM/container/obj',