Revision b35e8daf kamaki/clients/connection/test.py
b/kamaki/clients/connection/test.py | ||
---|---|---|
32 | 32 |
# or implied, of GRNET S.A. |
33 | 33 |
|
34 | 34 |
from unittest import TestCase, TestSuite, makeSuite, TextTestRunner |
35 |
from mock import Mock, patch |
|
35 |
from mock import Mock, patch, call
|
|
36 | 36 |
from random import randrange |
37 |
from urllib2 import quote |
|
37 | 38 |
|
38 | 39 |
from kamaki.clients import connection |
39 | 40 |
from kamaki.clients.connection import errors, kamakicon |
40 | 41 |
|
41 | 42 |
|
43 |
def _encode(v): |
|
44 |
if v and isinstance(v, unicode): |
|
45 |
return quote(v.encode('utf-8')) |
|
46 |
return v |
|
47 |
|
|
48 |
|
|
42 | 49 |
class KamakiConnection(TestCase): |
43 | 50 |
v_samples = {'title': 'value', 5: 'value'} |
44 | 51 |
n_samples = {'title': None, 5: None} |
... | ... | |
47 | 54 |
def setUp(self): |
48 | 55 |
from kamaki.clients.connection import KamakiConnection as HTTPC |
49 | 56 |
self.conn = HTTPC() |
57 |
self.conn.reset_headers() |
|
58 |
self.conn.reset_params() |
|
50 | 59 |
|
51 | 60 |
def test_poolsize(self): |
52 | 61 |
|
... | ... | |
154 | 163 |
|
155 | 164 |
def setUp(self): |
156 | 165 |
self.conn = kamakicon.KamakiHTTPConnection() |
166 |
self.conn.reset_params() |
|
167 |
self.conn.reset_headers() |
|
157 | 168 |
|
158 | 169 |
def test__retrieve_connection_info(self): |
159 | 170 |
async_params = dict(param1='val1', param2=None, param3=42) |
... | ... | |
188 | 199 |
method='GET', |
189 | 200 |
async_headers=dict(), |
190 | 201 |
async_params=dict()) |
202 |
utf_test = u'\u03a6\u03bf\u03cd\u03c4\u03c3\u03bf\u03c2' |
|
203 |
utf_dict = dict(utf=utf_test) |
|
204 |
ascii_dict = dict(ascii1='myAscii', ascii2=None) |
|
205 |
kwargs0 = dict( |
|
206 |
data='', |
|
207 |
method='get', |
|
208 |
async_headers=utf_dict, |
|
209 |
async_params=ascii_dict) |
|
210 |
|
|
211 |
def get_expected(): |
|
212 |
expected = [] |
|
213 |
for k, v in kwargs0['async_params'].items(): |
|
214 |
v = _encode(v) |
|
215 |
expected.append(('%s=%s' % (k, v)) if v else ('%s' % k)) |
|
216 |
return '&'.join(expected) |
|
191 | 217 |
|
192 | 218 |
KCError = errors.KamakiConnectionError |
193 | 219 |
fakecon = HTTPConnection('X', 'Y') |
194 | 220 |
|
195 | 221 |
with patch.object(http, 'get_http_connection', return_value=fakecon): |
196 |
with patch.object(HTTPConnection, 'request', return_value=None):
|
|
222 |
with patch.object(HTTPConnection, 'request') as request:
|
|
197 | 223 |
r = pr(**kwargs) |
198 | 224 |
self.assertTrue(isinstance(r, kamakicon.KamakiHTTPResponse)) |
225 |
self.assertEquals( |
|
226 |
request.mock_calls[-1], |
|
227 |
call(body='', headers={}, url='/', method='GET')) |
|
228 |
|
|
229 |
pr(**kwargs0) |
|
230 |
|
|
231 |
exp_headers = dict(kwargs0['async_headers']) |
|
232 |
exp_headers['utf'] = _encode(exp_headers['utf']) |
|
233 |
|
|
234 |
self.assertEquals( |
|
235 |
request.mock_calls[-1], |
|
236 |
call( |
|
237 |
body=kwargs0['data'], |
|
238 |
headers=exp_headers, |
|
239 |
url='/?%s' % get_expected(), |
|
240 |
method=kwargs0['method'].upper())) |
|
241 |
|
|
242 |
self.conn = kamakicon.KamakiHTTPConnection() |
|
243 |
(kwargs0['async_params'], kwargs0['async_headers']) = ( |
|
244 |
kwargs0['async_headers'], kwargs0['async_params']) |
|
245 |
kwargs0['async_headers']['ascii2'] = 'None' |
|
246 |
self.conn.perform_request(**kwargs0) |
|
247 |
self.assertEquals( |
|
248 |
request.mock_calls[-1], |
|
249 |
call( |
|
250 |
body=kwargs0['data'], |
|
251 |
headers=kwargs0['async_headers'], |
|
252 |
url='/?%s' % get_expected(), |
|
253 |
method=kwargs0['method'].upper())) |
|
199 | 254 |
|
200 | 255 |
err = IOError('IO Error') |
201 | 256 |
with patch.object(HTTPConnection, 'request', side_effect=err): |
Also available in: Unified diff