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