Skip to content

Commit

Permalink
Tests for persistent and secure cookies
Browse files Browse the repository at this point in the history
  • Loading branch information
slingamn committed May 4, 2012
1 parent 1adaba3 commit 8fedec7
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 2 deletions.
41 changes: 41 additions & 0 deletions tests/test_cookies.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,22 @@ def test_none_cookie(self):
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."""

Expand Down Expand Up @@ -157,6 +173,31 @@ def test_crossdomain(self):
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."""

Expand Down
5 changes: 3 additions & 2 deletions tests/test_requests.py
Original file line number Diff line number Diff line change
Expand Up @@ -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."""
Expand Down

0 comments on commit 8fedec7

Please sign in to comment.