summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ceilometerclient/common/http.py8
-rw-r--r--tests/test_http.py50
-rw-r--r--tests/utils.py3
-rw-r--r--tools/test-requires1
4 files changed, 58 insertions, 4 deletions
diff --git a/ceilometerclient/common/http.py b/ceilometerclient/common/http.py
index 2c61536..ea4d64f 100644
--- a/ceilometerclient/common/http.py
+++ b/ceilometerclient/common/http.py
@@ -118,6 +118,11 @@ class HTTPClient(object):
dump.extend([body, ''])
LOG.debug('\n'.join(dump))
+ def _make_connection_url(self, url):
+ (_class, _args, _kwargs) = self.connection_params
+ base_url = _args[2]
+ return '%s/%s' % (base_url.rstrip('/'), url.lstrip('/'))
+
def _http_request(self, url, method, **kwargs):
""" Send an http request with the specified characteristics.
@@ -134,8 +139,7 @@ class HTTPClient(object):
conn = self.get_connection()
try:
- conn_params = self.connection_params[1][2]
- conn_url = os.path.normpath('%s/%s' % (conn_params, url))
+ conn_url = self._make_connection_url(url)
conn.request(method, conn_url, **kwargs)
resp = conn.getresponse()
except socket.gaierror as e:
diff --git a/tests/test_http.py b/tests/test_http.py
new file mode 100644
index 0000000..2445810
--- /dev/null
+++ b/tests/test_http.py
@@ -0,0 +1,50 @@
+# 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 unittest
+
+from tests import utils
+
+from ceilometerclient.common import http
+
+
+fixtures = {}
+
+
+class HttpClientTest(unittest.TestCase):
+
+ def test_url_generation_trailing_slash_in_base(self):
+ client = http.HTTPClient('http://localhost/')
+ url = client._make_connection_url('/v1/resources')
+ print client.connection_params
+ self.assertEqual(url, '/v1/resources')
+
+ def test_url_generation_without_trailing_slash_in_base(self):
+ client = http.HTTPClient('http://localhost')
+ url = client._make_connection_url('/v1/resources')
+ print client.connection_params
+ self.assertEqual(url, '/v1/resources')
+
+ def test_url_generation_prefix_slash_in_path(self):
+ client = http.HTTPClient('http://localhost/')
+ url = client._make_connection_url('/v1/resources')
+ print client.connection_params
+ self.assertEqual(url, '/v1/resources')
+
+ def test_url_generation_without_prefix_slash_in_path(self):
+ client = http.HTTPClient('http://localhost')
+ url = client._make_connection_url('v1/resources')
+ print client.connection_params
+ self.assertEqual(url, '/v1/resources')
diff --git a/tests/utils.py b/tests/utils.py
index 2ec4a60..3987e2f 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -40,7 +40,7 @@ class FakeAPI(object):
class FakeResponse(object):
- def __init__(self, headers, body=None):
+ def __init__(self, headers, body=None, version=None):
"""
:param headers: dict representing HTTP response headers
:param body: file-like object
@@ -56,3 +56,4 @@ class FakeResponse(object):
def read(self, amt):
return self.body.read(amt)
+
diff --git a/tools/test-requires b/tools/test-requires
index c39eaf1..9f9f13a 100644
--- a/tools/test-requires
+++ b/tools/test-requires
@@ -1,5 +1,4 @@
distribute>=0.6.24
-
mox
nose
nose-exclude