Author: tomaz
Date: Fri Jun 17 20:29:42 2011
New Revision: 1137008

URL: http://svn.apache.org/viewvc?rev=1137008&view=rev
Log:
More tests and extra sanity check in deploy_node.

Modified:
    libcloud/trunk/libcloud/compute/base.py
    libcloud/trunk/test/compute/test_deployment.py

Modified: libcloud/trunk/libcloud/compute/base.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/compute/base.py?rev=1137008&r1=1137007&r2=1137008&view=diff
==============================================================================
--- libcloud/trunk/libcloud/compute/base.py (original)
+++ libcloud/trunk/libcloud/compute/base.py Fri Jun 17 20:29:42 2011
@@ -510,7 +510,9 @@ class NodeDriver(object):
         # TODO: support ssh keys
         password = None
 
-        if 'generates_password' not in self.features["create_node"]:
+        if 'create_node' not in self.features:
+            raise NotImplementedError, 'deploy_node not implemented for this 
driver'
+        elif 'generates_password' not in self.features["create_node"]:
             if 'password' not in self.features["create_node"]:
                 raise NotImplementedError, \
                     'deploy_node not implemented for this driver'
@@ -519,6 +521,7 @@ class NodeDriver(object):
                 kwargs['auth'] = NodeAuthPassword(os.urandom(16).encode('hex'))
 
             password = kwargs['auth'].password
+
         node = self.create_node(**kwargs)
 
         try:

Modified: libcloud/trunk/test/compute/test_deployment.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/test/compute/test_deployment.py?rev=1137008&r1=1137007&r2=1137008&view=diff
==============================================================================
--- libcloud/trunk/test/compute/test_deployment.py (original)
+++ libcloud/trunk/test/compute/test_deployment.py Fri Jun 17 20:29:42 2011
@@ -29,7 +29,7 @@ from libcloud.compute.drivers.rackspace 
 
 from test import MockHttp
 from test.file_fixtures import ComputeFileFixtures
-from mock import Mock
+from mock import Mock, patch
 
 from test.secrets import RACKSPACE_USER, RACKSPACE_KEY
 
@@ -58,6 +58,7 @@ class DeploymentTests(unittest.TestCase)
         Rackspace.connectionCls.conn_classes = (None, RackspaceMockHttp)
         RackspaceMockHttp.type = None
         self.driver = Rackspace(RACKSPACE_USER, RACKSPACE_KEY)
+        self.driver.features = {'create_node': ['generates_password']}
         self.node = Node(id=12345, name='test', state=NodeState.RUNNING,
                    public_ip=['1.2.3.4'], private_ip='1.2.3.5',
                    driver=Rackspace)
@@ -213,6 +214,68 @@ class DeploymentTests(unittest.TestCase)
         else:
             self.fail('Exception was not thrown')
 
+    @patch('libcloud.compute.base.SSHClient')
+    def test_deploy_node_success(self, _):
+        self.driver.create_node = Mock()
+        self.driver.create_node.return_value = self.node
+
+        deploy = Mock()
+
+        self.driver.deploy_node(deploy=deploy)
+
+    @patch('libcloud.compute.base.SSHClient')
+    def test_deploy_node_exception_run_deployment_script(self, _):
+        self.driver.create_node = Mock()
+        self.driver.create_node.return_value = self.node
+
+        deploy = Mock()
+        deploy.run = Mock()
+        deploy.run.side_effect = Exception('foo')
+
+        try:
+            self.driver.deploy_node(deploy=deploy)
+        except DeploymentError, e:
+            self.assertTrue(e.node.id, self.node.id)
+        else:
+            self.fail('Exception was not thrown')
+
+    @patch('libcloud.compute.base.SSHClient', spec=True)
+    def test_deploy_node_exception_ssh_client_connect(self, ssh_client):
+        self.driver.create_node = Mock()
+        self.driver.create_node.return_value = self.node
+
+        deploy = Mock()
+        ssh_client.side_effect = IOError('bar')
+
+        try:
+            self.driver.deploy_node(deploy=deploy)
+        except DeploymentError, e:
+            self.assertTrue(e.node.id, self.node.id)
+        else:
+            self.fail('Exception was not thrown')
+
+    def test_deploy_node_depoy_node_not_implemented(self):
+        oldFeatures = self.driver.features
+
+        self.driver.features = {'create_node': []}
+
+        try:
+            self.driver.deploy_node(deploy=Mock())
+        except NotImplementedError:
+            pass
+        else:
+            self.fail('Exception was not thrown')
+
+        self.driver.features = {}
+
+        try:
+            self.driver.deploy_node(deploy=Mock())
+        except NotImplementedError:
+            pass
+        else:
+            self.fail('Exception was not thrown')
+
+
 class RackspaceMockHttp(MockHttp):
 
     fixtures = ComputeFileFixtures('rackspace')


Reply via email to