Code Review
/
csit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
CSIT-1009: SRv6 proxy tests
[csit.git]
/
resources
/
libraries
/
python
/
ssh.py
diff --git
a/resources/libraries/python/ssh.py
b/resources/libraries/python/ssh.py
index
ca6d655
..
7fa10bc
100644
(file)
--- a/
resources/libraries/python/ssh.py
+++ b/
resources/libraries/python/ssh.py
@@
-132,7
+132,6
@@
class SSH(object):
:rtype: tuple(int, str, str)
:raise SSHTimeout: If command is not finished in timeout time.
"""
:rtype: tuple(int, str, str)
:raise SSHTimeout: If command is not finished in timeout time.
"""
- start = time()
stdout = StringIO.StringIO()
stderr = StringIO.StringIO()
try:
stdout = StringIO.StringIO()
stderr = StringIO.StringIO()
try:
@@
-147,6
+146,7
@@
class SSH(object):
logger.trace('exec_command on {0}: {1}'
.format(self._ssh.get_transport().getpeername(), cmd))
logger.trace('exec_command on {0}: {1}'
.format(self._ssh.get_transport().getpeername(), cmd))
+ start = time()
chan.exec_command(cmd)
while not chan.exit_status_ready() and timeout is not None:
if chan.recv_ready():
chan.exec_command(cmd)
while not chan.exit_status_ready() and timeout is not None:
if chan.recv_ready():
@@
-157,10
+157,10
@@
class SSH(object):
if time() - start > timeout:
raise SSHTimeout(
if time() - start > timeout:
raise SSHTimeout(
- 'Timeout exception
.
\n'
- 'Current contents of stdout buffer: {
0
}\n'
- 'Current contents of stderr buffer: {
1
}\n'
- .format(stdout.getvalue(), stderr.getvalue())
+ 'Timeout exception
during execution of command: {0}
\n'
+ 'Current contents of stdout buffer: {
1
}\n'
+ 'Current contents of stderr buffer: {
2
}\n'
+ .format(
cmd,
stdout.getvalue(), stderr.getvalue())
)
sleep(0.1)
)
sleep(0.1)
@@
-176,8
+176,6
@@
class SSH(object):
logger.trace('exec_command on {0} took {1} seconds'.format(
self._ssh.get_transport().getpeername(), end-start))
logger.trace('exec_command on {0} took {1} seconds'.format(
self._ssh.get_transport().getpeername(), end-start))
- logger.trace('chan_recv/_stderr took {} seconds'.format(time()-end))
-
logger.trace('return RC {}'.format(return_code))
logger.trace('return STDOUT {}'.format(stdout.getvalue()))
logger.trace('return STDERR {}'.format(stderr.getvalue()))
logger.trace('return RC {}'.format(return_code))
logger.trace('return STDOUT {}'.format(stdout.getvalue()))
logger.trace('return STDERR {}'.format(stderr.getvalue()))
@@
-250,7
+248,7
@@
class SSH(object):
chan.set_combine_stderr(True)
buf = ''
chan.set_combine_stderr(True)
buf = ''
- while not buf.endswith((":~$ ", "~]$ ")):
+ while not buf.endswith((":~$ ", "~]$ "
, "~]# "
)):
try:
chunk = chan.recv(self.__MAX_RECV_BUF)
if not chunk:
try:
chunk = chan.recv(self.__MAX_RECV_BUF)
if not chunk:
@@
-260,6
+258,7
@@
class SSH(object):
logger.error('Channel exit status ready')
break
except socket.timeout:
logger.error('Channel exit status ready')
break
except socket.timeout:
+ logger.error('Socket timeout: {0}'.format(buf))
raise Exception('Socket timeout: {0}'.format(buf))
return chan
raise Exception('Socket timeout: {0}'.format(buf))
return chan
@@
-293,7
+292,10
@@
class SSH(object):
logger.error('Channel exit status ready')
break
except socket.timeout:
logger.error('Channel exit status ready')
break
except socket.timeout:
- raise Exception('Socket timeout: {0}'.format(buf))
+ logger.error('Socket timeout during execution of command: '
+ '{0}\nBuffer content:\n{1}'.format(cmd, buf))
+ raise Exception('Socket timeout during execution of command: '
+ '{0}\nBuffer content:\n{1}'.format(cmd, buf))
tmp = buf.replace(cmd.replace('\n', ''), '')
for item in prompt:
tmp.replace(item, '')
tmp = buf.replace(cmd.replace('\n', ''), '')
for item in prompt:
tmp.replace(item, '')
@@
-307,7
+309,7
@@
class SSH(object):
"""
chan.close()
"""
chan.close()
- def scp(self, local_path, remote_path, get=False):
+ def scp(self, local_path, remote_path, get=False
, timeout=10
):
"""Copy files from local_path to remote_path or vice versa.
connect() method has to be called first!
"""Copy files from local_path to remote_path or vice versa.
connect() method has to be called first!
@@
-317,9
+319,11
@@
class SSH(object):
:param remote_path: Remote path where to place uploaded file; or
path to remote file which should be downloaded.
:param get: scp operation to perform. Default is put.
:param remote_path: Remote path where to place uploaded file; or
path to remote file which should be downloaded.
:param get: scp operation to perform. Default is put.
+ :param timeout: Timeout value in seconds.
:type local_path: str
:type remote_path: str
:type get: bool
:type local_path: str
:type remote_path: str
:type get: bool
+ :type timeout: int
"""
if not get:
logger.trace('SCP {0} to {1}:{2}'.format(
"""
if not get:
logger.trace('SCP {0} to {1}:{2}'.format(
@@
-330,7
+334,7
@@
class SSH(object):
self._ssh.get_transport().getpeername(), remote_path,
local_path))
# SCPCLient takes a paramiko transport as its only argument
self._ssh.get_transport().getpeername(), remote_path,
local_path))
# SCPCLient takes a paramiko transport as its only argument
- scp = SCPClient(self._ssh.get_transport(), socket_timeout=
10
)
+ scp = SCPClient(self._ssh.get_transport(), socket_timeout=
timeout
)
start = time()
if not get:
scp.put(local_path, remote_path)
start = time()
if not get:
scp.put(local_path, remote_path)