From: Liang Chen Date: Mon, 12 Aug 2013 15:21:18 +0000 (+0800) Subject: Not to eat Metadata parsing error X-Git-Tag: 2014.1~211^2 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=07341ee01b6d8e40992dbf61a7b5d19dcae2cb8a;p=openstack-build%2Fheat-build.git Not to eat Metadata parsing error Exception raised while resolving metadata is treated as database exception and eaten. A few testing errors are revealed after metadata parsing error is propagated to callers. Fixes bug #1207193 Change-Id: I3b5cc5fed3896b7fe59533c7d09f0226e5cf5ad9 --- diff --git a/heat/engine/resource.py b/heat/engine/resource.py index 656a71cb..bb071ee6 100644 --- a/heat/engine/resource.py +++ b/heat/engine/resource.py @@ -575,6 +575,7 @@ class Resource(object): def _store(self): '''Create the resource in the database.''' + metadata = self.metadata try: rs = {'action': self.action, 'status': self.status, @@ -582,7 +583,7 @@ class Resource(object): 'stack_id': self.stack.id, 'nova_instance': self.resource_id, 'name': self.name, - 'rsrc_metadata': self.metadata, + 'rsrc_metadata': metadata, 'stack_name': self.stack.name} new_rs = db_api.resource_create(self.context, rs) diff --git a/heat/tests/test_autoscaling.py b/heat/tests/test_autoscaling.py index aaeb0237..71fe5fd0 100644 --- a/heat/tests/test_autoscaling.py +++ b/heat/tests/test_autoscaling.py @@ -875,6 +875,10 @@ class AutoScalingTest(HeatTestCase): Metadata.__get__(mox.IgnoreArg(), rsrc, mox.IgnoreArg() ).AndReturn(previous_meta) + #stub for the metadata accesses while creating the two instances + Metadata.__get__(mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()) + Metadata.__get__(mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()) + # raise by 200%, should work self._stub_lb_reload(3, unset=False) self._stub_create(2) @@ -924,7 +928,11 @@ class AutoScalingTest(HeatTestCase): Metadata.__get__(mox.IgnoreArg(), rsrc, mox.IgnoreArg() ).AndReturn(previous_meta) + #stub for the metadata accesses while creating the two instances + Metadata.__get__(mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()) + Metadata.__get__(mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()) # raise by 200%, should work + self._stub_lb_reload(3, unset=False) self._stub_meta_expected(now, 'PercentChangeInCapacity : 200') self._stub_create(2) @@ -1106,6 +1114,9 @@ class AutoScalingTest(HeatTestCase): Metadata.__get__(mox.IgnoreArg(), rsrc, mox.IgnoreArg() ).AndReturn(previous_meta) + #stub for the metadata accesses while creating the additional instance + Metadata.__get__(mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()) + now = now + datetime.timedelta(seconds=61) self._stub_lb_reload(3, unset=False) self._stub_meta_expected(now, 'ChangeInCapacity : 1', 2) @@ -1163,6 +1174,9 @@ class AutoScalingTest(HeatTestCase): Metadata.__get__(mox.IgnoreArg(), rsrc, mox.IgnoreArg() ).AndReturn(previous_meta) + #stub for the metadata accesses while creating the additional instance + Metadata.__get__(mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()) + self._stub_lb_reload(3, unset=False) self._stub_meta_expected(now, 'ChangeInCapacity : 1', 2) self._stub_create(1) @@ -1221,6 +1235,9 @@ class AutoScalingTest(HeatTestCase): Metadata.__get__(mox.IgnoreArg(), rsrc, mox.IgnoreArg() ).AndReturn(previous_meta) + #stub for the metadata accesses while creating the addtional instance + Metadata.__get__(mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()) + self._stub_lb_reload(3, unset=False) self._stub_meta_expected(now, 'ChangeInCapacity : 1', 2) self._stub_create(1) @@ -1282,11 +1299,16 @@ class AutoScalingTest(HeatTestCase): self.m.UnsetStubs() self.m.StubOutWithMock(Metadata, '__get__') + Metadata.__get__(mox.IgnoreArg(), up_policy, mox.IgnoreArg() ).AndReturn(previous_meta) Metadata.__get__(mox.IgnoreArg(), rsrc, mox.IgnoreArg() ).AndReturn(previous_meta) + #stub for the metadata accesses while creating the two instances + Metadata.__get__(mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()) + Metadata.__get__(mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()) + now = now + datetime.timedelta(seconds=61) self._stub_lb_reload(4, unset=False) diff --git a/heat/tests/test_resource.py b/heat/tests/test_resource.py index 5bc09cda..8dcba552 100644 --- a/heat/tests/test_resource.py +++ b/heat/tests/test_resource.py @@ -279,6 +279,16 @@ class ResourceTest(HeatTestCase): self.assertRaises(exception.ResourceFailure, create) self.assertEqual((res.CREATE, res.FAILED), res.state) + def test_create_fail_metadata_parse_error(self): + tmpl = {'Type': 'GenericResourceType', 'Properties': {}, + 'Metadata': {"Fn::GetAtt": ["ResourceA", "abc"]}} + rname = 'test_resource' + res = generic_rsrc.ResourceWithProps(rname, tmpl, self.stack) + + create = scheduler.TaskRunner(res.create) + self.assertRaises(exception.ResourceFailure, create) + self.assertEqual((res.CREATE, res.FAILED), res.state) + def test_create_resource_after_destroy(self): tmpl = {'Type': 'GenericResourceType'} rname = 'test_res_id_none'