Skip to content

Commit cb11e56

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Add catching image exceptions when validating os_distro"
2 parents 9807c1a + a414fcf commit cb11e56

2 files changed

Lines changed: 65 additions & 0 deletions

File tree

magnum/api/validation.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import pecan
1919

20+
from glanceclient import exc as glance_exception
2021
from keystoneauth1 import exceptions as ka_exception
2122

2223
from magnum.api import utils as api_utils
@@ -78,6 +79,10 @@ def wrapper(func, *args, **kwargs):
7879
'images')
7980
cluster_distro = image.get('os_distro')
8081
driver_name = image.get('magnum_driver')
82+
except (glance_exception.NotFound, exception.ResourceNotFound):
83+
raise exception.ImageNotFound(image_id=image_id)
84+
except glance_exception.HTTPForbidden:
85+
raise exception.ImageNotAuthorized(image_id=image_id)
8186
except Exception:
8287
pass
8388
cluster_type = (cluster_template.server_type,

magnum/tests/unit/api/test_validation.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import importlib
1717
from unittest import mock
1818

19+
from glanceclient import exc as glance_exception
20+
1921
from magnum.api import validation as v
2022
from magnum.common import exception
2123
import magnum.conf
@@ -384,3 +386,61 @@ def test_validate_cluster_properties(self):
384386
else:
385387
self.assertRaises(exception.InvalidParameterValue,
386388
v.validate_cluster_properties, set([field]))
389+
390+
@mock.patch('pecan.request')
391+
@mock.patch('magnum.common.clients.OpenStackClients')
392+
@mock.patch('magnum.api.utils.get_openstack_resource')
393+
def test_enforce_driver_supported_image_not_found(
394+
self, mock_get_resource, mock_os_clients, mock_pecan_request):
395+
396+
@v.enforce_driver_supported()
397+
def test(self, cluster_template):
398+
pass
399+
400+
mock_get_resource.side_effect = exception.ResourceNotFound(
401+
name='image', id='test-image-id')
402+
cluster_template = mock.MagicMock()
403+
cluster_template.cluster_distro = None
404+
cluster_template.driver = None
405+
cluster_template.image_id = 'test-image-id'
406+
407+
self.assertRaises(exception.ImageNotFound,
408+
test, self, cluster_template)
409+
410+
@mock.patch('pecan.request')
411+
@mock.patch('magnum.common.clients.OpenStackClients')
412+
@mock.patch('magnum.api.utils.get_openstack_resource')
413+
def test_enforce_driver_supported_image_not_found_glance(
414+
self, mock_get_resource, mock_os_clients, mock_pecan_request):
415+
416+
@v.enforce_driver_supported()
417+
def test(self, cluster_template):
418+
pass
419+
420+
mock_get_resource.side_effect = glance_exception.NotFound()
421+
cluster_template = mock.MagicMock()
422+
cluster_template.cluster_distro = None
423+
cluster_template.driver = None
424+
cluster_template.image_id = 'test-image-id'
425+
426+
self.assertRaises(exception.ImageNotFound,
427+
test, self, cluster_template)
428+
429+
@mock.patch('pecan.request')
430+
@mock.patch('magnum.common.clients.OpenStackClients')
431+
@mock.patch('magnum.api.utils.get_openstack_resource')
432+
def test_enforce_driver_supported_image_forbidden(
433+
self, mock_get_resource, mock_os_clients, mock_pecan_request):
434+
435+
@v.enforce_driver_supported()
436+
def test(self, cluster_template):
437+
pass
438+
439+
mock_get_resource.side_effect = glance_exception.HTTPForbidden()
440+
cluster_template = mock.MagicMock()
441+
cluster_template.cluster_distro = None
442+
cluster_template.driver = None
443+
cluster_template.image_id = 'test-image-id'
444+
445+
self.assertRaises(exception.ImageNotAuthorized,
446+
test, self, cluster_template)

0 commit comments

Comments
 (0)