summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-05-14 13:33:14 +0000
committerGerrit Code Review <review@openstack.org>2016-05-14 13:33:14 +0000
commite1cde970287e84faa5d533cce9576d7dea916a8d (patch)
treef71961ac2e395486b4ea1ad21ebed7be97642b55
parent7e47d3216187c989fbb70281449fbdd08263d603 (diff)
parentc876fabd0726b33a34f72a1af7588da0360ae37f (diff)
downloadoslo-concurrency-e1cde970287e84faa5d533cce9576d7dea916a8d.tar.gz
Merge "Add timeout option to ssh_execute"3.9.0
-rw-r--r--oslo_concurrency/processutils.py5
-rw-r--r--oslo_concurrency/tests/unit/test_processutils.py11
2 files changed, 13 insertions, 3 deletions
diff --git a/oslo_concurrency/processutils.py b/oslo_concurrency/processutils.py
index 1f46221..808ae2a 100644
--- a/oslo_concurrency/processutils.py
+++ b/oslo_concurrency/processutils.py
@@ -466,7 +466,7 @@ def trycmd(*args, **kwargs):
def ssh_execute(ssh, cmd, process_input=None,
addl_env=None, check_exit_code=True,
- binary=False):
+ binary=False, timeout=None):
"""Run a command through SSH.
.. versionchanged:: 1.9
@@ -481,7 +481,8 @@ def ssh_execute(ssh, cmd, process_input=None,
# This is (probably) fixable if we need it...
raise InvalidArgumentError(_('process_input not supported over SSH'))
- stdin_stream, stdout_stream, stderr_stream = ssh.exec_command(cmd)
+ stdin_stream, stdout_stream, stderr_stream = ssh.exec_command(
+ cmd, timeout=timeout)
channel = stdout_stream.channel
# NOTE(justinsb): This seems suspicious...
diff --git a/oslo_concurrency/tests/unit/test_processutils.py b/oslo_concurrency/tests/unit/test_processutils.py
index 5c744f5..8454dbf 100644
--- a/oslo_concurrency/tests/unit/test_processutils.py
+++ b/oslo_concurrency/tests/unit/test_processutils.py
@@ -21,6 +21,7 @@ import multiprocessing
import os
import pickle
import resource
+import socket
import stat
import subprocess
import sys
@@ -599,7 +600,9 @@ class FakeSshConnection(object):
self.out = out
self.err = err
- def exec_command(self, cmd):
+ def exec_command(self, cmd, timeout=None):
+ if timeout:
+ raise socket.timeout()
stdout = FakeSshStream(self.out)
stdout.setup_channel(self.rc)
return (six.BytesIO(),
@@ -618,6 +621,12 @@ class SshExecuteTestCase(test_base.BaseTestCase):
processutils.ssh_execute,
None, 'ls', process_input='important')
+ def test_timeout_error(self):
+ self.assertRaises(socket.timeout,
+ processutils.ssh_execute,
+ FakeSshConnection(0), 'ls',
+ timeout=10)
+
def test_works(self):
out, err = processutils.ssh_execute(FakeSshConnection(0), 'ls')
self.assertEqual('stdout', out)