Engine method validate_template fails for unavailable resource type
When validate_template() method is called with unavailable resource type, it will fails the template validation. Change-Id: Id141b7e63d7a58fade8a29d0dd5c6a1f9c847f5e Closes-Bug: #1473025
This commit is contained in:
parent
2dbcd9064d
commit
10e55e1945
@ -888,6 +888,12 @@ class EngineService(service.Service):
|
|||||||
# parameters into properties_schema.
|
# parameters into properties_schema.
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
if not ResourceClass.is_service_available(cnxt):
|
||||||
|
raise exception.ResourceTypeUnavailable(
|
||||||
|
service_name=ResourceClass.default_client_name,
|
||||||
|
resource_type=res['Type']
|
||||||
|
)
|
||||||
|
|
||||||
props = properties.Properties(
|
props = properties.Properties(
|
||||||
ResourceClass.properties_schema,
|
ResourceClass.properties_schema,
|
||||||
res.get('Properties', {}),
|
res.get('Properties', {}),
|
||||||
|
@ -12,6 +12,8 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from glanceclient import exc as glance_exceptions
|
from glanceclient import exc as glance_exceptions
|
||||||
|
import mock
|
||||||
|
from oslo_messaging.rpc import dispatcher
|
||||||
import six
|
import six
|
||||||
|
|
||||||
from heat.common import exception
|
from heat.common import exception
|
||||||
@ -905,6 +907,11 @@ class ValidateTest(common.HeatTestCase):
|
|||||||
self.gc = fakes_nova.FakeClient()
|
self.gc = fakes_nova.FakeClient()
|
||||||
resources.initialise()
|
resources.initialise()
|
||||||
self.ctx = utils.dummy_context()
|
self.ctx = utils.dummy_context()
|
||||||
|
self.mock_isa = mock.patch(
|
||||||
|
'heat.engine.resource.Resource.is_service_available',
|
||||||
|
return_value=True)
|
||||||
|
self.mock_is_service_available = self.mock_isa.start()
|
||||||
|
self.addCleanup(self.mock_isa.stop)
|
||||||
|
|
||||||
def _mock_get_image_id_success(self, imageId_input, imageId):
|
def _mock_get_image_id_success(self, imageId_input, imageId):
|
||||||
self.m.StubOutWithMock(glance.GlanceClientPlugin, 'get_image_id')
|
self.m.StubOutWithMock(glance.GlanceClientPlugin, 'get_image_id')
|
||||||
@ -1655,3 +1662,20 @@ class ValidateTest(common.HeatTestCase):
|
|||||||
ex = self.assertRaises(exception.StackValidationFailed, stack.validate)
|
ex = self.assertRaises(exception.StackValidationFailed, stack.validate)
|
||||||
self.assertEqual('Resource Resource Type type must be string',
|
self.assertEqual('Resource Resource Type type must be string',
|
||||||
six.text_type(ex))
|
six.text_type(ex))
|
||||||
|
|
||||||
|
def test_validate_is_service_available(self):
|
||||||
|
t = template_format.parse(
|
||||||
|
"""
|
||||||
|
heat_template_version: 2015-10-15
|
||||||
|
resources:
|
||||||
|
my_instance:
|
||||||
|
type: AWS::EC2::Instance
|
||||||
|
""")
|
||||||
|
engine = service.EngineService('a', 't')
|
||||||
|
self.mock_is_service_available.return_value = False
|
||||||
|
ex = self.assertRaises(dispatcher.ExpectedException,
|
||||||
|
engine.validate_template,
|
||||||
|
None,
|
||||||
|
t,
|
||||||
|
{})
|
||||||
|
self.assertEqual(exception.ResourceTypeUnavailable, ex.exc_info[0])
|
||||||
|
Loading…
Reference in New Issue
Block a user