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):
|