]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Add event_list test.
authorIan Main <imain@redhat.com>
Fri, 11 May 2012 17:23:38 +0000 (10:23 -0700)
committerIan Main <imain@redhat.com>
Fri, 11 May 2012 17:26:37 +0000 (10:26 -0700)
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 <imain@redhat.com>
heat/engine/manager.py
heat/tests/test_stacks.py

index 475c7fff7f6ea1096c0def140ee7e24964022984..dbc3bec1e8dd22fb4509073b4791db01c544ef4f 100644 (file)
@@ -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):
index 7e4e39dddaa502d72fb12f8d36f4c3eaa45f6acd..6d187469fbc08912a5ebd75a33d4207357d94ada 100644 (file)
@@ -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__)