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:
Kanagaraj Manickam 2015-09-01 16:44:47 +05:30
parent 2dbcd9064d
commit 10e55e1945
2 changed files with 30 additions and 0 deletions

View File

@ -888,6 +888,12 @@ class EngineService(service.Service):
# parameters into properties_schema.
continue
if not ResourceClass.is_service_available(cnxt):
raise exception.ResourceTypeUnavailable(
service_name=ResourceClass.default_client_name,
resource_type=res['Type']
)
props = properties.Properties(
ResourceClass.properties_schema,
res.get('Properties', {}),

View File

@ -12,6 +12,8 @@
# under the License.
from glanceclient import exc as glance_exceptions
import mock
from oslo_messaging.rpc import dispatcher
import six
from heat.common import exception
@ -905,6 +907,11 @@ class ValidateTest(common.HeatTestCase):
self.gc = fakes_nova.FakeClient()
resources.initialise()
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):
self.m.StubOutWithMock(glance.GlanceClientPlugin, 'get_image_id')
@ -1655,3 +1662,20 @@ class ValidateTest(common.HeatTestCase):
ex = self.assertRaises(exception.StackValidationFailed, stack.validate)
self.assertEqual('Resource Resource Type type must be string',
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])