From e4c4c80b82e14cf60e43653d6934a7d862f00fa5 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 17 Dec 2012 07:27:25 -0500 Subject: [PATCH] remove all old tests --- .travis.yml | 4 +- Makefile | 34 +- requirements.txt | 4 +- test_iteration.py | 29 - test_requests.org | 0 tests/dummy_server.py | 46 -- tests/informal/test_leaked_connections.py | 31 - tests/test_cookies.py | 244 ------ tests/test_keep_alive.py | 65 -- tests/test_proxies.py | 29 - tests/test_requests.py | 1151 ----------------------------- tests/test_requests_ext.py | 124 ---- tests/test_requests_https.py | 32 - tests/test_utils.py | 122 --- 14 files changed, 8 insertions(+), 1907 deletions(-) delete mode 100644 test_iteration.py create mode 100644 test_requests.org delete mode 100644 tests/dummy_server.py delete mode 100644 tests/informal/test_leaked_connections.py delete mode 100755 tests/test_cookies.py delete mode 100644 tests/test_keep_alive.py delete mode 100644 tests/test_proxies.py delete mode 100755 tests/test_requests.py delete mode 100644 tests/test_requests_ext.py delete mode 100755 tests/test_requests_https.py delete mode 100644 tests/test_utils.py diff --git a/.travis.yml b/.travis.yml index 2198624..3cc2b6c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,7 @@ python: - 2.7 - 3.2 env: HTTPBIN_URL=http://httpbin.org/ -script: make travis +script: make test install: - - pip install nose + - make test-deps - pip install . --use-mirrors diff --git a/Makefile b/Makefile index 7046ff5..3163357 100644 --- a/Makefile +++ b/Makefile @@ -1,34 +1,10 @@ SHELL := /bin/bash -# test_requests_ext.py depends on external services, and async doesn't work under Python 3 -# Travis/Jenkins should be ensuring that all other tests pass on all supported versions -CI_TESTS=$(shell find tests/ -name "*.py" ! -name "test_requests_ext.py" ! -name "test_requests_async.py") - -iter: - python test_iteration.py - -init: - python setup.py develop - pip install -r requirements.txt - test: - nosetests ./tests/* - -lazy: - nosetests --with-color tests/test_requests.py - -simple: - nosetests tests/test_requests.py + py.test -citests: - nosetests ${CI_TESTS} --with-xunit --xunit-file=junit-report.xml - -ci: citests cipyflakes - -travis: citests - -server: - gunicorn httpbin:app --bind=0.0.0.0:7077 & +test-deps: + pip install py.test deps: urllib3 certs charade @@ -47,6 +23,4 @@ charade: rm -fr charade certs: - cd requests && curl -O https://raw.github.com/kennethreitz/certifi/master/certifi/cacert.pem - -docs: site + cd requests && curl -O https://raw.github.com/kennethreitz/certifi/master/certifi/cacert.pem \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 0b725ca..e44a472 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ -nose -rudolf2 +py.test +sphinx \ No newline at end of file diff --git a/test_iteration.py b/test_iteration.py deleted file mode 100644 index 9672232..0000000 --- a/test_iteration.py +++ /dev/null @@ -1,29 +0,0 @@ -import requests -import unittest - - -class IterationTestCase(unittest.TestCase): - - def test_assertion(self): - assert 1 - - # def test_dzubia(self): - # s = requests.Session() - # r = requests.Request(method='GET', url='http://github.com/') - - # # r = s.send(r) - - def test_prepared_request(self): - s = requests.Session() - r = requests.Request(method='GET', url='http://github.com/') - r = r.prepare() - - r = s.send(r) - print r - - - - - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/test_requests.org b/test_requests.org new file mode 100644 index 0000000..e69de29 diff --git a/tests/dummy_server.py b/tests/dummy_server.py deleted file mode 100644 index 1096e25..0000000 --- a/tests/dummy_server.py +++ /dev/null @@ -1,46 +0,0 @@ -import asyncore -import threading -import socket - -class HttpServer(threading.Thread): - def __init__(self, port): - threading.Thread.__init__(self) - self.dispatcher = HttpServerDispatcher(port) - - def run(self): - asyncore.loop() - - @property - def connection_count(self): - return self.dispatcher.connection_count - - def close(self): - asyncore.close_all() - -class HttpServerDispatcher(asyncore.dispatcher): - def __init__(self, port): - asyncore.dispatcher.__init__(self) - self.connected = False - self.create_socket(socket.AF_INET, socket.SOCK_STREAM) - self.bind(('127.0.0.1', port)) - self.listen(1) - self.connection_count = 0 - - def handle_accept(self): - self.connection_count += 1 - self.handler = RequestHandler(self.accept()[0]) - - def handle_close(self): - self.close() - - -class RequestHandler(asyncore.dispatcher_with_send): - def __init__(self, sock): - asyncore.dispatcher_with_send.__init__(self, sock) - self.response = ("HTTP/1.1 200 OK\r\n" - "Connection: keep-alive\r\n" - "Content-Length: 0\r\n\r\n") - - def handle_read(self): - self.recv(1024) - self.send(self.response) diff --git a/tests/informal/test_leaked_connections.py b/tests/informal/test_leaked_connections.py deleted file mode 100644 index 37d964c..0000000 --- a/tests/informal/test_leaked_connections.py +++ /dev/null @@ -1,31 +0,0 @@ -""" -This is an informal test originally written by Bluehorn; -it verifies that Requests does not leak connections when -the body of the request is not read. -""" - -import gc -import os -import requests -import subprocess -import sys - - -def main(): - gc.disable() - - for x in range(20): - requests.head("http://www.google.com/") - - print("Open sockets after 20 head requests:") - pid = os.getpid() - subprocess.call("lsof -p%d -a -iTCP" % (pid,), shell=True) - - gcresult = gc.collect() - print("Garbage collection result: %s" % (gcresult,)) - - print("Open sockets after garbage collection:") - subprocess.call("lsof -p%d -a -iTCP" % (pid,), shell=True) - -if __name__ == '__main__': - sys.exit(main()) diff --git a/tests/test_cookies.py b/tests/test_cookies.py deleted file mode 100755 index 90141a9..0000000 --- a/tests/test_cookies.py +++ /dev/null @@ -1,244 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import sys -import json -import os -import tempfile -import unittest - -# Path hack. -sys.path.insert(0, os.path.abspath('..')) -import requests -from requests.compat import cookielib - -# More hacks -sys.path.append('.') -from test_requests import httpbin, TestBaseMixin - - -class CookieTests(TestBaseMixin, unittest.TestCase): - - def test_cookies_from_response(self): - """Basic test that we correctly parse received cookies in the Response object.""" - r = requests.get(httpbin('cookies', 'set', 'myname', 'myvalue')) - - # test deprecated dictionary interface - self.assertEqual(r.cookies['myname'], 'myvalue') - self.assertEqual(r.cookies.get('myname'), 'myvalue') - # test CookieJar interface - jar = r.cookies - self.assertEqual(len(jar), 1) - cookie_from_jar = list(jar)[0] - self.assertCookieHas(cookie_from_jar, name='myname', value='myvalue') - - q = requests.get(httpbin('cookies'), cookies=jar) - self.assertEqual(json.loads(q.text)['cookies'], {'myname': 'myvalue'}) - - def test_crossdomain_cookies(self): - """Cookies should not be sent to domains they didn't originate from.""" - r = requests.get("http://github.com") - c = r.cookies - # github should send us cookies - self.assertTrue(len(c) >= 1) - - # github cookies should not be sent to httpbin.org: - r2 = requests.get(httpbin('cookies'), cookies=c) - self.assertEqual(json.loads(r2.text)['cookies'], {}) - - # let's do this again using the session object - s = requests.session() - s.get("http://github.com") - self.assertTrue(len(s.cookies) >= 1) - r = s.get(httpbin('cookies')) - self.assertEqual(json.loads(r.text)['cookies'], {}) - # we can set a cookie and get exactly that same-domain cookie back: - r = s.get(httpbin('cookies', 'set', 'myname', 'myvalue')) - self.assertEqual(json.loads(r.text)['cookies'], {'myname': 'myvalue'}) - - def test_overwrite(self): - """Cookies should get overwritten when appropriate.""" - r = requests.get(httpbin('cookies', 'set', 'shimon', 'yochai')) - cookies = r.cookies - requests.get(httpbin('cookies', 'set', 'elazar', 'shimon'), cookies=cookies) - r = requests.get(httpbin('cookies'), cookies=cookies) - self.assertEqual(json.loads(r.text)['cookies'], - {'shimon': 'yochai', 'elazar': 'shimon'}) - # overwrite the value of 'shimon' - r = requests.get(httpbin('cookies', 'set', 'shimon', 'gamaliel'), cookies=cookies) - self.assertEqual(len(cookies), 2) - r = requests.get(httpbin('cookies'), cookies=cookies) - self.assertEqual(json.loads(r.text)['cookies'], - {'shimon': 'gamaliel', 'elazar': 'shimon'}) - - def test_redirects(self): - """Test that cookies set by a 302 page are correctly processed.""" - r = requests.get(httpbin('cookies', 'set', 'redirects', 'work')) - self.assertEqual(r.history[0].status_code, 302) - expected_cookies = {'redirects': 'work'} - self.assertEqual(json.loads(r.text)['cookies'], expected_cookies) - - r2 = requests.get(httpbin('cookies', 'set', 'very', 'well'), cookies=r.cookies) - expected_cookies = {'redirects': 'work', 'very': 'well'} - self.assertEqual(json.loads(r2.text)['cookies'], expected_cookies) - self.assertTrue(r.cookies is r2.cookies) - - def test_none_cookie(self): - """Regression test: don't send a Cookie header with a string value of 'None'!""" - page = json.loads(requests.get(httpbin('headers')).text) - self.assertTrue('Cookie' not in page['headers']) - - def test_secure_cookies(self): - """Test that secure cookies can only be sent via https.""" - header = "Set-Cookie: ThisIsA=SecureCookie; Path=/; Secure; HttpOnly" - url = 'https://httpbin.org/response-headers?%s' % (requests.utils.quote(header),) - cookies = requests.get(url, verify=False).cookies - self.assertEqual(len(cookies), 1) - self.assertEqual(list(cookies)[0].secure, True) - - secure_resp = requests.get('https://httpbin.org/cookies', cookies=cookies, verify=False) - secure_cookies_sent = json.loads(secure_resp.text)['cookies'] - self.assertEqual(secure_cookies_sent, {'ThisIsA': 'SecureCookie'}) - - insecure_resp = requests.get('http://httpbin.org/cookies', cookies=cookies) - insecure_cookies_sent = json.loads(insecure_resp.text)['cookies'] - self.assertEqual(insecure_cookies_sent, {}) - - def test_jar_utility_functions(self): - """Test utility functions such as list_domains, list_paths, multiple_domains.""" - r = requests.get("http://github.com") - c = r.cookies - # github should send us cookies - self.assertTrue(len(c) >= 1) - self.assertEqual(len(c), len(r.cookies.keys())) - self.assertEqual(len(c), len(r.cookies.values())) - self.assertEqual(len(c), len(r.cookies.items())) - - # domain and path utility functions - domain = r.cookies.list_domains()[0] - path = r.cookies.list_paths()[0] - self.assertEqual(dict(r.cookies), r.cookies.get_dict(domain=domain, path=path)) - self.assertEqual(len(r.cookies.list_domains()), 1) - self.assertEqual(len(r.cookies.list_paths()), 1) - self.assertFalse(r.cookies.multiple_domains()) - - def test_convert_jar_to_dict(self): - """Test that keys, values, and items are defined and that we can convert - cookie jars to plain old Python dicts.""" - r = requests.get(httpbin('cookies', 'set', 'myname', 'myvalue')) - - # test keys, values, and items - self.assertEqual(r.cookies.keys(), ['myname']) - self.assertEqual(r.cookies.values(), ['myvalue']) - self.assertEqual(r.cookies.items(), [('myname', 'myvalue')]) - - # test if we can convert jar to dict - dictOfCookies = dict(r.cookies) - self.assertEqual(dictOfCookies, {'myname': 'myvalue'}) - self.assertEqual(dictOfCookies, r.cookies.get_dict()) - - -class LWPCookieJarTest(TestBaseMixin, unittest.TestCase): - """Check store/load of cookies to FileCookieJar's, specifically LWPCookieJar's.""" - - COOKIEJAR_CLASS = cookielib.LWPCookieJar - - def setUp(self): - # blank the file - self.cookiejar_file = tempfile.NamedTemporaryFile() - self.cookiejar_filename = self.cookiejar_file.name - cookiejar = self.COOKIEJAR_CLASS(self.cookiejar_filename) - cookiejar.save() - - def tearDown(self): - try: - self.cookiejar_file.close() - except OSError: - pass - - def test_cookiejar_persistence(self): - """Test that we can save cookies to a FileCookieJar.""" - cookiejar = self.COOKIEJAR_CLASS(self.cookiejar_filename) - cookiejar.load() - # initially should be blank - self.assertEqual(len(cookiejar), 0) - - response = requests.get(httpbin('cookies', 'set', 'key', 'value'), cookies=cookiejar) - self.assertEqual(len(cookiejar), 1) - cookie = list(cookiejar)[0] - self.assertEqual(json.loads(response.text)['cookies'], {'key': 'value'}) - self.assertCookieHas(cookie, name='key', value='value') - - # save and reload the cookies from the file: - cookiejar.save(ignore_discard=True) - cookiejar_2 = self.COOKIEJAR_CLASS(self.cookiejar_filename) - cookiejar_2.load(ignore_discard=True) - self.assertEqual(len(cookiejar_2), 1) - cookie_2 = list(cookiejar_2)[0] - # this cookie should have been saved with the correct domain restriction: - self.assertCookieHas(cookie_2, name='key', value='value', - domain='httpbin.org', path='/') - - # httpbin sets session cookies, so if we don't ignore the discard attribute, - # there should be no cookie: - cookiejar_3 = self.COOKIEJAR_CLASS(self.cookiejar_filename) - cookiejar_3.load() - self.assertEqual(len(cookiejar_3), 0) - - def test_crossdomain(self): - """Test persistence of the domains associated with the cookies.""" - cookiejar = self.COOKIEJAR_CLASS(self.cookiejar_filename) - cookiejar.load() - self.assertEqual(len(cookiejar), 0) - - # github sets a cookie - requests.get("http://github.com", cookies=cookiejar) - num_github_cookies = len(cookiejar) - self.assertTrue(num_github_cookies >= 1) - # httpbin sets another - requests.get(httpbin('cookies', 'set', 'key', 'value'), cookies=cookiejar) - num_total_cookies = len(cookiejar) - self.assertTrue(num_total_cookies >= 2) - self.assertTrue(num_total_cookies > num_github_cookies) - - # save and load - cookiejar.save(ignore_discard=True) - cookiejar_2 = self.COOKIEJAR_CLASS(self.cookiejar_filename) - cookiejar_2.load(ignore_discard=True) - self.assertEqual(len(cookiejar_2), num_total_cookies) - r = requests.get(httpbin('cookies'), cookies=cookiejar_2) - self.assertEqual(json.loads(r.text)['cookies'], {'key': 'value'}) - - def test_persistent_cookies(self): - """Test that we correctly interpret persistent cookies.""" - # httpbin's normal cookie methods don't send persistent cookies, - # so cook up the appropriate header and force it to send - header = "Set-Cookie: Persistent=CookiesAreScary; expires=Sun, 04-May-2032 04:56:50 GMT; path=/" - url = httpbin('response-headers?%s' % (requests.utils.quote(header),)) - cookiejar = self.COOKIEJAR_CLASS(self.cookiejar_filename) - - requests.get(url, cookies=cookiejar) - self.assertEqual(len(cookiejar), 1) - self.assertCookieHas(list(cookiejar)[0], name='Persistent', value='CookiesAreScary') - - requests.get(httpbin('cookies', 'set', 'ThisCookieIs', 'SessionOnly'), cookies=cookiejar) - self.assertEqual(len(cookiejar), 2) - self.assertEqual(len([c for c in cookiejar if c.name == 'Persistent']), 1) - self.assertEqual(len([c for c in cookiejar if c.name == 'ThisCookieIs']), 1) - - # save and load - cookiejar.save() - cookiejar_2 = self.COOKIEJAR_CLASS(self.cookiejar_filename) - cookiejar_2.load() - # we should only load the persistent cookie - self.assertEqual(len(cookiejar_2), 1) - self.assertCookieHas(list(cookiejar_2)[0], name='Persistent', value='CookiesAreScary') - - -class MozCookieJarTest(LWPCookieJarTest): - """Same test, but substitute MozillaCookieJar.""" - - COOKIEJAR_CLASS = cookielib.MozillaCookieJar - -if __name__ == '__main__': - unittest.main() diff --git a/tests/test_keep_alive.py b/tests/test_keep_alive.py deleted file mode 100644 index 8778926..0000000 --- a/tests/test_keep_alive.py +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import os -import sys -import unittest - -# Path hack. -sys.path.insert(0, os.path.abspath('..')) -import requests -import dummy_server - -class KeepAliveTests(unittest.TestCase): - server_and_proxy_port = 1234 - request_count = 2 - url = 'http://localhost:{0}'.format(server_and_proxy_port) - proxies={'http': url} - - def setUp(self): - self.session = requests.session() - self.proxy_server = dummy_server.HttpServer(self.server_and_proxy_port) - self.proxy_server.start() - - def tearDown(self): - self.proxy_server.close() - - def test_keep_alive_with_direct_connection(self): - self.make_requests() - self.check_each_request_are_in_same_connection() - - def test_no_keep_alive_with_direct_connection(self): - self.disable_keep_alive_in_session() - self.make_requests() - self.check_each_request_are_in_different_connection() - - def test_keep_alive_with_proxy_connection(self): - self.make_proxy_requests() - self.check_each_request_are_in_same_connection() - - def test_no_keep_alive_with_proxy_connection(self): - self.disable_keep_alive_in_session() - self.make_proxy_requests() - self.check_each_request_are_in_different_connection() - - def make_proxy_requests(self): - self.make_requests(self.proxies) - - def make_requests(self, proxies=None): - for _ in range(self.request_count): - self.session.get(self.url, proxies=proxies).text - - def check_each_request_are_in_same_connection(self): - """Keep-alive requests open a single connection to the server.""" - self.assertEqual(self.proxy_server.connection_count, 1) - - def check_each_request_are_in_different_connection(self): - """Keep-alive requests open a single connection to the server.""" - self.assertEqual(self.proxy_server.connection_count, self.request_count) - - def disable_keep_alive_in_session(self): - self.session.config['keep_alive'] = False - - -if __name__ == '__main__': - unittest.main() diff --git a/tests/test_proxies.py b/tests/test_proxies.py deleted file mode 100644 index 5aa5bf3..0000000 --- a/tests/test_proxies.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import os -import sys -import unittest - -# Path hack. -sys.path.insert(0, os.path.abspath('..')) -import requests - - -class HTTPSProxyTest(unittest.TestCase): - """Smoke test for https functionality.""" - - smoke_url = "https://github.com" - - def test_empty_https_proxy(self): - proxy = {"https": ""} - result = requests.get(self.smoke_url, verify=False, proxies=proxy) - self.assertEqual(result.status_code, 200) - - def test_empty_http_proxy(self): - proxy = {"http": ""} - result = requests.get(self.smoke_url, proxies=proxy) - self.assertEqual(result.status_code, 200) - -if __name__ == '__main__': - unittest.main() diff --git a/tests/test_requests.py b/tests/test_requests.py deleted file mode 100755 index 8bb61ea..0000000 --- a/tests/test_requests.py +++ /dev/null @@ -1,1151 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -# from __future__ import unicode_literals - -# Path hack. -import sys -import os -sys.path.insert(0, os.path.abspath('..')) -import json -import unittest -import pickle -import tempfile -import collections - -import requests -from requests.compat import str, StringIO -# import envoy -from requests import HTTPError -from requests import get, post, head, put -from requests.auth import HTTPBasicAuth, HTTPDigestAuth -from requests.exceptions import InvalidURL - -if 'HTTPBIN_URL' not in os.environ: - os.environ['HTTPBIN_URL'] = 'http://httpbin.org/' - -HTTPBIN_URL = os.environ.get('HTTPBIN_URL') - - -def httpbin(*suffix): - """Returns url for HTTPBIN resource.""" - return HTTPBIN_URL + '/'.join(suffix) - - -SERVICES = (httpbin, ) - -_httpbin = False - - -class TestSetup(object): - """Requests test cases.""" - - # It goes to eleven. - _multiprocess_can_split_ = True - - def setUp(self): - - global _httpbin - - if (not 'HTTPBIN_URL' in os.environ) and not _httpbin: - # c = envoy.connect('httpbin %s' % (PORT)) - # time.sleep(1) - _httpbin = True - - -class TestBaseMixin(object): - - def assertCookieHas(self, cookie, **kwargs): - """Assert that a cookie has various specified properties.""" - for attr, expected_value in kwargs.items(): - cookie_attr = getattr(cookie, attr) - message = 'Failed comparison for %s: %s != %s' % (attr, cookie_attr, expected_value) - self.assertEqual(cookie_attr, expected_value, message) - - -class RequestsTestSuite(TestSetup, TestBaseMixin, unittest.TestCase): - """Requests test cases.""" - - def test_entry_points(self): - - requests.session - requests.session().get - requests.session().head - requests.get - requests.head - requests.put - requests.patch - requests.post - - def test_invalid_url(self): - self.assertRaises(ValueError, get, 'hiwpefhipowhefopw') - - def test_path_is_not_double_encoded(self): - request = requests.Request("http://0.0.0.0/get/test case") - - self.assertEqual(request.path_url, "/get/test%20case") - - def test_params_are_added_before_fragment(self): - request = requests.Request( - "http://example.com/path#fragment", params={"a": "b"}) - self.assertEqual(request.full_url, - "http://example.com/path?a=b#fragment") - request = requests.Request( - "http://example.com/path?key=value#fragment", params={"a": "b"}) - self.assertEqual(request.full_url, - "http://example.com/path?key=value&a=b#fragment") - - def test_params_accepts_kv_list(self): - request = requests.Request('http://example.com/path', - params=[('a', 'b')]) - self.assertEqual(request.full_url, 'http://example.com/path?a=b') - - def test_HTTP_200_OK_GET(self): - r = get(httpbin('get')) - self.assertEqual(r.status_code, 200) - - def test_response_sent(self): - r = get(httpbin('get')) - - self.assertTrue(r.request.sent) - - def test_HTTP_302_ALLOW_REDIRECT_GET(self): - r = get(httpbin('redirect', '1')) - self.assertEqual(r.status_code, 200) - - def test_HTTP_302_GET(self): - r = get(httpbin('redirect', '1'), allow_redirects=False) - self.assertEqual(r.status_code, 302) - - def test_HTTP_200_OK_GET_WITH_PARAMS(self): - heads = {'User-agent': 'Mozilla/5.0'} - - r = get(httpbin('user-agent'), headers=heads) - - self.assertTrue(heads['User-agent'] in r.text) - self.assertEqual(r.status_code, 200) - - def test_HTTP_200_OK_GET_WITH_MIXED_PARAMS(self): - heads = {'User-agent': 'Mozilla/5.0'} - - r = get(httpbin('get') + '?test=true', params={'q': 'test'}, headers=heads) - self.assertEqual(r.status_code, 200) - - # def test_unicode_headers(self): - # # Simply calling requests with a unicode instance should simply work - # # when the characters are all representable using latin-1: - # heads = { u'User-Agent': u'Requests Test Suite' } - # requests.get(url=httpbin('get'), headers=heads) - - # # Characters outside latin-1 should raise an exception: - # heads = { u'User-Agent': u'\u30cd\u30c3\u30c8\u30ef\u30fc\u30af' } - # self.assertRaises(UnicodeEncodeError, requests.get, - # url=httpbin('get'), headers=heads) - - # def test_session_with_escaped_url(self): - # # Test a URL that contains percent-escaped characters - # # This URL should not be modified (double-escaped) - # # Tests: - # # - Quoted illegal characters ("%20" (' '), "%3C" ('<'), "%3E" ('>')) - # # - Quoted reserved characters ("%25" ('%'), "%23" ('#'), "%2F" ('/')) - # # - Quoted non-ASCII characters ("%C3%98", "%C3%A5") - # path_fully_escaped = '%3Ca%25b%23c%2Fd%3E/%C3%98%20%C3%A5' - # url = httpbin('get/' + path_fully_escaped) - # response = get(url) - # self.assertEqual(response.url, httpbin('get/' + path_fully_escaped)) - - # # Test that illegal characters in a path get properly percent-escaped - # # Tests: - # # - Bare illegal characters (space, '<') - # # - Bare non-ASCII characters ('\u00d8') - # path = u' 127, - then unicode(url) breaks. - ''' - r = requests.get('http://www.marketwire.com/mw/release.' + - 'do?id=1628202&sourceType=3') - self.assertTrue(r.ok) - - def test_unicode_url_outright(self): - '''This url visits in my browser''' - r = requests.get('http://www.marketwire.com/press-release/' + - 'jp-morgan-behauptet-sich-der-spitze-euro' + - 'p%C3%A4ischer-anleihe-analysten-laut-umf' + - 'rageergebnissen-1628202.htm') - self.assertTrue(r.ok) - - def test_redirect_encoding(self): - '''This url redirects to - http://www.dealipedia.com/deal_view_investment.php?r=20012''' - - r = requests.get('http://feedproxy.google.com/~r/Dealipedia' + - 'News/~3/BQtUJRJeZlo/deal_view_investment.' + - 'php') - self.assertTrue(r.ok) - - def test_cookies_on_redirects(self): - """Test interaction between cookie handling and redirection.""" - # get a cookie for tinyurl.com ONLY - s = requests.session() - s.get(url='http://tinyurl.com/preview.php?disable=1') - # we should have set a cookie for tinyurl: preview=0 - self.assertTrue('preview' in s.cookies) - self.assertEqual(s.cookies['preview'], '0') - self.assertEqual(list(s.cookies)[0].name, 'preview') - self.assertEqual(list(s.cookies)[0].domain, 'tinyurl.com') - - # get cookies on another domain - r2 = s.get(url='http://httpbin.org/cookies') - # the cookie is not there - self.assertTrue('preview' not in json.loads(r2.text)['cookies']) - - # this redirects to another domain, httpbin.org - # cookies of the first domain should NOT be sent to the next one - r3 = s.get(url='http://tinyurl.com/7zp3jnr') - self.assertEqual(r3.url, 'http://httpbin.org/cookies') - self.assertTrue('preview' not in json.loads(r3.text)['cookies']) - -if __name__ == '__main__': - unittest.main() diff --git a/tests/test_requests_https.py b/tests/test_requests_https.py deleted file mode 100755 index 2da0982..0000000 --- a/tests/test_requests_https.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import os -import sys -import unittest - -# Path hack. -sys.path.insert(0, os.path.abspath('..')) -import requests - - -class HTTPSTest(unittest.TestCase): - """Smoke test for https functionality.""" - - smoke_url = "https://github.com" - - def perform_smoke_test(self, verify=False): - result = requests.get(self.smoke_url, verify=verify) - self.assertEqual(result.status_code, 200) - - def test_smoke(self): - """Smoke test without verification.""" - self.perform_smoke_test(verify=False) - - def test_smoke_verified(self): - """Smoke test with SSL verification.""" - self.perform_smoke_test(verify=True) - - -if __name__ == '__main__': - unittest.main() diff --git a/tests/test_utils.py b/tests/test_utils.py deleted file mode 100644 index 015cac6..0000000 --- a/tests/test_utils.py +++ /dev/null @@ -1,122 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import codecs -import os -import sys -import unittest -import random - -# Path hack. -sys.path.insert(0, os.path.abspath('..')) -from requests.utils import get_environ_proxies -import requests.utils -from requests.compat import is_py3, bytes - - -if is_py3: - unichr = chr - byteschr = lambda c: bytes([c]) -else: - byteschr = chr - - -class UtilityTests(unittest.TestCase): - """Tests for the JSON UTF encoding guessing code.""" - - codecs = ( - 'utf-8', 'utf-8-sig', - 'utf-16', 'utf-16-le', 'utf-16-be', - 'utf-32', 'utf-32-le', 'utf-32-be' - ) - - def test_guess_encoding(self): - # Throw 4-character ASCII strings (encoded to a UTF encoding) - # at the guess routine; it should correctly guess all codecs. - guess = requests.utils.guess_json_utf - for c in range(33, 127): # printable only - sample = unichr(c) * 4 - for codec in self.codecs: - res = guess(sample.encode(codec)) - self.assertEqual(res, codec) - - def test_smoke_encoding(self): - # Throw random 4-byte strings at the guess function. - # Any guess for a UTF encoding is verified, a decode exception - # is a test failure. - guess = requests.utils.guess_json_utf - for i in range(1000): - sample = bytes().join( - [byteschr(random.randrange(256)) for _ in range(4)]) - res = guess(sample) - if res is not None: - # This should decode without errors if this is *really* - # something in this encoding. However, UTF-8 is a lot - # more picky, so we expect errors there. UTF-16 surrogate - # pairs also fail - try: - sample.decode(res) - except UnicodeDecodeError as e: - self.assertEqual(e.args[0].replace('-', '').lower(), - res.replace('-', '').lower()) - if res == 'utf-8': - self.assertTrue(e.args[-1], ( - 'invalid continuation byte', - 'invalid start byte')) - continue - if res == 'utf-16': - self.assertEqual(e.args[-1], 'unexpected end of data') - self.assertTrue(sample[:2] in ( - codecs.BOM_UTF16_LE, codecs.BOM_UTF16_BE)) - # the second two bytes are in the range \ud800-\udfff - # if someone wants to add tests for that as well. I don't - # see the need; we are not testing UTF decoding here. - continue - raise - - def test_get_environ_proxies_respects_no_proxy(self): - '''This test confirms that the no_proxy environment setting is - respected by get_environ_proxies().''' - - # Store the current environment settings. - try: - old_http_proxy = os.environ['http_proxy'] - except KeyError: - old_http_proxy = None - - try: - old_no_proxy = os.environ['no_proxy'] - except KeyError: - old_no_proxy = None - - # Set up some example environment settings. - os.environ['http_proxy'] = 'http://www.example.com/' - os.environ['no_proxy'] = r'localhost,.0.0.1:8080' - - # Set up expected proxy return values. - proxy_yes = {'http': 'http://www.example.com/'} - proxy_no = {} - - # Check that we get the right things back. - self.assertEqual(proxy_yes, - get_environ_proxies('http://www.google.com/')) - self.assertEqual(proxy_no, - get_environ_proxies('http://localhost/test')) - self.assertEqual(proxy_no, - get_environ_proxies('http://127.0.0.1:8080/')) - self.assertEqual(proxy_yes, - get_environ_proxies('http://127.0.0.1:8081/')) - - # Return the settings to what they were. - if old_http_proxy: - os.environ['http_proxy'] = old_http_proxy - else: - del os.environ['http_proxy'] - - if old_no_proxy: - os.environ['no_proxy'] = old_no_proxy - else: - del os.environ['no_proxy'] - -if __name__ == '__main__': - unittest.main() -- 2.7.4