Tests for persistent and secure cookies

This commit is contained in:
Shivaram Lingamneni
2012-05-03 22:21:17 -07:00
parent 1adaba3865
commit 8fedec785a
2 changed files with 44 additions and 2 deletions
+41
View File
@@ -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."""
+3 -2
View File
@@ -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."""