Merge "Add sanity checks to strip_*meta_prefix functions"

This commit is contained in:
Jenkins 2017-09-13 06:42:16 +00:00 committed by Gerrit Code Review
commit 4e49eb28bc
2 changed files with 25 additions and 1 deletions

View File

@ -200,6 +200,8 @@ def strip_user_meta_prefix(server_type, key):
:param key: header key :param key: header key
:returns: stripped header key :returns: stripped header key
""" """
if not is_user_meta(server_type, key):
raise ValueError('Key is not user meta')
return key[len(get_user_meta_prefix(server_type)):] return key[len(get_user_meta_prefix(server_type)):]
@ -212,6 +214,8 @@ def strip_sys_meta_prefix(server_type, key):
:param key: header key :param key: header key
:returns: stripped header key :returns: stripped header key
""" """
if not is_sys_meta(server_type, key):
raise ValueError('Key is not sysmeta')
return key[len(get_sys_meta_prefix(server_type)):] return key[len(get_sys_meta_prefix(server_type)):]
@ -223,6 +227,8 @@ def strip_object_transient_sysmeta_prefix(key):
:param key: header key :param key: header key
:returns: stripped header key :returns: stripped header key
""" """
if not is_object_transient_sysmeta(key):
raise ValueError('Key is not object transient sysmeta')
return key[len(OBJECT_TRANSIENT_SYSMETA_PREFIX):] return key[len(OBJECT_TRANSIENT_SYSMETA_PREFIX):]

View File

@ -22,7 +22,8 @@ from swift.common.request_helpers import is_sys_meta, is_user_meta, \
is_sys_or_user_meta, strip_sys_meta_prefix, strip_user_meta_prefix, \ is_sys_or_user_meta, strip_sys_meta_prefix, strip_user_meta_prefix, \
remove_items, copy_header_subset, get_name_and_placement, \ remove_items, copy_header_subset, get_name_and_placement, \
http_response_to_document_iters, is_object_transient_sysmeta, \ http_response_to_document_iters, is_object_transient_sysmeta, \
update_etag_is_at_header, resolve_etag_is_at_header update_etag_is_at_header, resolve_etag_is_at_header, \
strip_object_transient_sysmeta_prefix
from test.unit import patch_policies from test.unit import patch_policies
from test.unit.common.test_utils import FakeResponse from test.unit.common.test_utils import FakeResponse
@ -62,12 +63,20 @@ class TestRequestHelpers(unittest.TestCase):
for st in server_types: for st in server_types:
self.assertEqual(strip_sys_meta_prefix(st, 'x-%s-%s-a' self.assertEqual(strip_sys_meta_prefix(st, 'x-%s-%s-a'
% (st, mt)), 'a') % (st, mt)), 'a')
mt = 'not-sysmeta'
for st in server_types:
with self.assertRaises(ValueError):
strip_sys_meta_prefix(st, 'x-%s-%s-a' % (st, mt))
def test_strip_user_meta_prefix(self): def test_strip_user_meta_prefix(self):
mt = 'meta' mt = 'meta'
for st in server_types: for st in server_types:
self.assertEqual(strip_user_meta_prefix(st, 'x-%s-%s-a' self.assertEqual(strip_user_meta_prefix(st, 'x-%s-%s-a'
% (st, mt)), 'a') % (st, mt)), 'a')
mt = 'not-meta'
for st in server_types:
with self.assertRaises(ValueError):
strip_sys_meta_prefix(st, 'x-%s-%s-a' % (st, mt))
def test_is_object_transient_sysmeta(self): def test_is_object_transient_sysmeta(self):
self.assertTrue(is_object_transient_sysmeta( self.assertTrue(is_object_transient_sysmeta(
@ -77,6 +86,15 @@ class TestRequestHelpers(unittest.TestCase):
self.assertFalse(is_object_transient_sysmeta( self.assertFalse(is_object_transient_sysmeta(
'x-object-meatmeta-foo')) 'x-object-meatmeta-foo'))
def test_strip_object_transient_sysmeta_prefix(self):
mt = 'object-transient-sysmeta'
self.assertEqual(strip_object_transient_sysmeta_prefix('x-%s-a' % mt),
'a')
mt = 'object-sysmeta-transient'
with self.assertRaises(ValueError):
strip_object_transient_sysmeta_prefix('x-%s-a' % mt)
def test_remove_items(self): def test_remove_items(self):
src = {'a': 'b', src = {'a': 'b',
'c': 'd'} 'c': 'd'}