Merge "Attempt to not set location on non active or queued image"
This commit is contained in:
commit
e822301130
@ -292,6 +292,11 @@ class ImagesController(object):
|
|||||||
"invisible.")
|
"invisible.")
|
||||||
raise webob.exc.HTTPForbidden(explanation=msg)
|
raise webob.exc.HTTPForbidden(explanation=msg)
|
||||||
|
|
||||||
|
if image.status not in ('active', 'queued'):
|
||||||
|
msg = _("It's not allowed to add locations if image status is "
|
||||||
|
"%s.") % image.status
|
||||||
|
raise webob.exc.HTTPConflict(explanation=msg)
|
||||||
|
|
||||||
pos = self._get_locations_op_pos(path_pos,
|
pos = self._get_locations_op_pos(path_pos,
|
||||||
len(image.locations), True)
|
len(image.locations), True)
|
||||||
if pos is None:
|
if pos is None:
|
||||||
|
@ -1571,6 +1571,91 @@ class TestImagesController(base.IsolatedUnitTest):
|
|||||||
self.assertEqual(2, len(output.locations))
|
self.assertEqual(2, len(output.locations))
|
||||||
self.assertEqual(new_location, output.locations[1])
|
self.assertEqual(new_location, output.locations[1])
|
||||||
|
|
||||||
|
def test_update_add_locations_status_saving(self):
|
||||||
|
self.config(show_multiple_locations=True)
|
||||||
|
self.images = [
|
||||||
|
_db_fixture('1', owner=TENANT1, checksum=CHKSUM,
|
||||||
|
name='1',
|
||||||
|
disk_format='raw',
|
||||||
|
container_format='bare',
|
||||||
|
status='saving'),
|
||||||
|
]
|
||||||
|
self.db.image_create(None, self.images[0])
|
||||||
|
new_location = {'url': '%s/fake_location' % BASE_URI, 'metadata': {}}
|
||||||
|
request = unit_test_utils.get_fake_request()
|
||||||
|
changes = [{'op': 'add', 'path': ['locations', '-'],
|
||||||
|
'value': new_location}]
|
||||||
|
self.assertRaises(webob.exc.HTTPConflict,
|
||||||
|
self.controller.update, request, '1', changes)
|
||||||
|
|
||||||
|
def test_update_add_locations_status_deactivated(self):
|
||||||
|
self.config(show_multiple_locations=True)
|
||||||
|
self.images = [
|
||||||
|
_db_fixture('1', owner=TENANT1, checksum=CHKSUM,
|
||||||
|
name='1',
|
||||||
|
disk_format='raw',
|
||||||
|
container_format='bare',
|
||||||
|
status='deactivated'),
|
||||||
|
]
|
||||||
|
request = unit_test_utils.get_fake_request()
|
||||||
|
self.db.image_create(request.context, self.images[0])
|
||||||
|
new_location = {'url': '%s/fake_location' % BASE_URI, 'metadata': {}}
|
||||||
|
changes = [{'op': 'add', 'path': ['locations', '-'],
|
||||||
|
'value': new_location}]
|
||||||
|
self.assertRaises(webob.exc.HTTPConflict,
|
||||||
|
self.controller.update, request, '1', changes)
|
||||||
|
|
||||||
|
def test_update_add_locations_status_deleted(self):
|
||||||
|
self.config(show_multiple_locations=True)
|
||||||
|
self.images = [
|
||||||
|
_db_fixture('1', owner=TENANT1, checksum=CHKSUM,
|
||||||
|
name='1',
|
||||||
|
disk_format='raw',
|
||||||
|
container_format='bare',
|
||||||
|
status='deleted'),
|
||||||
|
]
|
||||||
|
self.db.image_create(None, self.images[0])
|
||||||
|
new_location = {'url': '%s/fake_location' % BASE_URI, 'metadata': {}}
|
||||||
|
request = unit_test_utils.get_fake_request()
|
||||||
|
changes = [{'op': 'add', 'path': ['locations', '-'],
|
||||||
|
'value': new_location}]
|
||||||
|
self.assertRaises(webob.exc.HTTPConflict,
|
||||||
|
self.controller.update, request, '1', changes)
|
||||||
|
|
||||||
|
def test_update_add_locations_status_pending_delete(self):
|
||||||
|
self.config(show_multiple_locations=True)
|
||||||
|
self.images = [
|
||||||
|
_db_fixture('1', owner=TENANT1, checksum=CHKSUM,
|
||||||
|
name='1',
|
||||||
|
disk_format='raw',
|
||||||
|
container_format='bare',
|
||||||
|
status='pending_delete'),
|
||||||
|
]
|
||||||
|
self.db.image_create(None, self.images[0])
|
||||||
|
new_location = {'url': '%s/fake_location' % BASE_URI, 'metadata': {}}
|
||||||
|
request = unit_test_utils.get_fake_request()
|
||||||
|
changes = [{'op': 'add', 'path': ['locations', '-'],
|
||||||
|
'value': new_location}]
|
||||||
|
self.assertRaises(webob.exc.HTTPConflict,
|
||||||
|
self.controller.update, request, '1', changes)
|
||||||
|
|
||||||
|
def test_update_add_locations_status_killed(self):
|
||||||
|
self.config(show_multiple_locations=True)
|
||||||
|
self.images = [
|
||||||
|
_db_fixture('1', owner=TENANT1, checksum=CHKSUM,
|
||||||
|
name='1',
|
||||||
|
disk_format='raw',
|
||||||
|
container_format='bare',
|
||||||
|
status='killed'),
|
||||||
|
]
|
||||||
|
self.db.image_create(None, self.images[0])
|
||||||
|
new_location = {'url': '%s/fake_location' % BASE_URI, 'metadata': {}}
|
||||||
|
request = unit_test_utils.get_fake_request()
|
||||||
|
changes = [{'op': 'add', 'path': ['locations', '-'],
|
||||||
|
'value': new_location}]
|
||||||
|
self.assertRaises(webob.exc.HTTPConflict,
|
||||||
|
self.controller.update, request, '1', changes)
|
||||||
|
|
||||||
def test_update_add_locations_insertion(self):
|
def test_update_add_locations_insertion(self):
|
||||||
self.config(show_multiple_locations=True)
|
self.config(show_multiple_locations=True)
|
||||||
new_location = {'url': '%s/fake_location' % BASE_URI, 'metadata': {}}
|
new_location = {'url': '%s/fake_location' % BASE_URI, 'metadata': {}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user