Skip to content

Commit 91b4636

Browse files
committed
Fix tests for 2.6 support
1 parent d4c437e commit 91b4636

File tree

1 file changed

+122
-58
lines changed

1 file changed

+122
-58
lines changed

tests/test_jwt.py

Lines changed: 122 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,23 @@ def test_encode_decode(self):
2525
secret = 'secret'
2626
jwt_message = jwt.encode(self.payload, secret)
2727
decoded_payload = jwt.decode(jwt_message, secret)
28+
2829
self.assertEqual(decoded_payload, self.payload)
2930

3031
def test_encode_bad_type(self):
3132

3233
types = ['string', tuple(), list(), 42, set()]
3334

3435
for t in types:
35-
with self.assertRaises(TypeError):
36-
jwt.encode(t, 'secret')
36+
self.assertRaises(TypeError, lambda: jwt.encode(t, 'secret'))
3737

3838
def test_encode_expiration_datetime(self):
3939
secret = "secret"
4040
current_datetime = datetime.utcnow()
4141
payload = {"exp": current_datetime}
4242
jwt_message = jwt.encode(payload, secret)
4343
decoded_payload = jwt.decode(jwt_message, secret, leeway=1)
44+
4445
self.assertEqual(
4546
decoded_payload['exp'],
4647
timegm(current_datetime.utctimetuple()))
@@ -49,8 +50,10 @@ def test_bad_secret(self):
4950
right_secret = 'foo'
5051
bad_secret = 'bar'
5152
jwt_message = jwt.encode(self.payload, right_secret)
52-
with self.assertRaises(jwt.DecodeError):
53-
jwt.decode(jwt_message, bad_secret)
53+
54+
self.assertRaises(
55+
jwt.DecodeError,
56+
lambda: jwt.decode(jwt_message, bad_secret))
5457

5558
def test_decodes_valid_jwt(self):
5659
example_payload = {"hello": "world"}
@@ -60,6 +63,7 @@ def test_decodes_valid_jwt(self):
6063
b".eyJoZWxsbyI6ICJ3b3JsZCJ9"
6164
b".tvagLDLoaiJKxOKqpBXSEGy7SYSifZhjntgm9ctpyj8")
6265
decoded_payload = jwt.decode(example_jwt, example_secret)
66+
6367
self.assertEqual(decoded_payload, example_payload)
6468

6569
def test_load_verify_valid_jwt(self):
@@ -69,36 +73,45 @@ def test_load_verify_valid_jwt(self):
6973
b"eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9"
7074
b".eyJoZWxsbyI6ICJ3b3JsZCJ9"
7175
b".tvagLDLoaiJKxOKqpBXSEGy7SYSifZhjntgm9ctpyj8")
72-
decoded_payload, signing_input, header, signature = jwt.load(example_jwt)
73-
jwt.verify_signature(decoded_payload, signing_input, header, signature, example_secret)
76+
77+
decoded_payload, signing, header, signature = jwt.load(example_jwt)
78+
79+
jwt.verify_signature(decoded_payload, signing, header,
80+
signature, example_secret)
81+
7482
self.assertEqual(decoded_payload, example_payload)
7583

7684
def test_allow_skip_verification(self):
7785
right_secret = 'foo'
7886
jwt_message = jwt.encode(self.payload, right_secret)
7987
decoded_payload = jwt.decode(jwt_message, verify=False)
88+
8089
self.assertEqual(decoded_payload, self.payload)
8190

8291
def test_load_no_verification(self):
8392
right_secret = 'foo'
8493
jwt_message = jwt.encode(self.payload, right_secret)
85-
decoded_payload, signing_input, header, signature = jwt.load(jwt_message)
94+
decoded_payload, signing, header, signature = jwt.load(jwt_message)
95+
8696
self.assertEqual(decoded_payload, self.payload)
8797

8898
def test_no_secret(self):
8999
right_secret = 'foo'
90100
jwt_message = jwt.encode(self.payload, right_secret)
91101

92-
with self.assertRaises(jwt.DecodeError):
93-
jwt.decode(jwt_message)
102+
self.assertRaises(
103+
jwt.DecodeError,
104+
lambda: jwt.decode(jwt_message))
94105

95106
def test_verify_signature_no_secret(self):
96107
right_secret = 'foo'
97108
jwt_message = jwt.encode(self.payload, right_secret)
98-
decoded_payload, signing_input, header, signature = jwt.load(jwt_message)
109+
decoded_payload, signing, header, signature = jwt.load(jwt_message)
99110

100-
with self.assertRaises(jwt.DecodeError):
101-
jwt.verify_signature(decoded_payload, signing_input, header, signature)
111+
self.assertRaises(
112+
jwt.DecodeError,
113+
lambda: jwt.verify_signature(decoded_payload, signing,
114+
header, signature))
102115

103116
def test_invalid_crypto_alg(self):
104117
self.assertRaises(NotImplementedError, jwt.encode, self.payload,
@@ -109,21 +122,29 @@ def test_unicode_secret(self):
109122
jwt_message = jwt.encode(self.payload, secret)
110123

111124
decoded_payload = jwt.decode(jwt_message, secret)
125+
112126
self.assertEqual(decoded_payload, self.payload)
113127

114-
decoded_payload, signing_input, header, signature = jwt.load(jwt_message)
115-
jwt.verify_signature(decoded_payload, signing_input, header, signature, secret)
128+
decoded_payload, signing, header, signature = jwt.load(jwt_message)
129+
130+
jwt.verify_signature(decoded_payload, signing, header,
131+
signature, secret)
132+
116133
self.assertEqual(decoded_payload, self.payload)
117134

118135
def test_nonascii_secret(self):
119136
secret = '\xc2' # char value that ascii codec cannot decode
120137
jwt_message = jwt.encode(self.payload, secret)
121138

122139
decoded_payload = jwt.decode(jwt_message, secret)
140+
123141
self.assertEqual(decoded_payload, self.payload)
124142

125-
decoded_payload, signing_input, header, signature = jwt.load(jwt_message)
126-
jwt.verify_signature(decoded_payload, signing_input, header, signature, secret)
143+
decoded_payload, signing, header, signature = jwt.load(jwt_message)
144+
145+
jwt.verify_signature(decoded_payload, signing,
146+
header, signature, secret)
147+
127148
self.assertEqual(decoded_payload, self.payload)
128149

129150
def test_decode_unicode_value(self):
@@ -134,8 +155,9 @@ def test_decode_unicode_value(self):
134155
".eyJoZWxsbyI6ICJ3b3JsZCJ9"
135156
".tvagLDLoaiJKxOKqpBXSEGy7SYSifZhjntgm9ctpyj8")
136157
decoded_payload = jwt.decode(example_jwt, example_secret)
158+
137159
self.assertEqual(decoded_payload, example_payload)
138-
decoded_payload, signing_input, header, signature = jwt.load(example_jwt)
160+
decoded_payload, signing, header, signature = jwt.load(example_jwt)
139161
self.assertEqual(decoded_payload, example_payload)
140162

141163
def test_decode_invalid_header_padding(self):
@@ -144,68 +166,102 @@ def test_decode_invalid_header_padding(self):
144166
".eyJoZWxsbyI6ICJ3b3JsZCJ9"
145167
".tvagLDLoaiJKxOKqpBXSEGy7SYSifZhjntgm9ctpyj8")
146168
example_secret = "secret"
147-
with self.assertRaises(jwt.DecodeError):
148-
jwt.load(example_jwt)
149-
with self.assertRaises(jwt.DecodeError):
150-
jwt.decode(example_jwt, example_secret)
169+
170+
self.assertRaises(
171+
jwt.DecodeError,
172+
lambda: jwt.load(example_jwt))
173+
174+
self.assertRaises(
175+
jwt.DecodeError,
176+
lambda: jwt.decode(example_jwt, example_secret))
151177

152178
def test_decode_invalid_header_string(self):
153179
example_jwt = (
154180
"eyJhbGciOiAiSFMyNTbpIiwgInR5cCI6ICJKV1QifQ=="
155181
".eyJoZWxsbyI6ICJ3b3JsZCJ9"
156182
".tvagLDLoaiJKxOKqpBXSEGy7SYSifZhjntgm9ctpyj8")
157183
example_secret = "secret"
158-
with self.assertRaisesRegexp(jwt.DecodeError, "Invalid header string"):
184+
185+
try:
159186
jwt.load(example_jwt)
160-
with self.assertRaisesRegexp(jwt.DecodeError, "Invalid header string"):
187+
except jwt.DecodeError as e:
188+
self.assertTrue('Invalid header string' in str(e))
189+
else:
190+
self.fail('DecodeError not raised')
191+
192+
try:
161193
jwt.decode(example_jwt, example_secret)
194+
except jwt.DecodeError as e:
195+
self.assertTrue('Invalid header string' in str(e))
196+
else:
197+
self.fail('DecodeError not raised')
162198

163199
def test_decode_invalid_payload_padding(self):
164200
example_jwt = (
165201
"eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9"
166202
".aeyJoZWxsbyI6ICJ3b3JsZCJ9"
167203
".tvagLDLoaiJKxOKqpBXSEGy7SYSifZhjntgm9ctpyj8")
168204
example_secret = "secret"
169-
with self.assertRaises(jwt.DecodeError):
170-
jwt.load(example_jwt)
171-
with self.assertRaises(jwt.DecodeError):
172-
jwt.decode(example_jwt, example_secret)
205+
206+
self.assertRaises(
207+
jwt.DecodeError,
208+
lambda: jwt.load(example_jwt))
209+
210+
self.assertRaises(
211+
jwt.DecodeError,
212+
lambda: jwt.decode(example_jwt, example_secret))
173213

174214
def test_decode_invalid_payload_string(self):
175215
example_jwt = (
176216
"eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9"
177217
".eyJoZWxsb-kiOiAid29ybGQifQ=="
178218
".tvagLDLoaiJKxOKqpBXSEGy7SYSifZhjntgm9ctpyj8")
179219
example_secret = "secret"
180-
with self.assertRaisesRegexp(jwt.DecodeError,
181-
"Invalid payload string"):
220+
221+
try:
182222
jwt.load(example_jwt)
183-
with self.assertRaisesRegexp(jwt.DecodeError,
184-
"Invalid payload string"):
223+
except jwt.DecodeError as e:
224+
self.assertTrue('Invalid payload string' in str(e))
225+
else:
226+
self.fail('DecodeError not raised')
227+
228+
try:
185229
jwt.decode(example_jwt, example_secret)
230+
except jwt.DecodeError as e:
231+
self.assertTrue('Invalid payload string' in str(e))
232+
else:
233+
self.fail('DecodeError not raised')
186234

187235
def test_decode_invalid_crypto_padding(self):
188236
example_jwt = (
189237
"eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9"
190238
".eyJoZWxsbyI6ICJ3b3JsZCJ9"
191239
".aatvagLDLoaiJKxOKqpBXSEGy7SYSifZhjntgm9ctpyj8")
192240
example_secret = "secret"
193-
with self.assertRaises(jwt.DecodeError):
194-
jwt.load(example_jwt)
195-
with self.assertRaises(jwt.DecodeError):
196-
jwt.decode(example_jwt, example_secret)
241+
242+
self.assertRaises(
243+
jwt.DecodeError,
244+
lambda: jwt.load(example_jwt))
245+
246+
self.assertRaises(
247+
jwt.DecodeError,
248+
lambda: jwt.decode(example_jwt, example_secret))
197249

198250
def test_decode_with_expiration(self):
199251
self.payload['exp'] = utc_timestamp() - 1
200252
secret = 'secret'
201253
jwt_message = jwt.encode(self.payload, secret)
202254

203-
with self.assertRaises(jwt.ExpiredSignature):
204-
jwt.decode(jwt_message, secret)
255+
self.assertRaises(
256+
jwt.ExpiredSignature,
257+
lambda: jwt.decode(jwt_message, secret))
258+
259+
decoded_payload, signing, header, signature = jwt.load(jwt_message)
205260

206-
decoded_payload, signing_input, header, signature = jwt.load(jwt_message)
207-
with self.assertRaises(jwt.ExpiredSignature):
208-
jwt.verify_signature(decoded_payload, signing_input, header, signature, secret)
261+
self.assertRaises(
262+
jwt.ExpiredSignature,
263+
lambda: jwt.verify_signature(
264+
decoded_payload, signing, header, signature, secret))
209265

210266
def test_decode_skip_expiration_verification(self):
211267
self.payload['exp'] = time.time() - 1
@@ -214,37 +270,43 @@ def test_decode_skip_expiration_verification(self):
214270

215271
jwt.decode(jwt_message, secret, verify_expiration=False)
216272

217-
decoded_payload, signing_input, header, signature = jwt.load(jwt_message)
218-
jwt.verify_signature(decoded_payload, signing_input, header, signature, secret, verify_expiration=False)
273+
decoded_payload, signing, header, signature = jwt.load(jwt_message)
274+
jwt.verify_signature(decoded_payload, signing, header,
275+
signature, secret, verify_expiration=False)
219276

220277
def test_decode_with_expiration_with_leeway(self):
221278
self.payload['exp'] = utc_timestamp() - 2
222279
secret = 'secret'
223280
jwt_message = jwt.encode(self.payload, secret)
224281

225-
decoded_payload, signing_input, header, signature = jwt.load(jwt_message)
282+
decoded_payload, signing, header, signature = jwt.load(jwt_message)
226283

227284
# With 3 seconds leeway, should be ok
228285
jwt.decode(jwt_message, secret, leeway=3)
229286

230-
jwt.verify_signature(decoded_payload, signing_input, header, signature, secret, leeway=3)
287+
jwt.verify_signature(decoded_payload, signing, header,
288+
signature, secret, leeway=3)
231289

232-
# With 1 second, should fail
233-
with self.assertRaises(jwt.ExpiredSignature):
234-
jwt.decode(jwt_message, secret, leeway=1)
290+
# With 1 seconds, should fail
291+
self.assertRaises(
292+
jwt.ExpiredSignature,
293+
lambda: jwt.decode(jwt_message, secret, leeway=1))
235294

236-
with self.assertRaises(jwt.ExpiredSignature):
237-
jwt.verify_signature(decoded_payload, signing_input, header, signature, secret, leeway=1)
295+
self.assertRaises(
296+
jwt.ExpiredSignature,
297+
lambda: jwt.verify_signature(decoded_payload, signing,
298+
header, signature, secret, leeway=1))
238299

239300
def test_encode_decode_with_rsa_sha256(self):
240301
try:
241302
from Crypto.PublicKey import RSA
242303

243-
with open('tests/testkey','r') as rsa_priv_file:
304+
with open('tests/testkey', 'r') as rsa_priv_file:
244305
priv_rsakey = RSA.importKey(rsa_priv_file.read())
245-
jwt_message = jwt.encode(self.payload, priv_rsakey, algorithm='RS256')
306+
jwt_message = jwt.encode(self.payload, priv_rsakey,
307+
algorithm='RS256')
246308

247-
with open('tests/testkey.pub','r') as rsa_pub_file:
309+
with open('tests/testkey.pub', 'r') as rsa_pub_file:
248310
pub_rsakey = RSA.importKey(rsa_pub_file.read())
249311
assert jwt.decode(jwt_message, pub_rsakey)
250312

@@ -257,11 +319,12 @@ def test_encode_decode_with_rsa_sha384(self):
257319
try:
258320
from Crypto.PublicKey import RSA
259321

260-
with open('tests/testkey','r') as rsa_priv_file:
322+
with open('tests/testkey', 'r') as rsa_priv_file:
261323
priv_rsakey = RSA.importKey(rsa_priv_file.read())
262-
jwt_message = jwt.encode(self.payload, priv_rsakey, algorithm='RS384')
324+
jwt_message = jwt.encode(self.payload, priv_rsakey,
325+
algorithm='RS384')
263326

264-
with open('tests/testkey.pub','r') as rsa_pub_file:
327+
with open('tests/testkey.pub', 'r') as rsa_pub_file:
265328
pub_rsakey = RSA.importKey(rsa_pub_file.read())
266329
assert jwt.decode(jwt_message, pub_rsakey)
267330

@@ -274,11 +337,12 @@ def test_encode_decode_with_rsa_sha512(self):
274337
try:
275338
from Crypto.PublicKey import RSA
276339

277-
with open('tests/testkey','r') as rsa_priv_file:
340+
with open('tests/testkey', 'r') as rsa_priv_file:
278341
priv_rsakey = RSA.importKey(rsa_priv_file.read())
279-
jwt_message = jwt.encode(self.payload, priv_rsakey, algorithm='RS512')
342+
jwt_message = jwt.encode(self.payload, priv_rsakey,
343+
algorithm='RS512')
280344

281-
with open('tests/testkey.pub','r') as rsa_pub_file:
345+
with open('tests/testkey.pub', 'r') as rsa_pub_file:
282346
pub_rsakey = RSA.importKey(rsa_pub_file.read())
283347
assert jwt.decode(jwt_message, pub_rsakey)
284348

0 commit comments

Comments
 (0)