summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--paramiko/ssh_exception.py7
-rw-r--r--tests/test_ssh_exception.py17
2 files changed, 21 insertions, 3 deletions
diff --git a/paramiko/ssh_exception.py b/paramiko/ssh_exception.py
index bdf97e24..fea3146a 100644
--- a/paramiko/ssh_exception.py
+++ b/paramiko/ssh_exception.py
@@ -164,10 +164,13 @@ class NoValidConnectionsError(socket.error):
:param dict errors:
The errors dict to store, as described by class docstring.
"""
- addrs = list(errors.keys())
+ addrs = sorted(errors.keys())
body = ', '.join([x[0] for x in addrs[:-1]])
tail = addrs[-1][0]
- msg = "Unable to connect to port {0} on {1} or {2}"
+ if body:
+ msg = "Unable to connect to port {0} on {1} or {2}"
+ else:
+ msg = "Unable to connect to port {0} on {2}"
super(NoValidConnectionsError, self).__init__(
None, # stand-in for errno
msg.format(addrs[0][1], body, tail)
diff --git a/tests/test_ssh_exception.py b/tests/test_ssh_exception.py
index 2d1f899f..9c109de1 100644
--- a/tests/test_ssh_exception.py
+++ b/tests/test_ssh_exception.py
@@ -8,8 +8,23 @@ class NoValidConnectionsErrorTest (unittest.TestCase):
def test_pickling(self):
# Regression test for https://github.com/paramiko/paramiko/issues/617
- exc = NoValidConnectionsError({'ab': ''})
+ exc = NoValidConnectionsError({('127.0.0.1', '22'): Exception()})
new_exc = pickle.loads(pickle.dumps(exc))
self.assertEqual(type(exc), type(new_exc))
self.assertEqual(str(exc), str(new_exc))
self.assertEqual(exc.args, new_exc.args)
+
+ def test_error_message_for_single_host(self):
+ exc = NoValidConnectionsError({('127.0.0.1', '22'): Exception()})
+ self.assertIn("Unable to connect to port 22 on 127.0.0.1", str(exc))
+
+ def test_error_message_for_two_hosts(self):
+ exc = NoValidConnectionsError({('127.0.0.1', '22'): Exception(),
+ ('::1', '22'): Exception()})
+ self.assertIn("Unable to connect to port 22 on 127.0.0.1 or ::1", str(exc))
+
+ def test_error_message_for_multiple_hosts(self):
+ exc = NoValidConnectionsError({('127.0.0.1', '22'): Exception(),
+ ('::1', '22'): Exception(),
+ ('10.0.0.42', '22'): Exception()})
+ self.assertIn("Unable to connect to port 22 on 10.0.0.42, 127.0.0.1 or ::1", str(exc))