diff options
-rw-r--r-- | paramiko/ssh_exception.py | 7 | ||||
-rw-r--r-- | tests/test_ssh_exception.py | 17 |
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)) |