def test_path(self): cookie = Cookie('color', 'blue') assert cookie.http_return_ok(self.url) cookie = Cookie('color', 'blue', path='/') assert cookie.http_return_ok(self.url) cookie = Cookie('color', 'blue', path='/one') assert cookie.http_return_ok(self.url) cookie = Cookie('color', 'blue', path='/oneX') with pytest.raises(Cookie.URLMismatch): assert cookie.http_return_ok(self.url)
def test_path(self): cookie = Cookie('color', 'blue') self.assertTrue(cookie.http_return_ok(self.url)) cookie = Cookie('color', 'blue', path='/') self.assertTrue(cookie.http_return_ok(self.url)) cookie = Cookie('color', 'blue', path='/one') self.assertTrue(cookie.http_return_ok(self.url)) cookie = Cookie('color', 'blue', path='/oneX') with self.assertRaises(Cookie.URLMismatch): self.assertTrue(cookie.http_return_ok(self.url))
def test_expires(self): now = datetime.datetime.utcnow().replace(microsecond=0) # expires 1 day from now expires = now + datetime.timedelta(days=1) cookie = Cookie('color', 'blue', expires=expires) assert cookie.http_return_ok(self.url) # expired 1 day ago expires = now + datetime.timedelta(days=-1) cookie = Cookie('color', 'blue', expires=expires) with pytest.raises(Cookie.Expired): assert cookie.http_return_ok(self.url)
def test_httponly(self): cookie = Cookie('color', 'blue', httponly=True) self.assertTrue(cookie.http_return_ok('http://example.com')) self.assertTrue(cookie.http_return_ok('https://example.com')) with self.assertRaises(Cookie.URLMismatch): self.assertTrue(cookie.http_return_ok('ftp://example.com'))
def test_httponly(self): cookie = Cookie('color', 'blue', httponly=True) assert cookie.http_return_ok('http://example.com') assert cookie.http_return_ok('https://example.com') with pytest.raises(Cookie.URLMismatch): assert cookie.http_return_ok('ftp://example.com')
def generate_cookie(self, url_path, session_id, expiration=None, add_header=False): ''' Return a session cookie containing the session id. The cookie will be contrainted to the url path, defined for use with HTTP only, and only returned on secure connections (SSL). :parameters: url_path The cookie will be returned in a request if it begins with this url path. session_id The session id identified by the session cookie add_header If true format cookie string with Set-Cookie: header :returns: cookie string ''' if not expiration: # Catch zero unix timestamps expiration = None; cookie = Cookie(self.session_cookie_name, session_id, domain=urlparse.urlparse(api.env.xmlrpc_uri).netloc, path=url_path, httponly=True, secure=True, expires=expiration) if add_header: result = 'Set-Cookie: %s' % cookie else: result = str(cookie) return result
def test_invalid(self): # Invalid Max-Age s = 'color=blue; Max-Age=over-the-hill' with pytest.raises(ValueError): Cookie.parse(s) cookie = Cookie('color', 'blue') with pytest.raises(ValueError): cookie.max_age = 'over-the-hill' # Invalid Expires s = 'color=blue; Expires=Sun, 06 Xxx 1994 08:49:37 GMT' with pytest.raises(ValueError): Cookie.parse(s) cookie = Cookie('color', 'blue') with pytest.raises(ValueError): cookie.expires = 'Sun, 06 Xxx 1994 08:49:37 GMT'
def test_normalization(self): cookie = Cookie('color', 'blue', expires=self.expires) cookie.timestamp = self.now_timestamp self.assertEqual(cookie.domain, None) self.assertEqual(cookie.path, None) url = 'http://example.COM/foo' cookie.normalize(url) self.assertEqual(cookie.domain, 'example.com') self.assertEqual(cookie.path, '/') self.assertEqual(cookie.expires, self.expires) cookie = Cookie('color', 'blue', max_age=self.max_age) cookie.timestamp = self.now_timestamp self.assertEqual(cookie.domain, None) self.assertEqual(cookie.path, None) url = 'http://example.com/foo/' cookie.normalize(url) self.assertEqual(cookie.domain, 'example.com') self.assertEqual(cookie.path, '/foo') self.assertEqual(cookie.expires, self.age_expiration) cookie = Cookie('color', 'blue') url = 'http://example.com/foo' cookie.normalize(url) self.assertEqual(cookie.domain, 'example.com') self.assertEqual(cookie.path, '/') cookie = Cookie('color', 'blue') url = 'http://example.com/foo/bar' cookie.normalize(url) self.assertEqual(cookie.domain, 'example.com') self.assertEqual(cookie.path, '/foo') cookie = Cookie('color', 'blue') url = 'http://example.com/foo/bar/' cookie.normalize(url) self.assertEqual(cookie.domain, 'example.com') self.assertEqual(cookie.path, '/foo/bar')
def test_normalization(self): cookie = Cookie('color', 'blue', expires=self.expires) cookie.timestamp = self.now_timestamp assert cookie.domain is None assert cookie.path is None url = 'http://example.COM/foo' cookie.normalize(url) assert cookie.domain == 'example.com' assert cookie.path == '/' assert cookie.expires == self.expires cookie = Cookie('color', 'blue', max_age=self.max_age) cookie.timestamp = self.now_timestamp assert cookie.domain is None assert cookie.path is None url = 'http://example.com/foo/' cookie.normalize(url) assert cookie.domain == 'example.com' assert cookie.path == '/foo' assert cookie.expires == self.age_expiration cookie = Cookie('color', 'blue') url = 'http://example.com/foo' cookie.normalize(url) assert cookie.domain == 'example.com' assert cookie.path == '/' cookie = Cookie('color', 'blue') url = 'http://example.com/foo/bar' cookie.normalize(url) assert cookie.domain == 'example.com' assert cookie.path == '/foo' cookie = Cookie('color', 'blue') url = 'http://example.com/foo/bar/' cookie.normalize(url) assert cookie.domain == 'example.com' assert cookie.path == '/foo/bar'
def test_attributes(self): cookie = Cookie('color', 'blue') self.assertEqual(cookie.key, 'color') self.assertEqual(cookie.value, 'blue') self.assertEqual(cookie.domain, None) self.assertEqual(cookie.path, None) self.assertEqual(cookie.max_age, None) self.assertEqual(cookie.expires, None) self.assertEqual(cookie.secure, None) self.assertEqual(cookie.httponly, None) cookie.domain = 'example.com' self.assertEqual(cookie.domain, 'example.com') cookie.domain = None self.assertEqual(cookie.domain, None) cookie.path = '/toplevel' self.assertEqual(cookie.path, '/toplevel') cookie.path = None self.assertEqual(cookie.path, None) cookie.max_age = 400 self.assertEqual(cookie.max_age, 400) cookie.max_age = None self.assertEqual(cookie.max_age, None) cookie.expires = 'Sun, 06 Nov 1994 08:49:37 GMT' self.assertEqual(cookie.expires, datetime.datetime(1994, 11, 6, 8, 49, 37)) cookie.expires = None self.assertEqual(cookie.expires, None) cookie.secure = True self.assertEqual(cookie.secure, True) self.assertEqual(str(cookie), "color=blue; Secure") cookie.secure = False self.assertEqual(cookie.secure, False) self.assertEqual(str(cookie), "color=blue") cookie.secure = None self.assertEqual(cookie.secure, None) self.assertEqual(str(cookie), "color=blue") cookie.httponly = True self.assertEqual(cookie.httponly, True) self.assertEqual(str(cookie), "color=blue; HttpOnly") cookie.httponly = False self.assertEqual(cookie.httponly, False) self.assertEqual(str(cookie), "color=blue") cookie.httponly = None self.assertEqual(cookie.httponly, None) self.assertEqual(str(cookie), "color=blue")
def test_attributes(self): cookie = Cookie('color', 'blue') assert cookie.key == 'color' assert cookie.value == 'blue' assert cookie.domain is None assert cookie.path is None assert cookie.max_age is None assert cookie.expires is None assert cookie.secure is None assert cookie.httponly is None cookie.domain = 'example.com' assert cookie.domain == 'example.com' cookie.domain = None assert cookie.domain is None cookie.path = '/toplevel' assert cookie.path == '/toplevel' cookie.path = None assert cookie.path is None cookie.max_age = 400 assert cookie.max_age == 400 cookie.max_age = None assert cookie.max_age is None cookie.expires = 'Sun, 06 Nov 1994 08:49:37 GMT' assert cookie.expires == datetime.datetime( 1994, 11, 6, 8, 49, 37, tzinfo=datetime.timezone.utc) cookie.expires = None assert cookie.expires is None cookie.secure = True assert cookie.secure is True assert str(cookie) == "color=blue; Secure" cookie.secure = False assert cookie.secure is False assert str(cookie) == "color=blue" cookie.secure = None assert cookie.secure is None assert str(cookie) == "color=blue" cookie.httponly = True assert cookie.httponly is True assert str(cookie) == "color=blue; HttpOnly" cookie.httponly = False assert cookie.httponly is False assert str(cookie) == "color=blue" cookie.httponly = None assert cookie.httponly is None assert str(cookie) == "color=blue"
def test_domain(self): cookie = Cookie('color', 'blue', domain='www.foo.bar.com') assert cookie.http_return_ok(self.url) cookie = Cookie('color', 'blue', domain='.foo.bar.com') assert cookie.http_return_ok(self.url) cookie = Cookie('color', 'blue', domain='.bar.com') assert cookie.http_return_ok(self.url) cookie = Cookie('color', 'blue', domain='bar.com') with pytest.raises(Cookie.URLMismatch): assert cookie.http_return_ok(self.url) cookie = Cookie('color', 'blue', domain='bogus.com') with pytest.raises(Cookie.URLMismatch): assert cookie.http_return_ok(self.url) cookie = Cookie('color', 'blue', domain='www.foo.bar.com') with pytest.raises(Cookie.URLMismatch): assert cookie.http_return_ok('http://192.168.1.1/one/two')
def test_secure(self): cookie = Cookie('color', 'blue', secure=True) assert cookie.http_return_ok('https://Xexample.com') with pytest.raises(Cookie.URLMismatch): assert cookie.http_return_ok('http://Xexample.com')
def test_expires(self): # 1 cookie with name/value and no Max-Age and no Expires s = 'color=blue;' cookies = Cookie.parse(s) self.assertEqual(len(cookies), 1) cookie = cookies[0] # Force timestamp to known value cookie.timestamp = self.now self.assertEqual(cookie.key, 'color') self.assertEqual(cookie.value, 'blue') self.assertEqual(cookie.domain, None) self.assertEqual(cookie.path, None) self.assertEqual(cookie.max_age, None) self.assertEqual(cookie.expires, None) self.assertEqual(cookie.secure, None) self.assertEqual(cookie.httponly, None) self.assertEqual(str(cookie), "color=blue") self.assertEqual(cookie.get_expiration(), None) # Normalize self.assertEqual(cookie.normalize_expiration(), None) self.assertEqual(cookie.max_age, None) self.assertEqual(cookie.expires, None) self.assertEqual(str(cookie), "color=blue") # 1 cookie with name/value and Max-Age s = 'color=blue; max-age=%d' % (self.max_age) cookies = Cookie.parse(s) self.assertEqual(len(cookies), 1) cookie = cookies[0] # Force timestamp to known value cookie.timestamp = self.now self.assertEqual(cookie.key, 'color') self.assertEqual(cookie.value, 'blue') self.assertEqual(cookie.domain, None) self.assertEqual(cookie.path, None) self.assertEqual(cookie.max_age, self.max_age) self.assertEqual(cookie.expires, None) self.assertEqual(cookie.secure, None) self.assertEqual(cookie.httponly, None) self.assertEqual(str(cookie), "color=blue; Max-Age=%d" % (self.max_age)) self.assertEqual(cookie.get_expiration(), self.age_expiration) # Normalize self.assertEqual(cookie.normalize_expiration(), self.age_expiration) self.assertEqual(cookie.max_age, None) self.assertEqual(cookie.expires, self.age_expiration) self.assertEqual(str(cookie), "color=blue; Expires=%s" % (self.age_string)) # 1 cookie with name/value and Expires s = 'color=blue; Expires=%s' % (self.expires_string) cookies = Cookie.parse(s) self.assertEqual(len(cookies), 1) cookie = cookies[0] # Force timestamp to known value cookie.timestamp = self.now self.assertEqual(cookie.key, 'color') self.assertEqual(cookie.value, 'blue') self.assertEqual(cookie.domain, None) self.assertEqual(cookie.path, None) self.assertEqual(cookie.max_age, None) self.assertEqual(cookie.expires, self.expires) self.assertEqual(cookie.secure, None) self.assertEqual(cookie.httponly, None) self.assertEqual(str(cookie), "color=blue; Expires=%s" % (self.expires_string)) self.assertEqual(cookie.get_expiration(), self.expires) # Normalize self.assertEqual(cookie.normalize_expiration(), self.expires) self.assertEqual(cookie.max_age, None) self.assertEqual(cookie.expires, self.expires) self.assertEqual(str(cookie), "color=blue; Expires=%s" % (self.expires_string)) # 1 cookie with name/value witht both Max-Age and Expires, Max-Age takes precedence s = 'color=blue; Expires=%s; max-age=%d' % (self.expires_string, self.max_age) cookies = Cookie.parse(s) self.assertEqual(len(cookies), 1) cookie = cookies[0] # Force timestamp to known value cookie.timestamp = self.now self.assertEqual(cookie.key, 'color') self.assertEqual(cookie.value, 'blue') self.assertEqual(cookie.domain, None) self.assertEqual(cookie.path, None) self.assertEqual(cookie.max_age, self.max_age) self.assertEqual(cookie.expires, self.expires) self.assertEqual(cookie.secure, None) self.assertEqual(cookie.httponly, None) self.assertEqual(str(cookie), "color=blue; Max-Age=%d; Expires=%s" % (self.max_age, self.expires_string)) self.assertEqual(cookie.get_expiration(), self.age_expiration) # Normalize self.assertEqual(cookie.normalize_expiration(), self.age_expiration) self.assertEqual(cookie.max_age, None) self.assertEqual(cookie.expires, self.age_expiration) self.assertEqual(str(cookie), "color=blue; Expires=%s" % (self.age_string)) # Verify different types can be assigned to the timestamp and # expires attribute. cookie = Cookie('color', 'blue') cookie.timestamp = self.now self.assertEqual(cookie.timestamp, self.now) cookie.timestamp = self.now_timestamp self.assertEqual(cookie.timestamp, self.now) cookie.timestamp = self.now_string self.assertEqual(cookie.timestamp, self.now) self.assertEqual(cookie.expires, None) cookie.expires = self.expires self.assertEqual(cookie.expires, self.expires) cookie.expires = self.expires_timestamp self.assertEqual(cookie.expires, self.expires) cookie.expires = self.expires_string self.assertEqual(cookie.expires, self.expires)
def test_secure(self): cookie = Cookie('color', 'blue', secure=True) self.assertTrue(cookie.http_return_ok('https://Xexample.com')) with self.assertRaises(Cookie.URLMismatch): self.assertTrue(cookie.http_return_ok('http://Xexample.com'))
def test_expires(self): # 1 cookie with name/value and no Max-Age and no Expires s = 'color=blue;' cookies = Cookie.parse(s) assert len(cookies) == 1 cookie = cookies[0] # Force timestamp to known value cookie.timestamp = self.now assert cookie.key == 'color' assert cookie.value == 'blue' assert cookie.domain is None assert cookie.path is None assert cookie.max_age is None assert cookie.expires is None assert cookie.secure is None assert cookie.httponly is None assert str(cookie) == "color=blue" assert cookie.get_expiration() is None # Normalize assert cookie.normalize_expiration() is None assert cookie.max_age is None assert cookie.expires is None assert str(cookie) == "color=blue" # 1 cookie with name/value and Max-Age s = 'color=blue; max-age=%d' % (self.max_age) cookies = Cookie.parse(s) assert len(cookies) == 1 cookie = cookies[0] # Force timestamp to known value cookie.timestamp = self.now assert cookie.key == 'color' assert cookie.value == 'blue' assert cookie.domain is None assert cookie.path is None assert cookie.max_age == self.max_age assert cookie.expires is None assert cookie.secure is None assert cookie.httponly is None assert str(cookie) == "color=blue; Max-Age=%d" % (self.max_age) assert cookie.get_expiration() == self.age_expiration # Normalize assert cookie.normalize_expiration() == self.age_expiration assert cookie.max_age is None assert cookie.expires == self.age_expiration assert str(cookie) == "color=blue; Expires=%s" % (self.age_string) # 1 cookie with name/value and Expires s = 'color=blue; Expires=%s' % (self.expires_string) cookies = Cookie.parse(s) assert len(cookies) == 1 cookie = cookies[0] # Force timestamp to known value cookie.timestamp = self.now assert cookie.key == 'color' assert cookie.value == 'blue' assert cookie.domain is None assert cookie.path is None assert cookie.max_age is None assert cookie.expires == self.expires assert cookie.secure is None assert cookie.httponly is None assert str(cookie) == "color=blue; Expires=%s" % (self.expires_string) assert cookie.get_expiration() == self.expires # Normalize assert cookie.normalize_expiration() == self.expires assert cookie.max_age is None assert cookie.expires == self.expires assert str(cookie) == "color=blue; Expires=%s" % (self.expires_string) # 1 cookie with name/value witht both Max-Age and Expires, Max-Age takes precedence s = 'color=blue; Expires=%s; max-age=%d' % (self.expires_string, self.max_age) cookies = Cookie.parse(s) assert len(cookies) == 1 cookie = cookies[0] # Force timestamp to known value cookie.timestamp = self.now assert cookie.key == 'color' assert cookie.value == 'blue' assert cookie.domain is None assert cookie.path is None assert cookie.max_age == self.max_age assert cookie.expires == self.expires assert cookie.secure is None assert cookie.httponly is None expected = "color=blue; Max-Age={}; Expires={}".format( self.max_age, self.expires_string) assert str(cookie) == expected assert cookie.get_expiration() == self.age_expiration # Normalize assert cookie.normalize_expiration() == self.age_expiration assert cookie.max_age is None assert cookie.expires == self.age_expiration assert str(cookie) == "color=blue; Expires=%s" % (self.age_string) # Verify different types can be assigned to the timestamp and # expires attribute. cookie = Cookie('color', 'blue') cookie.timestamp = self.now assert cookie.timestamp == self.now cookie.timestamp = self.now_timestamp assert cookie.timestamp == self.now cookie.timestamp = self.now_string assert cookie.timestamp == self.now assert cookie.expires is None cookie.expires = self.expires assert cookie.expires == self.expires cookie.expires = self.expires_timestamp assert cookie.expires == self.expires cookie.expires = self.expires_string assert cookie.expires == self.expires
def test_no_attributes(self): cookie = Cookie('color', 'blue') assert cookie.http_return_ok(self.url)