From fd66a93cc77e7c719b710496c8eeba23f7f60482 Mon Sep 17 00:00:00 2001 From: Steven Hardy Date: Tue, 23 Oct 2012 14:16:39 +0100 Subject: [PATCH] heat tests : refactor stackid check into utils.Stack Rework utils.Stack._check_stackid so it can be used in the tests to verify stackid format, avoiding maintaining multiple copies of a stackid regex Change-Id: If7fbd7b35626c377b42a43ffa03ee8067540963b Signed-off-by: Steven Hardy --- heat/tests/functional/test_CFN_API_Actions.py | 13 +++++------- .../functional/test_CFN_API_Actions_Boto.py | 12 +++++------ heat/tests/functional/util.py | 21 ++++++++++++------- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/heat/tests/functional/test_CFN_API_Actions.py b/heat/tests/functional/test_CFN_API_Actions.py index d54e86ddc8..a0edc8775c 100644 --- a/heat/tests/functional/test_CFN_API_Actions.py +++ b/heat/tests/functional/test_CFN_API_Actions.py @@ -72,9 +72,6 @@ class CfnApiFunctionalTest(unittest.TestCase): cls.logical_resource_status = "CREATE_COMPLETE" # Save some compiled regexes and strings for response validation - cls.stack_id_re = re.compile("^arn:openstack:heat::[0-9a-z]{32}:" + - "stacks/" + cls.stack.stackname) - cls.time_re = re.compile( "[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$") cls.description_re = re.compile( @@ -117,7 +114,7 @@ class CfnApiFunctionalTest(unittest.TestCase): prefix = '/ListStacksResponse/ListStacksResult/StackSummaries/member' stack_id = self.stack.response_xml_item(response, prefix, "StackId") - self.assertTrue(self.stack_id_re.match(stack_id) != None) + self.stack.check_stackid(stack_id) update_time = self.stack.response_xml_item(response, prefix, "LastUpdatedTime") @@ -152,7 +149,7 @@ class CfnApiFunctionalTest(unittest.TestCase): prefix = '/DescribeStacksResponse/DescribeStacksResult/Stacks/member' stack_id = self.stack.response_xml_item(response, prefix, "StackId") - self.assertTrue(self.stack_id_re.match(stack_id) != None) + self.stack.check_stackid(stack_id) update_time = self.stack.response_xml_item(response, prefix, "LastUpdatedTime") @@ -230,7 +227,7 @@ class CfnApiFunctionalTest(unittest.TestCase): self.logical_resource_status + '"]' stack_id = self.stack.response_xml_item(response, prefix, "StackId") - self.assertTrue(self.stack_id_re.match(stack_id) != None) + self.stack.check_stackid(stack_id) event_id = self.stack.response_xml_item(response, prefix, "EventId") self.assertTrue(re.match("[0-9]*$", event_id) != None) @@ -302,7 +299,7 @@ class CfnApiFunctionalTest(unittest.TestCase): + '/StackResourceDetail' stack_id = self.stack.response_xml_item(response, prefix, "StackId") - self.assertTrue(self.stack_id_re.match(stack_id) != None) + self.stack.check_stackid(stack_id) resource_status = self.stack.response_xml_item(response, prefix, "ResourceStatus") @@ -347,7 +344,7 @@ class CfnApiFunctionalTest(unittest.TestCase): 'DescribeStackResourcesResult/StackResources/member' stack_id = self.stack.response_xml_item(response, prefix, "StackId") - self.assertTrue(self.stack_id_re.match(stack_id) != None) + self.stack.check_stackid(stack_id) resource_status = self.stack.response_xml_item(response, prefix, "ResourceStatus") diff --git a/heat/tests/functional/test_CFN_API_Actions_Boto.py b/heat/tests/functional/test_CFN_API_Actions_Boto.py index a21b326149..35cd544d73 100644 --- a/heat/tests/functional/test_CFN_API_Actions_Boto.py +++ b/heat/tests/functional/test_CFN_API_Actions_Boto.py @@ -76,8 +76,6 @@ class CfnApiBotoFunctionalTest(unittest.TestCase): cls.logical_resource_status = "CREATE_COMPLETE" # Save some compiled regexes and strings for response validation - cls.stack_id_re = re.compile("^arn:openstack:heat::[0-9a-z]{32}:" + - "stacks/" + cls.stack.stackname) cls.time_re = re.compile( "[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$") cls.description_re = re.compile( @@ -127,7 +125,7 @@ class CfnApiBotoFunctionalTest(unittest.TestCase): # Note the boto StackSummary object does not contain every item # output by our API (ie defined in the AWS docs), we can only # test what boto encapsulates in the StackSummary class - self.assertTrue(self.stack_id_re.match(summary[0].stack_id) != None) + self.stack.check_stackid(summary[0].stack_id) self.assertEqual(type(summary[0].creation_time), datetime.datetime) @@ -152,7 +150,7 @@ class CfnApiBotoFunctionalTest(unittest.TestCase): self.assertEqual(type(stacks[0].creation_time), datetime.datetime) - self.assertTrue(self.stack_id_re.match(stacks[0].stack_id) != None) + self.stack.check_stackid(stacks[0].stack_id) self.assertTrue(self.description_re.match(stacks[0].description) != None) @@ -207,7 +205,7 @@ class CfnApiBotoFunctionalTest(unittest.TestCase): self.assertEqual(len(events), 1) - self.assertTrue(self.stack_id_re.match(events[0].stack_id) != None) + self.stack.check_stackid(events[0].stack_id) self.assertTrue(re.match("[0-9]*$", events[0].event_id) != None) @@ -268,7 +266,7 @@ class CfnApiBotoFunctionalTest(unittest.TestCase): res = desc_result['StackResourceDetail'] self.assertTrue(res != None) - self.assertTrue(self.stack_id_re.match(res['StackId']) != None) + self.stack.check_stackid(res['StackId']) self.assertEqual(res['ResourceStatus'], self.logical_resource_status) @@ -301,7 +299,7 @@ class CfnApiBotoFunctionalTest(unittest.TestCase): res = response[0] self.assertTrue(res != None) - self.assertTrue(self.stack_id_re.match(res.stack_id) != None) + self.stack.check_stackid(res.stack_id) self.assertEqual(res.resource_status, self.logical_resource_status) diff --git a/heat/tests/functional/util.py b/heat/tests/functional/util.py index 736d85702d..cb6390b9f9 100644 --- a/heat/tests/functional/util.py +++ b/heat/tests/functional/util.py @@ -26,6 +26,7 @@ import nose import errno import tempfile import stat +import re from pkg_resources import resource_string from lxml import etree @@ -322,6 +323,9 @@ class Stack(object): self.distribution = distribution self.stack_paramstr = stack_paramstr + self.stack_id_re = re.compile("^arn:openstack:heat::[0-9a-z]{32}:" + + "stacks/" + self.stackname + "/[0-9]*$") + self.creds = dict(username=os.environ['OS_USERNAME'], password=os.environ['OS_PASSWORD'], tenant=os.environ['OS_TENANT_NAME'], @@ -404,7 +408,9 @@ class Stack(object): create_list = root.xpath('/CreateStackResponse/CreateStackResult') self.testcase.assertTrue(create_list) self.testcase.assertEqual(len(create_list), 1) - self._check_stackid(create_list) + stack_id = create_list[0].findtext('StackId') + self.testcase.assertTrue(stack_id != None) + self.check_stackid(stack_id) def _check_update_result(self, result): # Check result looks OK @@ -412,14 +418,13 @@ class Stack(object): update_list = root.xpath('/UpdateStackResponse/UpdateStackResult') self.testcase.assertTrue(update_list) self.testcase.assertEqual(len(update_list), 1) - self._check_stackid(update_list) + stack_id = update_list[0].findtext('StackId') + self.testcase.assertTrue(stack_id != None) + self.check_stackid(stack_id) - def _check_stackid(self, xpq_list): - # Extract StackId from the result, and check the StackName part - 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) + def check_stackid(self, stack_id): + print "Checking %s matches expected format" % (stack_id) + self.testcase.assertTrue(self.stack_id_re.match(stack_id) != None) def _create_heat_client(self): return heat_client.get_client('0.0.0.0', 8000,