From: Ian Main Date: Fri, 11 May 2012 17:23:38 +0000 (-0700) Subject: Add event_list test. X-Git-Tag: 2014.1~1843 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=50e5f2de917612dcf4285d9fdc66036329f1ffa5;p=openstack-build%2Fheat-build.git Add event_list test. I moved parse_event out of the method and into the class so we could call it from the event_list test. Signed-off-by: Ian Main --- diff --git a/heat/engine/manager.py b/heat/engine/manager.py index 475c7fff..dbc3bec1 100644 --- a/heat/engine/manager.py +++ b/heat/engine/manager.py @@ -33,6 +33,19 @@ from heat.db import api as db_api logger = logging.getLogger('heat.engine.manager') +def parse_event(event): + s = event.stack + return {'EventId': event.id, + 'StackId': event.stack_id, + 'StackName': s.name, + 'Timestamp': str(event.created_at), + 'LogicalResourceId': event.logical_resource_id, + 'PhysicalResourceId': event.physical_resource_id, + 'ResourceType': event.resource_type, + 'ResourceStatusReason': event.resource_status_reason, + 'ResourceProperties': event.resource_properties, + 'ResourceStatus': event.name} + class EngineManager(manager.Manager): """ @@ -222,19 +235,6 @@ class EngineManager(manager.Manager): else: events = db_api.event_get_all(None) - def parse_event(e): - s = e.stack - return {'EventId': e.id, - 'StackId': e.stack_id, - 'StackName': s.name, - 'Timestamp': str(e.created_at), - 'LogicalResourceId': e.logical_resource_id, - 'PhysicalResourceId': e.physical_resource_id, - 'ResourceType': e.resource_type, - 'ResourceStatusReason': e.resource_status_reason, - 'ResourceProperties': e.resource_properties, - 'ResourceStatus': e.name} - return {'events': [parse_event(e) for e in events]} def event_create(self, context, event): diff --git a/heat/tests/test_stacks.py b/heat/tests/test_stacks.py index 7e4e39dd..6d187469 100644 --- a/heat/tests/test_stacks.py +++ b/heat/tests/test_stacks.py @@ -13,6 +13,7 @@ from heat.tests.v1_1 import fakes from heat.engine import instance as instances import heat.db as db_api from heat.engine import parser +from heat.engine import manager @attr(tag=['unit', 'resource']) @@ -106,6 +107,67 @@ class stacksTest(unittest.TestCase): assert(stack.resources['WebServer'].state == 'DELETE_COMPLETE') assert(stack.t['stack_status'] == 'DELETE_COMPLETE') + def test_stack_event_list(self): + f = open('../../templates/WordPress_Single_Instance_gold.template') + t = json.loads(f.read()) + f.close() + params = {} + parameters = {} + params['KeyStoneCreds'] = None + t['Parameters']['KeyName']['Value'] = 'test' + stack = parser.Stack('test_event_list_stack', t, 0, params) + self.m.StubOutWithMock(instances.Instance, 'nova') + instances.Instance.nova().AndReturn(self.fc) + instances.Instance.nova().AndReturn(self.fc) + instances.Instance.nova().AndReturn(self.fc) + instances.Instance.nova().AndReturn(self.fc) + instances.Instance.nova().AndReturn(self.fc) + instance = stack.resources['WebServer'] + instance.itype_oflavor['m1.large'] = 'm1.large' + instance.stack.resolve_attributes(instance.t) + instance.stack.resolve_joins(instance.t) + instance.stack.resolve_base64(instance.t) + server_userdata = instance._build_userdata(\ + instance.t['Properties']['UserData']) + self.m.StubOutWithMock(self.fc.servers, 'create') + self.fc.servers.create(image=744, flavor=3, key_name='test',\ + name='WebServer', security_groups=None,\ + userdata=server_userdata).\ + AndReturn(self.fc.servers.list()[2]) + self.m.ReplayAll() + rt = {} + rt['template'] = stack.t + rt['stack_name'] = stack.name + new_rt = db_api.raw_template_create(None, rt) + s = {} + s['name'] = stack.name + s['raw_template_id'] = new_rt.id + new_s = db_api.stack_create(None, s) + stack.id = new_s.id + pt = {} + pt['template'] = stack.t + pt['raw_template_id'] = new_rt.id + new_pt = db_api.parsed_template_create(None, pt) + stack.create_blocking() + assert(stack.resources['WebServer'] != None) + assert(stack.resources['WebServer'].instance_id > 0) + + events = db_api.event_get_all_by_stack(None, stack.id) + for ev in events: + result = manager.parse_event(ev) + assert(result['EventId'] > 0) + assert(result['StackName'] == "test_event_list_stack") + # This is one of CREATE_COMPLETE or CREATE_IN_PROGRESS, just did this to make it easy. + assert(result['ResourceStatus'].find('CREATE') != -1) + assert(result['ResourceType'] == 'AWS::EC2::Instance') + assert(result['ResourceStatusReason'] == 'state changed') + assert(result['LogicalResourceId'] == 'WebServer') + # Big long user data field.. it mentions 'wordpress' a few times so this should work. + assert(result['ResourceProperties']['UserData'].find('wordpress') != -1) + assert(result['ResourceProperties']['ImageId'] == 'F16-x86_64-gold') + assert(result['ResourceProperties']['InstanceType'] == 'm1.large') + + # allows testing of the test directly, shown below if __name__ == '__main__': sys.argv.append(__file__)