Merge "Get console output for any exception in ssh session" into mcp/caracal
diff --git a/tempest/lib/common/utils/linux/remote_client.py b/tempest/lib/common/utils/linux/remote_client.py
index 662b452..bdf35e7 100644
--- a/tempest/lib/common/utils/linux/remote_client.py
+++ b/tempest/lib/common/utils/linux/remote_client.py
@@ -31,35 +31,33 @@
return function(self, *args, **kwargs)
except Exception as e:
caller = test_utils.find_test_caller() or "not found"
- if not isinstance(e, tempest.lib.exceptions.SSHTimeout):
- message = ('Executing command on %(ip)s failed. '
- 'Error: %(error)s' % {'ip': self.ip_address,
- 'error': e})
- message = '(%s) %s' % (caller, message)
- LOG.error(message)
- raise
- else:
- try:
- original_exception = sys.exc_info()
- if self.server:
+ message = ('Executing command on %(ip)s failed. '
+ 'Error: %(error)s' % {'ip': self.ip_address,
+ 'error': e})
+ message = '(%s) %s' % (caller, message)
+ LOG.error(message)
+ try:
+ original_exception = sys.exc_info()
+ if self.server:
+ if isinstance(e, tempest.lib.exceptions.SSHTimeout):
msg = 'Caller: %s. Timeout trying to ssh to server %s'
LOG.debug(msg, caller, self.server)
- if self.console_output_enabled and self.servers_client:
- try:
- msg = 'Console log for server %s: %s'
- console_log = (
- self.servers_client.get_console_output(
- self.server['id'])['output'])
- LOG.debug(msg, self.server['id'], console_log)
- except Exception:
- msg = 'Could not get console_log for server %s'
- LOG.debug(msg, self.server['id'])
- # raise the original ssh timeout exception
- raise
- finally:
- # Delete the traceback to avoid circular references
- _, _, trace = original_exception
- del trace
+ if self.console_output_enabled and self.servers_client:
+ try:
+ msg = 'Console log for server %s: %s'
+ console_log = (
+ self.servers_client.get_console_output(
+ self.server['id'])['output'])
+ LOG.debug(msg, self.server['id'], console_log)
+ except Exception:
+ msg = 'Could not get console_log for server %s'
+ LOG.debug(msg, self.server['id'])
+ # raise the original ssh exception
+ raise
+ finally:
+ # Delete the traceback to avoid circular references
+ _, _, trace = original_exception
+ del trace
return wrapper
diff --git a/tempest/tests/common/utils/linux/test_remote_client.py b/tempest/tests/common/utils/linux/test_remote_client.py
index 937f93a..5801f04 100644
--- a/tempest/tests/common/utils/linux/test_remote_client.py
+++ b/tempest/tests/common/utils/linux/test_remote_client.py
@@ -180,9 +180,7 @@
def test_validate_debug_ssh_console(self):
self.assertRaises(lib_exc.SSHTimeout,
self.conn.validate_authentication)
- msg = 'Caller: %s. Timeout trying to ssh to server %s' % (
- 'TestRemoteClientWithServer:test_validate_debug_ssh_console',
- self.server)
+ msg = 'Executing command on 127.0.0.1 failed.'
self.assertIn(msg, self.log.output)
self.assertIn('Console output for', self.log.output)
@@ -190,9 +188,7 @@
self.assertRaises(lib_exc.SSHTimeout,
self.conn.exec_command, 'fake command')
self.assertIn('fake command', self.log.output)
- msg = 'Caller: %s. Timeout trying to ssh to server %s' % (
- 'TestRemoteClientWithServer:test_exec_command_debug_ssh_console',
- self.server)
+ msg = 'Executing command on 127.0.0.1 failed.'
self.assertIn(msg, self.log.output)
self.assertIn('Console output for', self.log.output)
@@ -204,9 +200,7 @@
def test_validate_debug_ssh_console(self):
self.assertRaises(lib_exc.SSHTimeout,
self.conn.validate_authentication)
- msg = 'Caller: %s. Timeout trying to ssh to server %s' % (
- 'TestRemoteClientWithBrokenServer:test_validate_debug_ssh_console',
- self.server)
+ msg = 'Executing command on 127.0.0.1 failed.'
self.assertIn(msg, self.log.output)
msg = 'Could not get console_log for server %s' % self.server['id']
self.assertIn(msg, self.log.output)
@@ -215,10 +209,7 @@
self.assertRaises(lib_exc.SSHTimeout,
self.conn.exec_command, 'fake command')
self.assertIn('fake command', self.log.output)
- caller = ":".join(['TestRemoteClientWithBrokenServer',
- 'test_exec_command_debug_ssh_console'])
- msg = 'Caller: %s. Timeout trying to ssh to server %s' % (
- caller, self.server)
+ msg = 'Executing command on 127.0.0.1 failed.'
self.assertIn(msg, self.log.output)
msg = 'Could not get console_log for server %s' % self.server['id']
self.assertIn(msg, self.log.output)
diff --git a/tempest/tests/lib/common/utils/linux/test_remote_client.py b/tempest/tests/lib/common/utils/linux/test_remote_client.py
index df23e63..c41f178 100644
--- a/tempest/tests/lib/common/utils/linux/test_remote_client.py
+++ b/tempest/tests/lib/common/utils/linux/test_remote_client.py
@@ -15,6 +15,8 @@
from unittest import mock
+import fixtures
+
from tempest.lib.common import ssh
from tempest.lib.common.utils.linux import remote_client
from tempest.lib import exceptions as lib_exc
@@ -29,6 +31,12 @@
class TestRemoteClient(base.TestCase):
+ def setUp(self):
+ super(TestRemoteClient, self).setUp()
+ self.log = self.useFixture(fixtures.FakeLogger(
+ name='tempest.lib.common.utils.linux.remote_client',
+ level='DEBUG'))
+
@mock.patch.object(ssh.Client, 'exec_command', return_value='success')
def test_exec_command(self, mock_ssh_exec_command):
client = remote_client.RemoteClient('192.168.1.10', 'username')
@@ -50,9 +58,8 @@
client = remote_client.RemoteClient('192.168.1.10', 'username',
server=server)
self.assertRaises(lib_exc.SSHTimeout, client.exec_command, 'ls')
- mock_debug.assert_called_with(
- 'Caller: %s. Timeout trying to ssh to server %s',
- 'TestRemoteClient:test_debug_ssh_without_console', server)
+ msg = 'Executing command on 192.168.1.10 failed.'
+ self.assertIn(msg, self.log.output)
@mock.patch.object(remote_client.LOG, 'debug')
@mock.patch.object(ssh.Client, 'exec_command')