Example #1
0
	def _reset(self):
		# not very random at all
		self.c = CookieInstaller(
			secureRandom=lambda nbytes: 'x' * nbytes,
			insecureName='__',
			secureName='_s')
		self.request = http.Request(DummyChannel(), None)
Example #2
0
	def test_installsCookieWithCustomExpires(self):
		self.c = CookieInstaller(
			secureRandom=lambda nbytes: 'x' * nbytes,
			insecureName='__',
			secureName='_s',
			expires='NEVER EVER')

		sess = self.c.getSet(self.request)
		self.assertEqual('x' * 16, sess)
		self.assertEqual(
			['__=%s; Expires=NEVER EVER; Path=/' % (
				base64.b64encode('x' * 16),)],
			self.request.cookies)
Example #3
0
	def test_installsCookieWithCustomDomain(self):
		self.c = CookieInstaller(
			secureRandom=lambda nbytes: 'x' * nbytes,
			insecureName='__',
			secureName='_s',
			domain='.customdomain.com')

		sess = self.c.getSet(self.request)
		self.assertEqual('x' * 16, sess)
		self.assertEqual(
			['__=%s; Expires=Sat, 08 Dec 2029 23:55:42 GMT; '
			'Domain=.customdomain.com; Path=/' % (
				base64.b64encode('x' * 16),)],
			self.request.cookies)
Example #4
0
class CookieInstallerTests(unittest.TestCase):

	def setUp(self):
		self._reset()


	def _reset(self):
		# not very random at all
		self.c = CookieInstaller(
			secureRandom=lambda nbytes: 'x' * nbytes,
			insecureName='__',
			secureName='_s')
		self.request = http.Request(DummyChannel(), None)


	def test_installsCookieOnCookielessRequest(self):
		sess = self.c.getSet(self.request)
		self.assertEqual('x' * 16, sess)
		self.assertEqual(
			['__=%s; Expires=Sat, 08 Dec 2029 23:55:42 GMT; Path=/' % (
				base64.b64encode('x' * 16),)],
			self.request.cookies)


	def test_installsSecureCookieOnCookielessRequestHTTPS(self):
		self.request.isSecure = lambda: True
		sess = self.c.getSet(self.request)
		self.assertEqual('x' * 16, sess)
		self.assertEqual(
			['_s=%s; Expires=Sat, 08 Dec 2029 23:55:42 GMT; Path=/; Secure' % (
				base64.b64encode('x' * 16),)],
			self.request.cookies)


	def test_readsAlreadyInstalledCookie(self):
		"""
		Cookie must be very valid for it to be read.
		"""
		self.request.received_cookies['__'] = base64.b64encode('x' * 16)
		sess = self.c.getSet(self.request)
		self.assertEqual('x' * 16, sess)
		self.assertEqual([], self.request.cookies)


	def test_invalidCookiesIgnored(self):
		invalids = [
			"",
			"\x00",
			base64.b64encode('z' * 15),
			base64.b64encode('z' * 17),
			# TODO: maybe support padding-free base64 in future
			base64.b64encode('z' * 16).rstrip("="),
			base64.b64encode('z' * 16) + "\x00",
			base64.b64encode('z' * 16) + ";",
			base64.b64encode('z' * 16) + "=",
		]
		for invalid in invalids:
			self._reset()
			self.request.received_cookies['__'] = invalid
			sess = self.c.getSet(self.request)
			self.assertEqual('x' * 16, sess)
			self.assertEqual(
				['__=%s; Expires=Sat, 08 Dec 2029 23:55:42 GMT; Path=/' % (
					base64.b64encode('x' * 16),)],
				self.request.cookies)


	def test_installsCookieWithCustomDomain(self):
		self.c = CookieInstaller(
			secureRandom=lambda nbytes: 'x' * nbytes,
			insecureName='__',
			secureName='_s',
			domain='.customdomain.com')

		sess = self.c.getSet(self.request)
		self.assertEqual('x' * 16, sess)
		self.assertEqual(
			['__=%s; Expires=Sat, 08 Dec 2029 23:55:42 GMT; '
			'Domain=.customdomain.com; Path=/' % (
				base64.b64encode('x' * 16),)],
			self.request.cookies)


	def test_installsCookieWithCustomPath(self):
		self.c = CookieInstaller(
			secureRandom=lambda nbytes: 'x' * nbytes,
			insecureName='__',
			secureName='_s',
			path='/what')

		sess = self.c.getSet(self.request)
		self.assertEqual('x' * 16, sess)
		self.assertEqual(
			['__=%s; Expires=Sat, 08 Dec 2029 23:55:42 GMT; '
			'Path=/what' % (
				base64.b64encode('x' * 16),)],
			self.request.cookies)


	def test_installsCookieWithCustomExpires(self):
		self.c = CookieInstaller(
			secureRandom=lambda nbytes: 'x' * nbytes,
			insecureName='__',
			secureName='_s',
			expires='NEVER EVER')

		sess = self.c.getSet(self.request)
		self.assertEqual('x' * 16, sess)
		self.assertEqual(
			['__=%s; Expires=NEVER EVER; Path=/' % (
				base64.b64encode('x' * 16),)],
			self.request.cookies)