mirror of
https://github.com/kennethreitz/requests.git
synced 2026-06-05 22:50:18 +00:00
Tests for persistent and secure cookies
This commit is contained in:
@@ -86,6 +86,22 @@ class CookieTests(TestBaseMixin, unittest.TestCase):
|
||||
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, {})
|
||||
|
||||
class LWPCookieJarTest(TestBaseMixin, unittest.TestCase):
|
||||
"""Check store/load of cookies to FileCookieJar's, specifically LWPCookieJar's."""
|
||||
|
||||
@@ -157,6 +173,31 @@ class LWPCookieJarTest(TestBaseMixin, unittest.TestCase):
|
||||
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."""
|
||||
|
||||
|
||||
@@ -56,8 +56,9 @@ class TestBaseMixin(object):
|
||||
def assertCookieHas(self, cookie, **kwargs):
|
||||
"""Assert that a cookie has various specified properties."""
|
||||
for attr, expected_value in kwargs.items():
|
||||
message = 'Failed comparison for %s' % (attr,)
|
||||
self.assertEqual(getattr(cookie, attr), expected_value, message)
|
||||
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."""
|
||||
|
||||
Reference in New Issue
Block a user