]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
heat tests : functional utils support for UpdateStack
authorSteven Hardy <shardy@redhat.com>
Wed, 26 Sep 2012 13:37:07 +0000 (14:37 +0100)
committerSteven Hardy <shardy@redhat.com>
Fri, 28 Sep 2012 09:06:35 +0000 (10:06 +0100)
Add Stack.update method so UpdateStack API action
can be tested

Change-Id: I2fdc37b15eab9b7d786153877755a631fda0ad2a
Signed-off-by: Steven Hardy <shardy@redhat.com>
heat/tests/functional/util.py

index bb88ec143a221580adb64f42f4d7de251951f538..9b3810db52a837eecb550639e2c790607f89fc1f 100644 (file)
@@ -340,7 +340,7 @@ class Stack(object):
 
         self.heatclient = self._create_heat_client()
 
-    def create(self):
+    def format_parameters(self):
         self.keyname = self.novaclient.keypairs.list().pop().name
 
         self.testcase.assertTrue(self.heatclient)
@@ -358,6 +358,10 @@ class Stack(object):
                                      self.template_file)
         parameters['TemplateBody'] = open(template_path).read()
         parameters.update(self.heatclient.format_parameters(template_params))
+        return parameters
+
+    def create(self):
+        parameters = self.format_parameters()
         result = self.heatclient.create_stack(**parameters)
 
         self._check_create_result(result)
@@ -373,15 +377,42 @@ class Stack(object):
 
         self.testcase.assertEqual(self.get_state(), 'CREATE_COMPLETE')
 
+    def update(self):
+        parameters = self.format_parameters()
+        result = self.heatclient.update_stack(**parameters)
+
+        self._check_update_result(result)
+
+        alist = None
+        tries = 0
+
+        print 'Waiting for stack update to be completed'
+        while self.get_state() == 'UPDATE_IN_PROGRESS':
+            tries += 1
+            self.testcase.assertTrue(tries < 500, 'Timed out')
+            time.sleep(10)
+
+        self.testcase.assertEqual(self.get_state(), 'UPDATE_COMPLETE')
+
     def _check_create_result(self, result):
         # Check result looks OK
         root = etree.fromstring(result)
         create_list = root.xpath('/CreateStackResponse/CreateStackResult')
         self.testcase.assertTrue(create_list)
         self.testcase.assertEqual(len(create_list), 1)
+        self._check_stackid(create_list)
 
+    def _check_update_result(self, result):
+        # Check result looks OK
+        root = etree.fromstring(result)
+        update_list = root.xpath('/UpdateStackResponse/UpdateStackResult')
+        self.testcase.assertTrue(update_list)
+        self.testcase.assertEqual(len(update_list), 1)
+        self._check_stackid(update_list)
+
+    def _check_stackid(self, xpq_list):
         # Extract StackId from the result, and check the StackName part
-        stackid = create_list[0].findtext('StackId')
+        stackid = xpq_list[0].findtext('StackId')
         idname = stackid.split('/')[1]
         print "Checking %s contains name %s" % (stackid, self.stackname)
         self.testcase.assertEqual(idname, self.stackname)
@@ -529,6 +560,9 @@ class StackBoto(Stack):
     def _check_create_result(self, result):
         pass
 
+    def _check_update_result(self, result):
+        pass
+
     def _create_heat_client(self):
         # Connect to the keystone client with the supplied credentials
         # and extract the ec2-credentials, so we can pass them into the