test_adapter.py 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707
  1. # Licensed under the Apache License, Version 2.0 (the "License"); you may
  2. # not use this file except in compliance with the License. You may obtain
  3. # a copy of the License at
  4. #
  5. # https://www.apache.org/licenses/LICENSE-2.0
  6. #
  7. # Unless required by applicable law or agreed to in writing, software
  8. # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  9. # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  10. # License for the specific language governing permissions and limitations
  11. # under the License.
  12. import json
  13. import re
  14. import purl
  15. import requests
  16. import six
  17. from six.moves.urllib import parse as urlparse
  18. import requests_mock
  19. from . import base
  20. class MyExc(Exception):
  21. pass
  22. class SessionAdapterTests(base.TestCase):
  23. PREFIX = "mock"
  24. def setUp(self):
  25. super(SessionAdapterTests, self).setUp()
  26. self.adapter = requests_mock.Adapter()
  27. self.session = requests.Session()
  28. self.session.mount(self.PREFIX, self.adapter)
  29. self.url = '%s://example.com/test' % self.PREFIX
  30. self.headers = {'header_a': 'A', 'header_b': 'B'}
  31. def assertHeaders(self, resp):
  32. for k, v in six.iteritems(self.headers):
  33. self.assertEqual(v, resp.headers[k])
  34. def assertLastRequest(self, method='GET', body=None):
  35. self.assertEqual(self.url, self.adapter.last_request.url)
  36. self.assertEqual(method, self.adapter.last_request.method)
  37. self.assertEqual(body, self.adapter.last_request.body)
  38. url_parts = urlparse.urlparse(self.url)
  39. qs = urlparse.parse_qs(url_parts.query)
  40. self.assertEqual(url_parts.scheme, self.adapter.last_request.scheme)
  41. self.assertEqual(url_parts.netloc, self.adapter.last_request.netloc)
  42. self.assertEqual(url_parts.path, self.adapter.last_request.path)
  43. self.assertEqual(url_parts.query, self.adapter.last_request.query)
  44. self.assertEqual(url_parts.query, self.adapter.last_request.query)
  45. self.assertEqual(qs, self.adapter.last_request.qs)
  46. def test_content(self):
  47. data = six.b('testdata')
  48. self.adapter.register_uri('GET',
  49. self.url,
  50. content=data,
  51. headers=self.headers)
  52. resp = self.session.get(self.url)
  53. self.assertEqual(data, resp.content)
  54. self.assertHeaders(resp)
  55. self.assertLastRequest()
  56. def test_content_callback(self):
  57. status_code = 401
  58. data = six.b('testdata')
  59. def _content_cb(request, context):
  60. context.status_code = status_code
  61. context.headers.update(self.headers)
  62. return data
  63. self.adapter.register_uri('GET',
  64. self.url,
  65. content=_content_cb)
  66. resp = self.session.get(self.url)
  67. self.assertEqual(status_code, resp.status_code)
  68. self.assertEqual(data, resp.content)
  69. self.assertHeaders(resp)
  70. self.assertLastRequest()
  71. def test_text(self):
  72. data = 'testdata'
  73. self.adapter.register_uri('GET',
  74. self.url,
  75. text=data,
  76. headers=self.headers)
  77. resp = self.session.get(self.url)
  78. self.assertEqual(six.b(data), resp.content)
  79. self.assertEqual(six.u(data), resp.text)
  80. self.assertEqual('utf-8', resp.encoding)
  81. self.assertHeaders(resp)
  82. self.assertLastRequest()
  83. def test_text_callback(self):
  84. status_code = 401
  85. data = 'testdata'
  86. def _text_cb(request, context):
  87. context.status_code = status_code
  88. context.headers.update(self.headers)
  89. return six.u(data)
  90. self.adapter.register_uri('GET', self.url, text=_text_cb)
  91. resp = self.session.get(self.url)
  92. self.assertEqual(status_code, resp.status_code)
  93. self.assertEqual(six.u(data), resp.text)
  94. self.assertEqual(six.b(data), resp.content)
  95. self.assertEqual('utf-8', resp.encoding)
  96. self.assertHeaders(resp)
  97. self.assertLastRequest()
  98. def test_json(self):
  99. json_data = {'hello': 'world'}
  100. self.adapter.register_uri('GET',
  101. self.url,
  102. json=json_data,
  103. headers=self.headers)
  104. resp = self.session.get(self.url)
  105. self.assertEqual(six.b('{"hello": "world"}'), resp.content)
  106. self.assertEqual(six.u('{"hello": "world"}'), resp.text)
  107. self.assertEqual(json_data, resp.json())
  108. self.assertEqual('utf-8', resp.encoding)
  109. self.assertHeaders(resp)
  110. self.assertLastRequest()
  111. def test_json_callback(self):
  112. status_code = 401
  113. json_data = {'hello': 'world'}
  114. data = '{"hello": "world"}'
  115. def _json_cb(request, context):
  116. context.status_code = status_code
  117. context.headers.update(self.headers)
  118. return json_data
  119. self.adapter.register_uri('GET', self.url, json=_json_cb)
  120. resp = self.session.get(self.url)
  121. self.assertEqual(status_code, resp.status_code)
  122. self.assertEqual(json_data, resp.json())
  123. self.assertEqual(six.u(data), resp.text)
  124. self.assertEqual(six.b(data), resp.content)
  125. self.assertEqual('utf-8', resp.encoding)
  126. self.assertHeaders(resp)
  127. self.assertLastRequest()
  128. def test_no_body(self):
  129. self.adapter.register_uri('GET', self.url)
  130. resp = self.session.get(self.url)
  131. self.assertEqual(six.b(''), resp.content)
  132. self.assertEqual(200, resp.status_code)
  133. def test_multiple_body_elements(self):
  134. self.assertRaises(RuntimeError,
  135. self.adapter.register_uri,
  136. self.url,
  137. 'GET',
  138. content=six.b('b'),
  139. text=six.u('u'))
  140. def test_multiple_responses(self):
  141. inp = [{'status_code': 400, 'text': 'abcd'},
  142. {'status_code': 300, 'text': 'defg'},
  143. {'status_code': 200, 'text': 'hijk'}]
  144. self.adapter.register_uri('GET', self.url, inp)
  145. out = [self.session.get(self.url) for i in range(0, len(inp))]
  146. for i, o in zip(inp, out):
  147. for k, v in six.iteritems(i):
  148. self.assertEqual(v, getattr(o, k))
  149. last = self.session.get(self.url)
  150. for k, v in six.iteritems(inp[-1]):
  151. self.assertEqual(v, getattr(last, k))
  152. def test_callback_optional_status(self):
  153. headers = {'a': 'b'}
  154. def _test_cb(request, context):
  155. context.headers.update(headers)
  156. return ''
  157. self.adapter.register_uri('GET',
  158. self.url,
  159. text=_test_cb,
  160. status_code=300)
  161. resp = self.session.get(self.url)
  162. self.assertEqual(300, resp.status_code)
  163. for k, v in six.iteritems(headers):
  164. self.assertEqual(v, resp.headers[k])
  165. def test_callback_optional_headers(self):
  166. headers = {'a': 'b'}
  167. def _test_cb(request, context):
  168. context.status_code = 300
  169. return ''
  170. self.adapter.register_uri('GET',
  171. self.url,
  172. text=_test_cb,
  173. headers=headers)
  174. resp = self.session.get(self.url)
  175. self.assertEqual(300, resp.status_code)
  176. for k, v in six.iteritems(headers):
  177. self.assertEqual(v, resp.headers[k])
  178. def test_latest_register_overrides(self):
  179. self.adapter.register_uri('GET', self.url, text='abc')
  180. self.adapter.register_uri('GET', self.url, text='def')
  181. resp = self.session.get(self.url)
  182. self.assertEqual('def', resp.text)
  183. def test_no_last_request(self):
  184. self.assertIsNone(self.adapter.last_request)
  185. self.assertEqual(0, len(self.adapter.request_history))
  186. def test_dont_pass_list_and_kwargs(self):
  187. self.assertRaises(RuntimeError,
  188. self.adapter.register_uri,
  189. 'GET',
  190. self.url,
  191. [{'text': 'a'}],
  192. headers={'a': 'b'})
  193. def test_empty_string_return(self):
  194. # '' evaluates as False, so make sure an empty string is not ignored.
  195. self.adapter.register_uri('GET', self.url, text='')
  196. resp = self.session.get(self.url)
  197. self.assertEqual('', resp.text)
  198. def test_dont_pass_multiple_bodies(self):
  199. self.assertRaises(RuntimeError,
  200. self.adapter.register_uri,
  201. 'GET',
  202. self.url,
  203. json={'abc': 'def'},
  204. text='ghi')
  205. def test_dont_pass_unexpected_kwargs(self):
  206. self.assertRaises(TypeError,
  207. self.adapter.register_uri,
  208. 'GET',
  209. self.url,
  210. unknown='argument')
  211. def test_dont_pass_unicode_as_content(self):
  212. self.assertRaises(TypeError,
  213. self.adapter.register_uri,
  214. 'GET',
  215. self.url,
  216. content=six.u('unicode'))
  217. def test_dont_pass_empty_string_as_content(self):
  218. self.assertRaises(TypeError,
  219. self.adapter.register_uri,
  220. 'GET',
  221. self.url,
  222. content=six.u(''))
  223. def test_dont_pass_bytes_as_text(self):
  224. if six.PY2:
  225. self.skipTest('Cannot enforce byte behaviour in PY2')
  226. self.assertRaises(TypeError,
  227. self.adapter.register_uri,
  228. 'GET',
  229. self.url,
  230. text=six.b('bytes'))
  231. def test_dont_pass_empty_string_as_text(self):
  232. if six.PY2:
  233. self.skipTest('Cannot enforce byte behaviour in PY2')
  234. self.assertRaises(TypeError,
  235. self.adapter.register_uri,
  236. 'GET',
  237. self.url,
  238. text=six.b(''))
  239. def test_dont_pass_non_str_as_content(self):
  240. self.assertRaises(TypeError,
  241. self.adapter.register_uri,
  242. 'GET',
  243. self.url,
  244. content=5)
  245. def test_dont_pass_non_str_as_text(self):
  246. self.assertRaises(TypeError,
  247. self.adapter.register_uri,
  248. 'GET',
  249. self.url,
  250. text=5)
  251. def test_with_any_method(self):
  252. self.adapter.register_uri(requests_mock.ANY, self.url, text='resp')
  253. for m in ('GET', 'HEAD', 'POST', 'UNKNOWN'):
  254. resp = self.session.request(m, self.url)
  255. self.assertEqual('resp', resp.text)
  256. def test_with_any_url(self):
  257. self.adapter.register_uri('GET', requests_mock.ANY, text='resp')
  258. for u in ('mock://a', 'mock://b', 'mock://c'):
  259. resp = self.session.get(u)
  260. self.assertEqual('resp', resp.text)
  261. def test_with_regexp(self):
  262. self.adapter.register_uri('GET', re.compile('tester.com'), text='resp')
  263. for u in ('mock://www.tester.com/a', 'mock://abc.tester.com'):
  264. resp = self.session.get(u)
  265. self.assertEqual('resp', resp.text)
  266. def test_with_purl(self):
  267. self.adapter.register_uri('GET',
  268. purl.URL('mock://www.tester.com/a'),
  269. text='resp')
  270. resp = self.session.get('mock://www.tester.com/a')
  271. self.assertEqual('resp', resp.text)
  272. def test_requests_in_history_on_no_match(self):
  273. self.assertRaises(requests_mock.NoMockAddress,
  274. self.session.get,
  275. self.url)
  276. self.assertEqual(self.url, self.adapter.last_request.url)
  277. def test_requests_in_history_on_exception(self):
  278. def _test_cb(request, ctx):
  279. raise MyExc()
  280. self.adapter.register_uri('GET', self.url, text=_test_cb)
  281. self.assertRaises(MyExc,
  282. self.session.get,
  283. self.url)
  284. self.assertEqual(self.url, self.adapter.last_request.url)
  285. def test_not_called_and_called_count(self):
  286. m = self.adapter.register_uri('GET', self.url, text='resp')
  287. self.assertEqual(0, m.call_count)
  288. self.assertFalse(m.called)
  289. self.assertFalse(m.called_once)
  290. self.assertEqual(0, self.adapter.call_count)
  291. self.assertFalse(self.adapter.called)
  292. self.assertFalse(m.called_once)
  293. def test_called_and_called_count(self):
  294. m = self.adapter.register_uri('GET', self.url, text='resp')
  295. resps = [self.session.get(self.url) for i in range(0, 3)]
  296. for r in resps:
  297. self.assertEqual('resp', r.text)
  298. self.assertEqual(200, r.status_code)
  299. self.assertEqual(len(resps), m.call_count)
  300. self.assertTrue(m.called)
  301. self.assertFalse(m.called_once)
  302. self.assertEqual(len(resps), self.adapter.call_count)
  303. self.assertTrue(self.adapter.called)
  304. self.assertFalse(m.called_once)
  305. def test_reset_reverts_call_count(self):
  306. # Create matchers and add calls to history
  307. call_count = 3
  308. matcher_count = 3
  309. for i in range(matcher_count):
  310. url = self.url + str(i)
  311. self.adapter.register_uri('GET', url, text='resp')
  312. for _ in range(call_count):
  313. self.session.get(url)
  314. # Verify call counts on adapter and matchers
  315. self.assertEqual(self.adapter.call_count, matcher_count * call_count)
  316. for matcher in self.adapter._matchers:
  317. self.assertEqual(matcher.call_count, call_count)
  318. self.adapter.reset()
  319. # Verify call counts are 0 after reset
  320. self.assertEqual(self.adapter.call_count, 0)
  321. for matcher in self.adapter._matchers:
  322. self.assertEqual(matcher.call_count, 0)
  323. def test_adapter_picks_correct_adapter(self):
  324. good = '%s://test3.url/' % self.PREFIX
  325. self.adapter.register_uri('GET',
  326. '%s://test1.url' % self.PREFIX,
  327. text='bad')
  328. self.adapter.register_uri('GET',
  329. '%s://test2.url' % self.PREFIX,
  330. text='bad')
  331. self.adapter.register_uri('GET', good, text='good')
  332. self.adapter.register_uri('GET',
  333. '%s://test4.url' % self.PREFIX,
  334. text='bad')
  335. resp = self.session.get(good)
  336. self.assertEqual('good', resp.text)
  337. def test_adapter_is_connection(self):
  338. url = '%s://test.url' % self.PREFIX
  339. text = 'text'
  340. self.adapter.register_uri('GET', url, text=text)
  341. resp = self.session.get(url)
  342. self.assertEqual(text, resp.text)
  343. self.assertIs(self.adapter, resp.connection)
  344. def test_send_to_connection(self):
  345. url1 = '%s://test1.url/' % self.PREFIX
  346. url2 = '%s://test2.url/' % self.PREFIX
  347. text1 = 'text1'
  348. text2 = 'text2'
  349. self.adapter.register_uri('GET', url1, text=text1)
  350. self.adapter.register_uri('GET', url2, text=text2)
  351. req = requests.Request(method='GET', url=url2).prepare()
  352. resp1 = self.session.get(url1)
  353. self.assertEqual(text1, resp1.text)
  354. resp2 = resp1.connection.send(req)
  355. self.assertEqual(text2, resp2.text)
  356. def test_request_json_with_str_data(self):
  357. dict_req = {'hello': 'world'}
  358. dict_resp = {'goodbye': 'world'}
  359. m = self.adapter.register_uri('POST', self.url, json=dict_resp)
  360. data = json.dumps(dict_req)
  361. resp = self.session.post(self.url, data=data)
  362. self.assertIs(data, m.last_request.body)
  363. self.assertEqual(dict_resp, resp.json())
  364. self.assertEqual(dict_req, m.last_request.json())
  365. def test_request_json_with_bytes_data(self):
  366. dict_req = {'hello': 'world'}
  367. dict_resp = {'goodbye': 'world'}
  368. m = self.adapter.register_uri('POST', self.url, json=dict_resp)
  369. data = json.dumps(dict_req).encode('utf-8')
  370. resp = self.session.post(self.url, data=data)
  371. self.assertIs(data, m.last_request.body)
  372. self.assertEqual(dict_resp, resp.json())
  373. self.assertEqual(dict_req, m.last_request.json())
  374. def test_request_json_with_cb(self):
  375. dict_req = {'hello': 'world'}
  376. dict_resp = {'goodbye': 'world'}
  377. data = json.dumps(dict_req)
  378. def _cb(req, context):
  379. self.assertEqual(dict_req, req.json())
  380. return dict_resp
  381. m = self.adapter.register_uri('POST', self.url, json=_cb)
  382. resp = self.session.post(self.url, data=data)
  383. self.assertEqual(1, m.call_count)
  384. self.assertTrue(m.called_once)
  385. self.assertEqual(dict_resp, resp.json())
  386. def test_raises_exception(self):
  387. self.adapter.register_uri('GET', self.url, exc=MyExc)
  388. self.assertRaises(MyExc,
  389. self.session.get,
  390. self.url)
  391. self.assertTrue(self.adapter.called_once)
  392. self.assertEqual(self.url, self.adapter.last_request.url)
  393. def test_raises_exception_with_body_args_fails(self):
  394. self.assertRaises(TypeError,
  395. self.adapter.register_uri,
  396. 'GET',
  397. self.url,
  398. exc=MyExc,
  399. text='fail')
  400. def test_sets_request_matcher_in_history(self):
  401. url1 = '%s://test1.url/' % self.PREFIX
  402. url2 = '%s://test2.url/' % self.PREFIX
  403. text1 = 'text1'
  404. text2 = 'text2'
  405. m1 = self.adapter.register_uri('GET', url1, text=text1)
  406. m2 = self.adapter.register_uri('GET', url2, text=text2)
  407. resp1 = self.session.get(url1)
  408. resp2 = self.session.get(url2)
  409. self.assertEqual(text1, resp1.text)
  410. self.assertEqual(text2, resp2.text)
  411. self.assertEqual(2, self.adapter.call_count)
  412. self.assertFalse(self.adapter.called_once)
  413. self.assertEqual(url1, self.adapter.request_history[0].url)
  414. self.assertEqual(url2, self.adapter.request_history[1].url)
  415. self.assertIs(m1, self.adapter.request_history[0].matcher)
  416. self.assertIs(m2, self.adapter.request_history[1].matcher)
  417. def test_sets_request_matcher_on_exception(self):
  418. m = self.adapter.register_uri('GET', self.url, exc=MyExc)
  419. self.assertRaises(MyExc,
  420. self.session.get,
  421. self.url)
  422. self.assertEqual(self.url, self.adapter.last_request.url)
  423. self.assertIs(m, self.adapter.last_request.matcher)
  424. def test_cookies_from_header(self):
  425. headers = {'Set-Cookie': 'fig=newton; Path=/test; domain=.example.com'}
  426. self.adapter.register_uri('GET',
  427. self.url,
  428. text='text',
  429. headers=headers)
  430. resp = self.session.get(self.url)
  431. self.assertEqual('newton', resp.cookies['fig'])
  432. self.assertEqual(['/test'], resp.cookies.list_paths())
  433. self.assertEqual(['.example.com'], resp.cookies.list_domains())
  434. def test_cookies_from_dict(self):
  435. # This is a syntax we get from requests. I'm not sure i like it.
  436. self.adapter.register_uri('GET',
  437. self.url,
  438. text='text',
  439. cookies={'fig': 'newton', 'sugar': 'apple'})
  440. resp = self.session.get(self.url)
  441. self.assertEqual('newton', resp.cookies['fig'])
  442. self.assertEqual('apple', resp.cookies['sugar'])
  443. def test_cookies_with_jar(self):
  444. jar = requests_mock.CookieJar()
  445. jar.set('fig', 'newton', path='/foo', domain='.example.com')
  446. jar.set('sugar', 'apple', path='/bar', domain='.example.com')
  447. self.adapter.register_uri('GET', self.url, text='text', cookies=jar)
  448. resp = self.session.get(self.url)
  449. self.assertEqual('newton', resp.cookies['fig'])
  450. self.assertEqual('apple', resp.cookies['sugar'])
  451. self.assertEqual({'/foo', '/bar'}, set(resp.cookies.list_paths()))
  452. self.assertEqual(['.example.com'], resp.cookies.list_domains())
  453. def test_cookies_header_with_cb(self):
  454. def _cb(request, context):
  455. val = 'fig=newton; Path=/test; domain=.example.com'
  456. context.headers['Set-Cookie'] = val
  457. return 'text'
  458. self.adapter.register_uri('GET', self.url, text=_cb)
  459. resp = self.session.get(self.url)
  460. self.assertEqual('newton', resp.cookies['fig'])
  461. self.assertEqual(['/test'], resp.cookies.list_paths())
  462. self.assertEqual(['.example.com'], resp.cookies.list_domains())
  463. def test_cookies_from_dict_with_cb(self):
  464. def _cb(request, context):
  465. # converted into a jar by now
  466. context.cookies.set('sugar', 'apple', path='/test')
  467. return 'text'
  468. self.adapter.register_uri('GET',
  469. self.url,
  470. text=_cb,
  471. cookies={'fig': 'newton'})
  472. resp = self.session.get(self.url)
  473. self.assertEqual('newton', resp.cookies['fig'])
  474. self.assertEqual('apple', resp.cookies['sugar'])
  475. self.assertEqual(['/', '/test'], resp.cookies.list_paths())
  476. def test_cookies_with_jar_cb(self):
  477. def _cb(request, context):
  478. context.cookies.set('sugar',
  479. 'apple',
  480. path='/bar',
  481. domain='.example.com')
  482. return 'text'
  483. jar = requests_mock.CookieJar()
  484. jar.set('fig', 'newton', path='/foo', domain='.example.com')
  485. self.adapter.register_uri('GET', self.url, text=_cb, cookies=jar)
  486. resp = self.session.get(self.url)
  487. self.assertEqual('newton', resp.cookies['fig'])
  488. self.assertEqual('apple', resp.cookies['sugar'])
  489. self.assertEqual({'/foo', '/bar'}, set(resp.cookies.list_paths()))
  490. self.assertEqual(['.example.com'], resp.cookies.list_domains())
  491. def test_reading_closed_fp(self):
  492. self.adapter.register_uri('GET', self.url, text='abc')
  493. resp = self.session.get(self.url)
  494. # raw will have been closed during the request reading
  495. self.assertTrue(resp.raw.closed)
  496. data = resp.raw.read()
  497. self.assertIsInstance(data, six.binary_type)
  498. self.assertEqual(0, len(data))
  499. def test_case_sensitive_headers(self):
  500. data = 'testdata'
  501. headers = {'aBcDe': 'FgHiJ'}
  502. self.adapter.register_uri('GET', self.url, text=data)
  503. resp = self.session.get(self.url, headers=headers)
  504. self.assertEqual('GET', self.adapter.last_request.method)
  505. self.assertEqual(200, resp.status_code)
  506. self.assertEqual(data, resp.text)
  507. for k, v in headers.items():
  508. self.assertEqual(v, self.adapter.last_request.headers[k])
  509. def test_case_sensitive_history(self):
  510. self.adapter._case_sensitive = True
  511. data = 'testdata'
  512. netloc = 'examPlE.CoM'
  513. path = '/TesTER'
  514. query = 'aBC=deF'
  515. mock_url = '%s://%s%s' % (self.PREFIX, netloc.lower(), path)
  516. request_url = '%s://%s%s?%s' % (self.PREFIX, netloc, path, query)
  517. # test that the netloc is ignored when actually making the request
  518. self.adapter.register_uri('GET', mock_url, text=data)
  519. resp = self.session.get(request_url)
  520. self.assertEqual('GET', self.adapter.last_request.method)
  521. self.assertEqual(200, resp.status_code)
  522. self.assertEqual(data, resp.text)
  523. # but even still the mixed case parameters come out in history
  524. self.assertEqual(netloc, self.adapter.last_request.netloc)
  525. self.assertEqual(path, self.adapter.last_request.path)
  526. self.assertEqual(query, self.adapter.last_request.query)
  527. def test_stream_none(self):
  528. text = 'hello world'
  529. self.adapter.register_uri('GET',
  530. self.url,
  531. text=text,
  532. headers=self.headers)
  533. resp = self.session.get(self.url, stream=True)
  534. resps = [c for c in resp.iter_content(None, decode_unicode=True)]
  535. self.assertEqual([text], resps)
  536. def test_stream_size(self):
  537. text = 'hello world'
  538. self.adapter.register_uri('GET',
  539. self.url,
  540. text=text,
  541. headers=self.headers)
  542. resp = self.session.get(self.url, stream=True)
  543. resps = [c for c in resp.iter_content(3, decode_unicode=True)]
  544. self.assertEqual(['hel', 'lo ', 'wor', 'ld'], resps)