Merge "Split up backend/sysmeta header/footer preference tests"
This commit is contained in:
@@ -121,6 +121,7 @@ class TestObjectController(unittest.TestCase):
|
|||||||
self.object_controller.logger)
|
self.object_controller.logger)
|
||||||
|
|
||||||
self.logger = debug_logger('test-object-controller')
|
self.logger = debug_logger('test-object-controller')
|
||||||
|
self.ts = make_timestamp_iter()
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
"""Tear down for testing swift.object.server.ObjectController"""
|
"""Tear down for testing swift.object.server.ObjectController"""
|
||||||
@@ -1435,15 +1436,13 @@ class TestObjectController(unittest.TestCase):
|
|||||||
with open(objfile) as fh:
|
with open(objfile) as fh:
|
||||||
self.assertEqual(fh.read(), "obj data")
|
self.assertEqual(fh.read(), "obj data")
|
||||||
|
|
||||||
def test_PUT_container_override_etag_in_footer(self):
|
def _check_container_override_etag_preference(self, override_headers,
|
||||||
ts_iter = make_timestamp_iter()
|
override_footers):
|
||||||
|
|
||||||
def do_test(override_headers, override_footers):
|
|
||||||
def mock_container_update(ctlr, op, account, container, obj, req,
|
def mock_container_update(ctlr, op, account, container, obj, req,
|
||||||
headers_out, objdevice, policy):
|
headers_out, objdevice, policy):
|
||||||
calls_made.append((headers_out, policy))
|
calls_made.append((headers_out, policy))
|
||||||
calls_made = []
|
calls_made = []
|
||||||
ts_put = next(ts_iter)
|
ts_put = next(self.ts)
|
||||||
|
|
||||||
headers = {
|
headers = {
|
||||||
'X-Timestamp': ts_put.internal,
|
'X-Timestamp': ts_put.internal,
|
||||||
@@ -1490,30 +1489,44 @@ class TestObjectController(unittest.TestCase):
|
|||||||
}, calls_made[0][0])
|
}, calls_made[0][0])
|
||||||
self.assertEqual(POLICIES[0], calls_made[0][1])
|
self.assertEqual(POLICIES[0], calls_made[0][1])
|
||||||
|
|
||||||
# lone headers/footers work
|
def test_lone_header_footer_override_preference(self):
|
||||||
do_test({'X-Backend-Container-Update-Override-Etag': 'update-etag'},
|
self._check_container_override_etag_preference(
|
||||||
{})
|
{'X-Backend-Container-Update-Override-Etag': 'update-etag'}, {})
|
||||||
do_test({},
|
self._check_container_override_etag_preference(
|
||||||
{'X-Backend-Container-Update-Override-Etag': 'update-etag'})
|
{}, {'X-Backend-Container-Update-Override-Etag': 'update-etag'})
|
||||||
do_test({'X-Object-Sysmeta-Container-Update-Override-Etag':
|
self._check_container_override_etag_preference(
|
||||||
'update-etag'},
|
|
||||||
{})
|
|
||||||
do_test({},
|
|
||||||
{'X-Object-Sysmeta-Container-Update-Override-Etag':
|
{'X-Object-Sysmeta-Container-Update-Override-Etag':
|
||||||
'update-etag'})
|
'update-etag'}, {})
|
||||||
|
self._check_container_override_etag_preference(
|
||||||
|
{}, {'X-Object-Sysmeta-Container-Update-Override-Etag':
|
||||||
|
'update-etag'}),
|
||||||
|
|
||||||
# footer trumps header
|
def test_footer_trumps_header(self):
|
||||||
do_test({'X-Backend-Container-Update-Override-Etag': 'ignored-etag'},
|
self._check_container_override_etag_preference(
|
||||||
|
{'X-Backend-Container-Update-Override-Etag': 'ignored-etag'},
|
||||||
{'X-Backend-Container-Update-Override-Etag': 'update-etag'})
|
{'X-Backend-Container-Update-Override-Etag': 'update-etag'})
|
||||||
do_test({'X-Object-Sysmeta-Container-Update-Override-Etag':
|
self._check_container_override_etag_preference(
|
||||||
|
{'X-Object-Sysmeta-Container-Update-Override-Etag':
|
||||||
'ignored-etag'},
|
'ignored-etag'},
|
||||||
{'X-Object-Sysmeta-Container-Update-Override-Etag':
|
{'X-Object-Sysmeta-Container-Update-Override-Etag':
|
||||||
'update-etag'})
|
'update-etag'})
|
||||||
|
|
||||||
# but sysmeta header trumps backend footer
|
def test_sysmeta_trumps_backend(self):
|
||||||
do_test({'X-Object-Sysmeta-Container-Update-Override-Etag':
|
self._check_container_override_etag_preference(
|
||||||
'update-etag'},
|
{'X-Backend-Container-Update-Override-Etag': 'ignored-etag',
|
||||||
{'X-Backend-Container-Update-Override-Etag': 'ignored-etag'})
|
'X-Object-Sysmeta-Container-Update-Override-Etag':
|
||||||
|
'update-etag'}, {})
|
||||||
|
self._check_container_override_etag_preference(
|
||||||
|
{}, {'X-Backend-Container-Update-Override-Etag': 'ignored-etag',
|
||||||
|
'X-Object-Sysmeta-Container-Update-Override-Etag':
|
||||||
|
'update-etag'})
|
||||||
|
|
||||||
|
def test_sysmeta_header_trumps_backend_footer(self):
|
||||||
|
headers = {'X-Object-Sysmeta-Container-Update-Override-Etag':
|
||||||
|
'update-etag'}
|
||||||
|
footers = {'X-Backend-Container-Update-Override-Etag':
|
||||||
|
'ignored-etag'}
|
||||||
|
self._check_container_override_etag_preference(headers, footers)
|
||||||
|
|
||||||
def test_PUT_etag_in_footer_mismatch(self):
|
def test_PUT_etag_in_footer_mismatch(self):
|
||||||
timestamp = normalize_timestamp(time())
|
timestamp = normalize_timestamp(time())
|
||||||
|
|||||||
Reference in New Issue
Block a user