]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Fix problem creating ResourceFailure
authorBen Nemec <openstack@nemebean.com>
Sat, 10 Aug 2013 01:12:23 +0000 (20:12 -0500)
committerBen Nemec <openstack@nemebean.com>
Sun, 11 Aug 2013 05:37:02 +0000 (00:37 -0500)
The ResourceFailure exception is being instantiated improperly in
a couple of places.  This changes fixes the problem and adds tests
to cover the problem cases.

Change-Id: I2662a3abde1fd00d275e2190401c20166256cae0
Closes-Bug: 1210681

heat/engine/parser.py
heat/engine/resources/instance.py
heat/tests/test_instance.py

index 4d779911a97c99bf1d09df6c04e640d15a18f251..8d29dfe4f2f2e1a6984043d0deb486f49e195293 100644 (file)
@@ -339,7 +339,7 @@ class Stack(object):
             else:
                 raise exception.ResourceFailure(
                     AttributeError(_('Resource action %s not found') %
-                                   action_l))
+                                   action_l), r)
 
         action_task = scheduler.DependencyTaskGroup(self.dependencies,
                                                     resource_action,
index 54ee7d4b9c1a5567e408841e9e6ce45b60cf7d3f..e4b32c7b27068e00924fd6484713833e746150f6 100644 (file)
@@ -327,12 +327,12 @@ class Instance(resource.Resource):
                 delete(wait_time=0.2)
                 exc = exception.Error("Build of server %s failed." %
                                       server.name)
-                raise exception.ResourceFailure(exc)
+                raise exception.ResourceFailure(exc, self)
             else:
                 exc = exception.Error('%s instance[%s] status[%s]' %
                                       ('nova reported unexpected',
                                        self.name, server.status))
-                raise exception.ResourceFailure(exc)
+                raise exception.ResourceFailure(exc, self)
         else:
             return volume_attach.step()
 
index dc5255132aa892ea3afb00e912d8e1827eb7d88e..c43709067f3e2c69934308fb56a6f3c31b3b5c3b 100644 (file)
@@ -16,6 +16,7 @@ import copy
 
 import mox
 
+from heat.engine import clients
 from heat.engine import environment
 from heat.tests.v1_1 import fakes
 from heat.common import exception
@@ -205,6 +206,37 @@ class InstancesTest(HeatTestCase):
 
         self.m.VerifyAll()
 
+    class FakeVolumeAttach:
+        def started(self):
+            return False
+
+    def test_instance_create_unexpected_status(self):
+        return_server = self.fc.servers.list()[1]
+        instance = self._create_test_instance(return_server,
+                                              'test_instance_create')
+        return_server.get = lambda: None
+        return_server.status = 'BOGUS'
+        self.assertRaises(exception.ResourceFailure,
+                          instance.check_create_complete,
+                          (return_server, self.FakeVolumeAttach()))
+
+    def test_instance_create_error_status(self):
+        return_server = self.fc.servers.list()[1]
+        instance = self._create_test_instance(return_server,
+                                              'test_instance_create')
+        return_server.status = 'ERROR'
+        self.m.StubOutWithMock(return_server, 'get')
+        return_server.get()
+        return_server.get().AndRaise(
+            clients.novaclient.exceptions.NotFound('test'))
+        self.m.ReplayAll()
+
+        self.assertRaises(exception.ResourceFailure,
+                          instance.check_create_complete,
+                          (return_server, self.FakeVolumeAttach()))
+
+        self.m.VerifyAll()
+
     def test_instance_validate(self):
         stack_name = 'test_instance_validate_stack'
         (t, stack) = self._setup_test_stack(stack_name)