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 <shardy@redhat.com>
This commit is contained in:
Steven Hardy 2012-10-23 14:16:39 +01:00
parent dd6a378152
commit fd66a93cc7
3 changed files with 23 additions and 23 deletions

View File

@ -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")

View File

@ -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)

View File

@ -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,