-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest.py
137 lines (108 loc) · 4.53 KB
/
test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# encoding: utf-8
import unittest
from time import time
from werkzeug_encryptedcookie import EncryptedCookie, SecureEncryptedCookie
class EncryptedCookieTest(unittest.TestCase):
Cookie = EncryptedCookie
class RawCookie(Cookie):
quote_base64 = False
class NoCompressCookie(Cookie):
compress_cookie = False
# Explicit setup for tests
class CompressCookie(Cookie):
compress_cookie = True
def test_dumps_loads(self):
for case in [{'a': 'b'}, {'a': 'próba'}, {'próba': '123'}]:
r = self.Cookie.dumps(case)
self.assertIsInstance(r, bytes, case)
r = self.Cookie.loads(r)
self.assertEqual(r, case)
def test_encrypt_decrypt(self):
key = b'my little key'
for case in [b'{"a": "b"}', b'{"a": "pr\xc3\xb3ba"}']:
r1 = self.Cookie.encrypt(case, key)
r2 = self.Cookie.encrypt(case, key)
self.assertIsInstance(r1, bytes, case)
self.assertIsInstance(r2, bytes, case)
self.assertNotEqual(r1, r2, case)
r1_broken = self.Cookie.decrypt(r1, b'another key')
self.assertNotEqual(r1_broken, case)
r1 = self.Cookie.decrypt(r1, key)
r2 = self.Cookie.decrypt(r2, key)
self.assertEqual(r1, case)
self.assertEqual(r2, case)
def test_serialize_unserialize(self):
key = b'my little key'
for case in [{'a': 'b'}, {'a': 'próba'}, {'próba': '123'}]:
r = self.Cookie(case, key).serialize()
self.assertIsInstance(r, bytes, case)
# Check it is ascii
r.decode('ascii')
r = self.Cookie.unserialize(r, key)
self.assertEqual(r, case)
self.assertEqual(dict(r), case)
def test_expires(self):
key = b'my little key'
c = self.Cookie({'a': 'próba'}, key)
r = self.Cookie.unserialize(c.serialize(time() - 1), key)
self.assertFalse(dict(r))
# Make sure previous expire not stored in cookie object.
# (such bug present in original SecureCookie)
r = self.Cookie.unserialize(c.serialize(), key)
self.assertTrue(dict(r))
r = self.Cookie.unserialize(c.serialize(time() + 1), key)
self.assertTrue(dict(r))
def test_fail_with_another_key(self):
c = self.Cookie({'a': 'próba'}, 'one key')
r = self.Cookie.unserialize(c.serialize(), b'another key')
self.assertFalse(dict(r))
def test_fail_when_not_json(self):
key = b'my little key'
r = self.RawCookie.encrypt(b'{"a", "pr\xc3\xb3ba"}', key)
r = self.RawCookie.unserialize(r, key)
self.assertFalse(dict(r))
def test_fail_when_corrupted(self):
key = b'my little key'
r = self.RawCookie({"a": "próba"}, key).serialize()
r = self.RawCookie.unserialize(r[:20] + r[21:], key)
self.assertFalse(dict(r))
def test_compression_and_decompression(self):
key = b'my little key'
case = {'a': 'próba'}
no_compress = self.NoCompressCookie(case, key)
compress = self.CompressCookie(case, key)
cases = (
# No-compressed instance unserialized by no-compressed instance
(no_compress, no_compress),
# No-compress instance unserialized by compress instance
(no_compress, compress),
# Compressed instance unserialized by no-compress instance
(compress, no_compress),
# Compressed instance unserialized by compress instance
(compress, compress),
)
for cookie1, cookie2 in cases:
result = cookie2.unserialize(cookie1.serialize(), key)
self.assertDictEqual(dict(result), case)
class SecureEncryptedCookieTest(EncryptedCookieTest):
Cookie = SecureEncryptedCookie
class RawCookie(Cookie):
quote_base64 = False
class NoCompressCookie(Cookie):
compress_cookie = False
# Explicit setup for tests
class CompressCookie(Cookie):
compress_cookie = True
def test_unsigned(self):
key, case = b'my little key', b'{"a": "pr\xc3\xb3ba"}'
r = self.Cookie.encrypt(case, key)
signed = EncryptedCookie.decrypt(r, key)
self.assertIn(case, signed)
r = EncryptedCookie.encrypt(signed, key)
r = self.Cookie.decrypt(r, key)
self.assertEqual(r, case)
r = EncryptedCookie.encrypt(signed[:-1] + b'!', key)
r = self.Cookie.decrypt(r, key)
self.assertEqual(r, b'')
if __name__ == '__main__':
unittest.main()