Store normalized x-delete-at on PUT/POST

Change-Id: I81e5d49623e884def8b5f6cbbf82f9b0d667d64a
Closes-Bug: 1860149
This commit is contained in:
Tim Burke 2020-01-17 08:32:34 -08:00 committed by Tim Burke
parent 57ca3570e9
commit 7bba3ad04d
2 changed files with 26 additions and 2 deletions

View File

@ -520,8 +520,9 @@ class BaseObjectController(Controller):
req = constraints.check_delete_headers(req)
if 'x-delete-at' in req.headers:
x_delete_at = int(normalize_delete_at_timestamp(
int(req.headers['x-delete-at'])))
req.headers['x-delete-at'] = normalize_delete_at_timestamp(
int(req.headers['x-delete-at']))
x_delete_at = int(req.headers['x-delete-at'])
req.environ.setdefault('swift.log_info', []).append(
'x-delete-at:%s' % x_delete_at)

View File

@ -502,6 +502,29 @@ class TestObject(unittest.TestCase):
self.assertEqual(resp.status, 400)
self.assertEqual(body, b'X-Delete-At in past')
def test_x_delete_at_in_the_far_future(self):
def put(url, token, parsed, conn):
path = '%s/%s/%s' % (parsed.path, self.container,
'x_delete_at_in_the_far_future')
conn.request('PUT', path, '', {
'X-Auth-Token': token,
'Content-Length': '0',
'X-Delete-At': '1' * 100})
return check_response(conn)
resp = retry(put)
body = resp.read()
self.assertEqual(resp.status, 201, 'Got %s: %s' % (resp.status, body))
def head(url, token, parsed, conn):
path = '%s/%s/%s' % (parsed.path, self.container,
'x_delete_at_in_the_far_future')
conn.request('HEAD', path, '', {'X-Auth-Token': token})
return check_response(conn)
resp = retry(head)
body = resp.read()
self.assertEqual(resp.status, 200, 'Got %s: %s' % (resp.status, body))
self.assertEqual(resp.headers['x-delete-at'], '9' * 10)
def test_copy_object(self):
if tf.skip:
raise SkipTest