Merge "Removal of constraint for blob re-upload"

This commit is contained in:
Zuul 2018-03-15 06:55:42 +00:00 committed by Gerrit Code Review
commit 1c946da5ad
4 changed files with 29 additions and 17 deletions

View File

@ -565,9 +565,14 @@ class Engine(object):
policy.authorize(action_name, af.to_dict(), context)
# create an an empty blob instance in db with 'saving' status
if self._get_blob_info(af, field_name, blob_key):
msg = _("Blob %(blob)s already exists for artifact "
"%(af)s") % {'blob': field_name, 'af': af.id}
existing_blob = self._get_blob_info(af, field_name, blob_key)
existing_blob_status = existing_blob.get("status")\
if existing_blob else None
if existing_blob_status == "saving":
msg = _("Blob %(blob)s already exists for artifact and it"
"is in %(status) %(af)s") % {
'blob': field_name, 'af': af.id,
'status': existing_blob_status}
raise exception.Conflict(message=msg)
utils.validate_change_allowed(af, field_name)
blob_info['size'] = self._calculate_allowed_space(

View File

@ -116,13 +116,13 @@ default_store = database
self.assertNotIn('id', art['blob'])
# reUpload file to artifact
self.put(url=url + '/blob', data=data, status=409,
self.put(url=url + '/blob', data=data, status=200,
headers=headers)
# upload blob dict
self.put(url + '/dict_of_blobs/test_key', data=data, headers=headers)
# test re-upload failed
# test re-upload for dict of blob
self.put(url + '/dict_of_blobs/test_key', data=data, headers=headers,
status=409)
status=200)
# upload few other blobs to the dict
for elem in ('aaa', 'bbb', 'ccc', 'ddd'):

View File

@ -745,13 +745,13 @@ class TestBlobs(base.TestArtifact):
self.assertEqual(exp_blob_url, art['blob']['url'])
# reUpload file to artifact
self.put(url=url + '/blob', data=data, status=409,
self.put(url=url + '/blob', data=data, status=200,
headers=headers)
# upload blob dict
self.put(url + '/dict_of_blobs/test_key', data=data, headers=headers)
# test re-upload failed
# test re-upload for dict of blob.
self.put(url + '/dict_of_blobs/test_key', data=data, headers=headers,
status=409)
status=200)
# upload few other blobs to the dict
for elem in ('aaa', 'bbb', 'ccc', 'ddd'):

View File

@ -57,11 +57,14 @@ class TestArtifactUpload(base.BaseTestArtifactAPI):
self.assertEqual(3, artifact['blob']['size'])
self.assertEqual('active', artifact['blob']['status'])
# Re-uploading blob leads to Conflict error
self.assertRaises(
exc.Conflict, self.controller.upload_blob,
# Re-uploading blob
self.controller.upload_blob(
self.req, 'sample_artifact', self.sample_artifact['id'], 'blob',
BytesIO(b'aaa'), 'application/octet-stream')
BytesIO(b'aaabb'), 'application/octet-stream')
artifact = self.controller.show(self.req, 'sample_artifact',
self.sample_artifact['id'])
self.assertEqual(5, artifact['blob']['size'])
self.assertEqual('active', artifact['blob']['status'])
def test_upload_saving_blob(self):
self.controller.upload_blob(
@ -232,11 +235,15 @@ class TestArtifactUpload(base.BaseTestArtifactAPI):
self.assertEqual(3, artifact['dict_of_blobs']['blb']['size'])
self.assertEqual('active', artifact['dict_of_blobs']['blb']['status'])
# If blob key already exists Glare return Conflict error
self.assertRaises(
exc.Conflict, self.controller.upload_blob,
# Validate re-uploaded of blob content.
self.controller.upload_blob(
self.req, 'sample_artifact', self.sample_artifact['id'],
'dict_of_blobs/blb', BytesIO(b'aaa'), 'application/octet-stream')
'dict_of_blobs/blb', BytesIO(b'aaabb'),
'application/octet-stream')
artifact = self.controller.show(self.req, 'sample_artifact',
self.sample_artifact['id'])
self.assertEqual(5, artifact['dict_of_blobs']['blb']['size'])
def test_blob_dict_storage_error(self):
self.config(default_store='filesystem',