Sophie

Sophie

distrib > Mageia > 3 > i586 > media > core-release-src > by-pkgid > 25bc3cabb9ee62ee79fbb240adb28191 > files > 1

python-glanceclient-0.5.1-2.mga3.src.rpm

From 8cee48b1ddf480d182bbc33ec684dcfd195b038c Mon Sep 17 00:00:00 2001
From: Andrew Laski <andrew.laski@rackspace.com>
Date: Wed, 12 Sep 2012 09:40:04 -0400
Subject: [PATCH] Make ConnectionRefused error more informative.

When the server refuses the connection the error message displayed now
lists the endpoint that refused the connection.

Fixes: bug 1043067
Change-Id: I62797106732bbb6eec8c99e491fd38850ad58ff8
---
 glanceclient/common/http.py |    3 +-
 tests/test_http.py          |   55 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 57 insertions(+), 1 deletions(-)
 create mode 100644 tests/test_http.py

diff --git a/glanceclient/common/http.py b/glanceclient/common/http.py
index d81ac9a..4349e86 100644
--- a/glanceclient/common/http.py
+++ b/glanceclient/common/http.py
@@ -140,7 +140,8 @@ class HTTPClient(object):
             message = "Error finding address for %(url)s: %(e)s" % locals()
             raise exc.InvalidEndpoint(message=message)
         except (socket.error, socket.timeout) as e:
-            message = "Error communicating with %(url)s: %(e)s" % locals()
+            endpoint = self.endpoint
+            message = "Error communicating with %(endpoint)s %(e)s" % locals()
             raise exc.CommunicationError(message=message)
 
         body_iter = ResponseBodyIterator(resp)
diff --git a/tests/test_http.py b/tests/test_http.py
new file mode 100644
index 0000000..c727c6a
--- /dev/null
+++ b/tests/test_http.py
@@ -0,0 +1,55 @@
+# Copyright 2012 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import httplib
+import socket
+import unittest
+
+import mox
+
+from glanceclient import exc
+from glanceclient.common import http
+
+
+class TestClient(unittest.TestCase):
+    def test_connection_refused(self):
+        """
+        Should receive a CommunicationError if connection refused.
+        And the error should list the host and port that refused the
+        connection
+        """
+        endpoint = 'http://example.com:9292'
+        client = http.HTTPClient(endpoint, token=u'abc123')
+        m = mox.Mox()
+        m.StubOutWithMock(httplib.HTTPConnection, 'request')
+        httplib.HTTPConnection.request(
+                mox.IgnoreArg(),
+                mox.IgnoreArg(),
+                headers=mox.IgnoreArg(),
+                ).AndRaise(socket.error())
+        m.ReplayAll()
+        try:
+            client.json_request('GET', '/v1/images/detail?limit=20')
+            #NOTE(alaski) We expect exc.CommunicationError to be raised
+            # so we should never reach this point.  try/except is used here
+            # rather than assertRaises() so that we can check the body of
+            # the exception.
+            self.fail('An exception should have bypassed this line.')
+        except exc.CommunicationError, comm_err:
+            fail_msg = ("Exception message '%s' should contain '%s'" %
+                                        (comm_err.message, endpoint))
+            self.assertTrue(endpoint in comm_err.message, fail_msg)
+        finally:
+            m.UnsetStubs()