From 415fb53cb45969f0f4877b95b035f6b864ff7450 Mon Sep 17 00:00:00 2001 From: David Pursehouse Date: Wed, 24 Jul 2013 11:39:03 +0900 Subject: [PATCH 1/5] Remove redundant session in `test_mixed_case_scheme_acceptable` --- test_requests.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test_requests.py b/test_requests.py index 27d5e676..0d2c20c9 100755 --- a/test_requests.py +++ b/test_requests.py @@ -90,14 +90,11 @@ class RequestsTestCase(unittest.TestCase): "http://example.com/path?key=value&a=b#fragment") def test_mixed_case_scheme_acceptable(self): - proxies = getproxies() s = requests.Session() - s.proxies = proxies + s.proxies = getproxies() r = requests.Request('GET', 'http://httpbin.org/get') r = s.send(r.prepare()) self.assertEqual(r.status_code,200) - s = requests.Session() - s.proxies = proxies r = requests.Request('GET', 'HTTP://httpbin.org/get') r = s.send(r.prepare()) self.assertEqual(r.status_code,200) From 012cc33d44073ce2dc93a9b91368cbe6c5246014 Mon Sep 17 00:00:00 2001 From: David Pursehouse Date: Wed, 24 Jul 2013 11:58:43 +0900 Subject: [PATCH 2/5] Rewrite `test_mixed_case_scheme_acceptable` to work with local httpbin Instead of using hard-coded urls to httpbin.org, use the url defined in `HTTPBIN_URL` replacing the scheme as necessary to test the mixed cases. Refs #1485 --- test_requests.py | 35 ++++++++++------------------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/test_requests.py b/test_requests.py index 0d2c20c9..7691d1a4 100755 --- a/test_requests.py +++ b/test_requests.py @@ -12,7 +12,7 @@ import pickle import requests from requests.auth import HTTPDigestAuth from requests.adapters import HTTPAdapter -from requests.compat import str, cookielib, getproxies, urljoin +from requests.compat import str, cookielib, getproxies, urljoin, urlparse from requests.cookies import cookiejar_from_dict from requests.exceptions import InvalidURL, MissingSchema from requests.structures import CaseInsensitiveDict @@ -92,30 +92,15 @@ class RequestsTestCase(unittest.TestCase): def test_mixed_case_scheme_acceptable(self): s = requests.Session() s.proxies = getproxies() - r = requests.Request('GET', 'http://httpbin.org/get') - r = s.send(r.prepare()) - self.assertEqual(r.status_code,200) - r = requests.Request('GET', 'HTTP://httpbin.org/get') - r = s.send(r.prepare()) - self.assertEqual(r.status_code,200) - r = requests.Request('GET', 'hTTp://httpbin.org/get') - r = s.send(r.prepare()) - self.assertEqual(r.status_code,200) - r = requests.Request('GET', 'HttP://httpbin.org/get') - r = s.send(r.prepare()) - self.assertEqual(r.status_code,200) - r = requests.Request('GET', 'https://httpbin.org/get') - r = s.send(r.prepare()) - self.assertEqual(r.status_code,200) - r = requests.Request('GET', 'HTTPS://httpbin.org/get') - r = s.send(r.prepare()) - self.assertEqual(r.status_code,200) - r = requests.Request('GET', 'hTTps://httpbin.org/get') - r = s.send(r.prepare()) - self.assertEqual(r.status_code,200) - r = requests.Request('GET', 'HttPs://httpbin.org/get') - r = s.send(r.prepare()) - self.assertEqual(r.status_code,200) + parts = urlparse(httpbin('get')) + schemes = ['http://', 'HTTP://', 'hTTp://', 'HttP://', + 'https://', 'HTTPS://', 'hTTps://', 'HttPs://'] + for scheme in schemes: + url = scheme + parts.netloc + parts.path + r = requests.Request('GET', url) + r = s.send(r.prepare()) + self.assertEqual(r.status_code, 200, + "failed for scheme %s" % scheme) def test_HTTP_200_OK_GET_ALTERNATIVE(self): r = requests.Request('GET', httpbin('get')) From c4f16c351c4b639a194ff36f61abebd1ecccf797 Mon Sep 17 00:00:00 2001 From: David Pursehouse Date: Wed, 24 Jul 2013 16:57:54 +0900 Subject: [PATCH 3/5] Remove redundant test case `test_uppercase_scheme` This test verifies that an upper case scheme ('HTTP') works correctly, but this is already tested in `test_mixed_case_scheme_acceptable`. --- test_requests.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/test_requests.py b/test_requests.py index 7691d1a4..9bd720fc 100755 --- a/test_requests.py +++ b/test_requests.py @@ -553,10 +553,6 @@ class RequestsTestCase(unittest.TestCase): 'application/json' ) - def test_uppercase_scheme(self): - r = requests.get('HTTP://example.com/') - self.assertEqual(r.status_code, 200) - def test_uppercase_scheme_redirect(self): r = requests.get(httpbin('redirect-to'), params={'url': 'HTTP://example.com/'}) self.assertEqual(r.status_code, 200) From 56b5f02551cd65cfc99f7f38c60d36b2cfdfc6e8 Mon Sep 17 00:00:00 2001 From: David Pursehouse Date: Wed, 24 Jul 2013 17:18:16 +0900 Subject: [PATCH 4/5] Rewrite `test_uppercase_scheme_redirect` to use local httpbin Instead of redirecting to hard-coded 'example.com', use the URL defined in `HTTPBIN_URL` with the path set to the 'html' endpoint. --- test_requests.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test_requests.py b/test_requests.py index 9bd720fc..0dae1e29 100755 --- a/test_requests.py +++ b/test_requests.py @@ -554,7 +554,9 @@ class RequestsTestCase(unittest.TestCase): ) def test_uppercase_scheme_redirect(self): - r = requests.get(httpbin('redirect-to'), params={'url': 'HTTP://example.com/'}) + parts = urlparse(httpbin('html')) + url = "HTTP://" + parts.netloc + parts.path + r = requests.get(httpbin('redirect-to'), params={'url': url}) self.assertEqual(r.status_code, 200) def test_transport_adapter_ordering(self): From 82c9aa912efde203080ab33e93725e41d3f28604 Mon Sep 17 00:00:00 2001 From: David Pursehouse Date: Wed, 24 Jul 2013 17:37:35 +0900 Subject: [PATCH 5/5] Check the response URL in `test_uppercase_scheme_redirect` Update the test to check that the URL in the response is the one that we expect, i.e. the one it was supposed to redirect to. --- test_requests.py | 1 + 1 file changed, 1 insertion(+) diff --git a/test_requests.py b/test_requests.py index 0dae1e29..7e3ef56a 100755 --- a/test_requests.py +++ b/test_requests.py @@ -558,6 +558,7 @@ class RequestsTestCase(unittest.TestCase): url = "HTTP://" + parts.netloc + parts.path r = requests.get(httpbin('redirect-to'), params={'url': url}) self.assertEqual(r.status_code, 200) + self.assertEqual(r.url.lower(), url.lower()) def test_transport_adapter_ordering(self): s = requests.Session()