]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Adding instance creation test
authorChris Alfonso <calfonso@redhat.com>
Thu, 19 Apr 2012 23:24:28 +0000 (19:24 -0400)
committerChris Alfonso <calfonso@redhat.com>
Mon, 23 Apr 2012 12:17:10 +0000 (08:17 -0400)
heat/engine/resources.py
heat/tests/test_resources.py

index 4ca18d5b46a54d523db779645099c67c8212c23e..438666655a09e32e06277039da26cb424fe226dc 100644 (file)
@@ -35,7 +35,6 @@ from heat.db import api as db_api
 from heat.common.config import HeatEngineConfigOpts
 
 logger = logging.getLogger('heat.engine.resources')
-
 # If ../heat/__init__.py exists, add ../ to Python search path, so that
 # it will override what happens to be installed in /usr/(local/)lib/python...
 possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
@@ -520,6 +519,33 @@ class Instance(Resource):
         logger.info('%s.GetAtt(%s) == %s' % (self.name, key, res))
         return unicode(res)
 
+    def _build_userdata(self, userdata):
+        # Build mime multipart data blob for cloudinit userdata
+        mime_blob = MIMEMultipart()
+        fp = open('%s/%s' % (cloudinit_path, 'config'), 'r')
+        msg = MIMEText(fp.read(), _subtype='cloud-config')
+        fp.close()
+        msg.add_header('Content-Disposition', 'attachment',
+                       filename='cloud-config')
+        mime_blob.attach(msg)
+
+        fp = open('%s/%s' % (cloudinit_path, 'part-handler.py'), 'r')
+        msg = MIMEText(fp.read(), _subtype='part-handler')
+        fp.close()
+        msg.add_header('Content-Disposition', 'attachment',
+                       filename='part-handler.py')
+        mime_blob.attach(msg)
+
+        msg = MIMEText(json.dumps(self.t['Metadata']),
+                       _subtype='x-cfninitdata')
+        msg.add_header('Content-Disposition', 'attachment',
+                       filename='cfn-init-data')
+        mime_blob.attach(msg)
+
+        msg = MIMEText(userdata, _subtype='x-shellscript')
+        msg.add_header('Content-Disposition', 'attachment', filename='startup')
+        return mime_blob.attach(msg)
+
     def create(self):
         def _null_callback(p, n, out):
             """
@@ -531,7 +557,6 @@ class Instance(Resource):
             return
         self.state_set(self.CREATE_IN_PROGRESS)
         Resource.create(self)
-
         props = self.t['Properties']
         if not 'KeyName' in props:
             raise exception.UserParameterMissing(key='KeyName')
@@ -574,36 +599,12 @@ class Instance(Resource):
             if o.name == flavor:
                 flavor_id = o.id
 
-        # Build mime multipart data blob for cloudinit userdata
-        mime_blob = MIMEMultipart()
-        fp = open('%s/%s' % (cloudinit_path, 'config'), 'r')
-        msg = MIMEText(fp.read(), _subtype='cloud-config')
-        fp.close()
-        msg.add_header('Content-Disposition', 'attachment',
-                       filename='cloud-config')
-        mime_blob.attach(msg)
-
-        fp = open('%s/%s' % (cloudinit_path, 'part-handler.py'), 'r')
-        msg = MIMEText(fp.read(), _subtype='part-handler')
-        fp.close()
-        msg.add_header('Content-Disposition', 'attachment',
-                       filename='part-handler.py')
-        mime_blob.attach(msg)
-
-        msg = MIMEText(json.dumps(self.t['Metadata']),
-                       _subtype='x-cfninitdata')
-        msg.add_header('Content-Disposition', 'attachment',
-                       filename='cfn-init-data')
-        mime_blob.attach(msg)
-
-        msg = MIMEText(userdata, _subtype='x-shellscript')
-        msg.add_header('Content-Disposition', 'attachment', filename='startup')
-        mime_blob.attach(msg)
+        server_userdata = self._build_userdata(userdata) 
         server = self.nova().servers.create(name=self.name, image=image_id,
                                             flavor=flavor_id,
                                             key_name=key_name,
                                             security_groups=security_groups,
-                                            userdata=mime_blob.as_string())
+                                            userdata=server_userdata)
         while server.status == 'BUILD':
             server.get()
             eventlet.sleep(1)
index c8f8841245d0d2859f5c0994001d09c3bf6d7b62..ccb6e2eae64712356e44455e17c8058d3956896a 100644 (file)
@@ -21,7 +21,7 @@ from heat.engine import parser
 class ResourcesTest(unittest.TestCase):
     def setUp(self):
         self.m = mox.Mox()
-        self.cs = fakes.FakeClient()
+        self.fc = fakes.FakeClient()
 
     def tearDown(self):
         self.m.UnsetStubs()
@@ -42,18 +42,30 @@ class ResourcesTest(unittest.TestCase):
                                               stack).AndReturn(None)
 
         self.m.StubOutWithMock(resources.Instance, 'nova')
-        resources.Instance.nova().AndReturn(self.cs)
-        resources.Instance.nova().AndReturn(self.cs)
-        resources.Instance.nova().AndReturn(self.cs)
-        resources.Instance.nova().AndReturn(self.cs)
+        resources.Instance.nova().AndReturn(self.fc)
+        resources.Instance.nova().AndReturn(self.fc)
+        resources.Instance.nova().AndReturn(self.fc)
+        resources.Instance.nova().AndReturn(self.fc)
+
+        #Need to find an easier way
+        userdata = t['Resources']['WebServer']['Properties']['UserData']
 
-        
-        print self.cs.flavors.list()[0].name 
         self.m.ReplayAll()
+        
+        
         t['Resources']['WebServer']['Properties']['ImageId']  = 'CentOS 5.2'
         t['Resources']['WebServer']['Properties']['InstanceType'] = '256 MB Server'
         instance = resources.Instance('test_resource_name',\
                                       t['Resources']['WebServer'], stack)
+       
+        server_userdata = instance._build_userdata(json.dumps(userdata))
+        self.m.StubOutWithMock(self.fc.servers, 'create')
+        self.fc.servers.create(image=1, flavor=1, key_name='test',\
+                name='test_resource_name', security_groups=None,\
+                userdata=server_userdata).\
+                AndReturn(self.fc.servers.list()[1])
+        self.m.ReplayAll()
+        
 
         instance.itype_oflavor['256 MB Server'] = '256 MB Server'
         instance.create()