summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDan Radez <dradez@redhat.com>2012-11-13 18:24:12 -0500
committerDan Radez <dradez@redhat.com>2012-11-13 18:34:22 -0500
commitcfb2205a965c610abafe39ced35584be42e22717 (patch)
tree63c794f895b0047729decb09de0131383c4aa1c4 /tests
parent116e1afd36585b72dcfef7ff8e9298eb2a24b169 (diff)
downloadpython-heatclient-cfb2205a965c610abafe39ced35584be42e22717.tar.gz
adding test coverage for common/http, improving the redirect handling
Diffstat (limited to 'tests')
-rw-r--r--tests/test_common_http.py229
1 files changed, 229 insertions, 0 deletions
diff --git a/tests/test_common_http.py b/tests/test_common_http.py
new file mode 100644
index 0000000..e32ce0e
--- /dev/null
+++ b/tests/test_common_http.py
@@ -0,0 +1,229 @@
+import StringIO
+import os
+import httplib2
+import httplib
+import sys
+
+import mox
+import unittest
+try:
+ import json
+except ImportError:
+ import simplejson as json
+from keystoneclient.v2_0 import client as ksclient
+
+from heatclient import exc
+from heatclient.common import http
+import fakes
+
+
+class HttpClientTest(unittest.TestCase):
+
+ # Patch os.environ to avoid required auth info.
+ def setUp(self):
+ self.m = mox.Mox()
+ self.m.StubOutClassWithMocks(http.httplib, 'HTTPConnection')
+ self.m.StubOutClassWithMocks(http.httplib, 'HTTPSConnection')
+
+ def tearDown(self):
+ self.m.UnsetStubs()
+ self.m.ResetAll()
+
+ def test_http_raw_request(self):
+ # Record a 200
+ mock_conn = http.httplib.HTTPConnection('example.com', 8004,
+ '', timeout=600.0)
+ mock_conn.request('GET', '/',
+ headers={'Content-Type': 'application/octet-stream',
+ 'User-Agent': 'python-heatclient'})
+ mock_conn.getresponse().AndReturn(fakes.FakeHTTPResponse(200, 'OK',
+ {'content-type': 'application/octet-stream'},
+ ''))
+ # Replay, create client, assert
+ self.m.ReplayAll()
+ client = http.HTTPClient('http://example.com:8004')
+ resp, body = client.raw_request('GET', '')
+ self.assertEqual(resp.status, 200)
+ self.assertEqual(''.join([x for x in body]), '')
+ self.m.VerifyAll()
+
+ def test_http_json_request(self):
+ # Record a 200
+ mock_conn = http.httplib.HTTPConnection('example.com', 8004,
+ '', timeout=600.0)
+ mock_conn.request('GET', '/',
+ headers={'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'User-Agent': 'python-heatclient'})
+ mock_conn.getresponse().AndReturn(fakes.FakeHTTPResponse(200, 'OK',
+ {'content-type': 'application/json'},
+ '{}'))
+ # Replay, create client, assert
+ self.m.ReplayAll()
+ client = http.HTTPClient('http://example.com:8004')
+ resp, body = client.json_request('GET', '')
+ self.assertEqual(resp.status, 200)
+ self.assertEqual(body, {})
+ self.m.VerifyAll()
+
+ def test_http_json_request_w_req_body(self):
+ # Record a 200
+ mock_conn = http.httplib.HTTPConnection('example.com', 8004,
+ '', timeout=600.0)
+ mock_conn.request('GET', '/', body='"test-body"',
+ headers={'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'User-Agent': 'python-heatclient'})
+ mock_conn.getresponse().AndReturn(fakes.FakeHTTPResponse(200, 'OK',
+ {'content-type': 'application/json'},
+ '{}'))
+ # Replay, create client, assert
+ self.m.ReplayAll()
+ client = http.HTTPClient('http://example.com:8004')
+ resp, body = client.json_request('GET', '', body='test-body')
+ self.assertEqual(resp.status, 200)
+ self.assertEqual(body, {})
+ self.m.VerifyAll()
+
+ def test_http_json_request_non_json_resp_cont_type(self):
+ # Record a 200
+ mock_conn = http.httplib.HTTPConnection('example.com', 8004,
+ '', timeout=600.0)
+ mock_conn.request('GET', '/', body='"test-body"',
+ headers={'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'User-Agent': 'python-heatclient'})
+ mock_conn.getresponse().AndReturn(fakes.FakeHTTPResponse(200, 'OK',
+ {'content-type': 'not/json'},
+ '{}'))
+ # Replay, create client, assert
+ self.m.ReplayAll()
+ client = http.HTTPClient('http://example.com:8004')
+ resp, body = client.json_request('GET', '', body='test-body')
+ self.assertEqual(resp.status, 200)
+ self.assertEqual(body, None)
+ self.m.VerifyAll()
+
+ def test_http_json_request_invalid_json(self):
+ # Record a 200
+ mock_conn = http.httplib.HTTPConnection('example.com', 8004,
+ '', timeout=600.0)
+ mock_conn.request('GET', '/',
+ headers={'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'User-Agent': 'python-heatclient'})
+ mock_conn.getresponse().AndReturn(fakes.FakeHTTPResponse(200, 'OK',
+ {'content-type': 'application/json'},
+ 'invalid-json'))
+ # Replay, create client, assert
+ self.m.ReplayAll()
+ client = http.HTTPClient('http://example.com:8004')
+ resp, body = client.json_request('GET', '')
+ self.assertEqual(resp.status, 200)
+ self.assertEqual(body, 'invalid-json')
+ self.m.VerifyAll()
+
+ def test_http_json_request_redirect(self):
+ # Record the 302
+ mock_conn = http.httplib.HTTPConnection('example.com', 8004,
+ '', timeout=600.0)
+ mock_conn.request('GET', '/',
+ headers={'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'User-Agent': 'python-heatclient'})
+ mock_conn.getresponse().AndReturn(fakes.FakeHTTPResponse(302, 'Found',
+ {'location': 'http://example.com:8004'
+ }, ''))
+ # Record the following 200
+ mock_conn = http.httplib.HTTPConnection('example.com', 8004,
+ '', timeout=600.0)
+ mock_conn.request('GET', '/',
+ headers={'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'User-Agent': 'python-heatclient'})
+ mock_conn.getresponse().AndReturn(fakes.FakeHTTPResponse(200, 'OK',
+ {'content-type': 'application/json'},
+ '{}'))
+ # Replay, create client, assert
+ self.m.ReplayAll()
+ client = http.HTTPClient('http://example.com:8004')
+ resp, body = client.json_request('GET', '')
+ self.assertEqual(resp.status, 200)
+ self.assertEqual(body, {})
+ self.m.VerifyAll()
+
+ def test_http_json_request_prohibited_redirect(self):
+ # Record the 302
+ mock_conn = http.httplib.HTTPConnection('example.com', 8004,
+ '', timeout=600.0)
+ mock_conn.request('GET', '/',
+ headers={'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'User-Agent': 'python-heatclient'})
+ mock_conn.getresponse().AndReturn(fakes.FakeHTTPResponse(302, 'Found',
+ {'location': 'http://prohibited.example.com:8004'
+ }, ''))
+ # Replay, create client, assert
+ self.m.ReplayAll()
+ client = http.HTTPClient('http://example.com:8004')
+ self.assertRaises(exc.InvalidEndpoint, client.json_request, 'GET', '')
+ self.m.VerifyAll()
+
+ def test_http_404_json_request(self):
+ # Record a 404
+ mock_conn = http.httplib.HTTPConnection('example.com', 8004,
+ '', timeout=600.0)
+ mock_conn.request('GET', '/',
+ headers={'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'User-Agent': 'python-heatclient'})
+ mock_conn.getresponse().AndReturn(fakes.FakeHTTPResponse(404, 'OK',
+ {'content-type': 'application/json'},
+ '{}'))
+ # Replay, create client, assert
+ self.m.ReplayAll()
+ client = http.HTTPClient('http://example.com:8004')
+ self.assertRaises(exc.HTTPNotFound, client.json_request, 'GET', '')
+ self.m.VerifyAll()
+
+ def test_http_300_json_request(self):
+ # Record a 300
+ mock_conn = http.httplib.HTTPConnection('example.com', 8004,
+ '', timeout=600.0)
+ mock_conn.request('GET', '/',
+ headers={'Content-Type': 'application/json',
+ 'Accept': 'application/json',
+ 'User-Agent': 'python-heatclient'})
+ mock_conn.getresponse().AndReturn(fakes.FakeHTTPResponse(300, 'OK',
+ {'content-type': 'application/json'},
+ '{}'))
+ # Replay, create client, assert
+ self.m.ReplayAll()
+ client = http.HTTPClient('http://example.com:8004')
+ self.assertRaises(exc.HTTPMultipleChoices, client.json_request, 'GET', '')
+ self.m.VerifyAll()
+
+ #def test_https_json_request(self):
+ # # Record a 200
+ # mock_conn = http.httplib.HTTPSConnection('example.com', 8004,
+ # '', timeout=600.0)
+ # mock_conn.request('GET', '/',
+ # headers={'Content-Type': 'application/json',
+ # 'Accept': 'application/json',
+ # 'User-Agent': 'python-heatclient'})
+ # mock_conn.getresponse().AndReturn(fakes.FakeHTTPResponse(200, 'OK',
+ # {'content-type': 'application/json'},
+ # '{}'))
+ # # Replay, create client, assert
+ # self.m.ReplayAll()
+ # client = http.HTTPClient('https://example.com:8004', ca_file='dummy',
+ # cert_file='dummy',
+ # key_file='dummy')
+ # resp, body = client.json_request('GET', '')
+ # self.assertEqual(resp.status, 200)
+ # self.assertEqual(body, {})
+ # self.m.VerifyAll()
+
+ def test_fake_json_request(self):
+ self.assertRaises(exc.InvalidEndpoint, http.HTTPClient, 'fake://example.com:8004')
+