You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2020/04/04 20:45:11 UTC

[libcloud] 09/21: Add a test case for it.

This is an automated email from the ASF dual-hosted git repository.

tomaz pushed a commit to branch 2.8.x
in repository https://gitbox.apache.org/repos/asf/libcloud.git

commit c9c906aeedc5d3c8f7ba783c3b3e7fef8d4551a5
Author: Tomaz Muraus <to...@tomaz.me>
AuthorDate: Wed Apr 1 12:32:41 2020 +0200

    Add a test case for it.
---
 libcloud/compute/ssh.py                  |  6 +++---
 libcloud/test/compute/test_deployment.py | 18 ++++++++++++++++++
 2 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/libcloud/compute/ssh.py b/libcloud/compute/ssh.py
index 1fad910..cd702c3 100644
--- a/libcloud/compute/ssh.py
+++ b/libcloud/compute/ssh.py
@@ -68,15 +68,15 @@ class SSHCommandTimeoutError(Exception):
         # type: (str, float) -> None
         self.cmd = cmd
         self.timeout = timeout
-        message = 'Command didn\'t finish in %s seconds' % (timeout)
-        super(SSHCommandTimeoutError, self).__init__(message)
+        self.message = 'Command didn\'t finish in %s seconds' % (timeout)
+        super(SSHCommandTimeoutError, self).__init__(self.message)
 
     def __repr__(self):
         return ('<SSHCommandTimeoutError: cmd="%s",timeout=%s)>' %
                 (self.cmd, self.timeout))
 
     def __str__(self):
-        return self.message
+        return self.__repr__()
 
 
 class BaseSSHClient(object):
diff --git a/libcloud/test/compute/test_deployment.py b/libcloud/test/compute/test_deployment.py
index 54cb666..93d2d2f 100644
--- a/libcloud/test/compute/test_deployment.py
+++ b/libcloud/test/compute/test_deployment.py
@@ -34,6 +34,7 @@ from libcloud.compute.base import NodeAuthPassword
 from libcloud.compute.types import NodeState, DeploymentError, LibcloudError
 from libcloud.compute.ssh import BaseSSHClient
 from libcloud.compute.ssh import have_paramiko
+from libcloud.compute.ssh import SSHCommandTimeoutError
 from libcloud.compute.drivers.rackspace import RackspaceFirstGenNodeDriver as Rackspace
 
 from libcloud.test import MockHttp, XML_HEADERS
@@ -409,6 +410,23 @@ class DeploymentTests(unittest.TestCase):
         else:
             self.fail('Exception was not thrown')
 
+    def test_run_deployment_script_ssh_command_timeout_fatal_exception(self):
+        # We shouldn't retry on SSHCommandTimeoutError error since it's fatal
+        task = Mock()
+        task.run = Mock()
+        task.run.side_effect = SSHCommandTimeoutError('ls -la', 10)
+        ssh_client = Mock()
+
+        try:
+            self.driver._run_deployment_script(task=task,
+                                               node=self.node,
+                                               ssh_client=ssh_client,
+                                               max_tries=5)
+        except SSHCommandTimeoutError as e:
+            self.assertTrue(e.message.find('Command didn\'t finish') != -1)
+        else:
+            self.fail('Exception was not thrown')
+
     @patch('libcloud.compute.base.SSHClient')
     @patch('libcloud.compute.ssh')
     def test_deploy_node_success(self, mock_ssh_module, _):