summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRohit Jaiswal <rohit.jaiswal@hp.com>2015-08-26 17:06:12 +0000
committerRohit Jaiswal <rohit.jaiswal@hp.com>2015-08-28 06:13:29 +0000
commit41e869a311e39f25044f4200c15501c17fe4a05e (patch)
treee837dfc392a495fb4851be055eb4c5e24facf214
parent45fc416606712f4030abdbd6dd153e7d6318a9e0 (diff)
downloadceilometermiddleware-41e869a311e39f25044f4200c15501c17fe4a05e.tar.gz
Fixes parsing req path for account HEAD/GET
When path is of the form /v1/AUTH_xyz, the path parsing expects 3 tokens, this fix retries parsing to expect 2 tokens, so that operations at an account level can be metered. Change-Id: I5eb83e39e7902b9410487c98295f12640aeef140 Closes-Bug: 1488682
-rw-r--r--ceilometermiddleware/swift.py11
-rw-r--r--ceilometermiddleware/tests/test_swift.py16
2 files changed, 25 insertions, 2 deletions
diff --git a/ceilometermiddleware/swift.py b/ceilometermiddleware/swift.py
index b5dad37..0235628 100644
--- a/ceilometermiddleware/swift.py
+++ b/ceilometermiddleware/swift.py
@@ -179,8 +179,15 @@ class Swift(object):
try:
container = obj = None
- version, account, remainder = path.replace(
- '/', '', 1).split('/', 2)
+ path = path.replace('/', '', 1)
+ version, account, remainder = path.split('/', 2)
+ except ValueError:
+ try:
+ version, account = path.split('/', 1)
+ remainder = None
+ except ValueError:
+ return
+ try:
if not version or not account:
raise ValueError('Invalid path: %s' % path)
if remainder:
diff --git a/ceilometermiddleware/tests/test_swift.py b/ceilometermiddleware/tests/test_swift.py
index 41aaf58..2ca0be9 100644
--- a/ceilometermiddleware/tests/test_swift.py
+++ b/ceilometermiddleware/tests/test_swift.py
@@ -365,3 +365,19 @@ class TestSwift(tests_base.TestCase):
list(app(req.environ, self.start_response))
data = notify.call_args_list[0][0]
self.assertIsNot(0, len(data[2]['target']['id']))
+
+ def test_head_account(self):
+ app = swift.Swift(FakeApp(body=['']), {})
+ req = FakeRequest('/1.0/account',
+ environ={'REQUEST_METHOD': 'HEAD'})
+ 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('objectstore.http.request', data[1])
+ self.assertIsNone(data[2].get('measurements'))
+ metadata = data[2]['target']['metadata']
+ self.assertEqual('1.0', metadata['version'])
+ self.assertIsNone(metadata['container'])
+ self.assertIsNone(metadata['object'])
+ self.assertEqual('head', data[2]['target']['action'])