13
13
"""Unit test suite for aws_encryption_sdk.deserialize"""
14
14
import io
15
15
import struct
16
- import unittest
17
16
18
17
import pytest
19
18
import six
@@ -56,8 +55,9 @@ def test_deserialize_tag():
56
55
assert parsed_tag == tag
57
56
58
57
59
- class TestDeserialize (unittest .TestCase ):
60
- def setUp (self ):
58
+ class TestDeserialize (object ):
59
+ @pytest .fixture (autouse = True )
60
+ def apply_fixtures (self ):
61
61
self .mock_wrapping_algorithm = MagicMock ()
62
62
self .mock_wrapping_algorithm .algorithm .iv_len = VALUES ["iv_len" ]
63
63
@@ -109,29 +109,32 @@ def test_validate_header_invalid(self):
109
109
as expected for a valid header.
110
110
"""
111
111
self .mock_decrypt .side_effect = InvalidTag ()
112
- with six . assertRaisesRegex ( self , SerializationError , "Header authorization failed" ) :
112
+ with pytest . raises ( SerializationError ) as excinfo :
113
113
aws_encryption_sdk .internal .formatting .deserialize .validate_header (
114
114
header = VALUES ["deserialized_header_block" ],
115
115
header_auth = VALUES ["deserialized_header_auth_block" ],
116
116
raw_header = VALUES ["header" ],
117
117
data_key = VALUES ["data_key_obj" ],
118
118
)
119
+ excinfo .match ("Header authorization failed" )
119
120
120
121
def test_deserialize_header_unknown_object_type (self ):
121
122
"""Validate that the deserialize_header function behaves
122
123
as expected for an unknown object type.
123
124
"""
124
- with six . assertRaisesRegex ( self , NotSupportedError , "Unsupported type *" ) :
125
+ with pytest . raises ( NotSupportedError ) as excinfo :
125
126
stream = io .BytesIO (VALUES ["serialized_header_invalid_object_type" ])
126
127
aws_encryption_sdk .internal .formatting .deserialize .deserialize_header (stream )
128
+ excinfo .match ("Unsupported type *" )
127
129
128
130
def test_deserialize_header_unknown_version (self ):
129
131
"""Validate that the deserialize_header function behaves
130
132
as expected for an unknown message version.
131
133
"""
132
- with six . assertRaisesRegex ( self , NotSupportedError , "Unsupported version *" ) :
134
+ with pytest . raises ( NotSupportedError ) as excinfo :
133
135
stream = io .BytesIO (VALUES ["serialized_header_invalid_version" ])
134
136
aws_encryption_sdk .internal .formatting .deserialize .deserialize_header (stream )
137
+ excinfo .match ("Unsupported version *" )
135
138
136
139
@patch ("aws_encryption_sdk.internal.formatting.deserialize.AlgorithmSuite.get_by_id" )
137
140
def test_deserialize_header_unsupported_data_encryption_algorithm (self , mock_algorithm_get ):
@@ -141,65 +144,70 @@ def test_deserialize_header_unsupported_data_encryption_algorithm(self, mock_alg
141
144
mock_unsupported_algorithm = MagicMock ()
142
145
mock_unsupported_algorithm .allowed = False
143
146
mock_algorithm_get .return_value = mock_unsupported_algorithm
144
- with six . assertRaisesRegex ( self , NotSupportedError , "Unsupported algorithm *" ) :
147
+ with pytest . raises ( NotSupportedError ) as excinfo :
145
148
stream = io .BytesIO (VALUES ["serialized_header_disallowed_algorithm" ])
146
149
aws_encryption_sdk .internal .formatting .deserialize .deserialize_header (stream )
150
+ excinfo .match ("Unsupported algorithm *" )
147
151
148
152
@patch ("aws_encryption_sdk.internal.formatting.deserialize.AlgorithmSuite.get_by_id" )
149
153
def test_deserialize_header_unknown_data_encryption_algorithm (self , mock_algorithm_get ):
150
154
"""Validate that the deserialize_header function behaves
151
155
as expected for an unknown algorithm.
152
156
"""
153
157
mock_algorithm_get .side_effect = KeyError ()
154
- with six . assertRaisesRegex ( self , UnknownIdentityError , "Unknown algorithm *" ) :
158
+ with pytest . raises ( UnknownIdentityError ) as excinfo :
155
159
stream = io .BytesIO (VALUES ["serialized_header_invalid_algorithm" ])
156
160
aws_encryption_sdk .internal .formatting .deserialize .deserialize_header (stream )
161
+ excinfo .match ("Unknown algorithm *" )
157
162
158
163
def test_deserialize_header_unknown_content_type (self ):
159
164
"""Validate that the deserialize_header function behaves
160
165
as expected for an unknown content type.
161
166
"""
162
- with six . assertRaisesRegex ( self , UnknownIdentityError , "Unknown content type *" ) :
167
+ with pytest . raises ( UnknownIdentityError ) as excinfo :
163
168
stream = io .BytesIO (VALUES ["serialized_header_unknown_content_type" ])
164
169
aws_encryption_sdk .internal .formatting .deserialize .deserialize_header (stream )
170
+ excinfo .match ("Unknown content type *" )
165
171
166
172
def test_deserialize_header_invalid_reserved_space (self ):
167
173
"""Validate that the deserialize_header function behaves
168
174
as expected for an invalid value in the reserved
169
175
space (formerly content AAD).
170
176
"""
171
- with six .assertRaisesRegex (
172
- self , SerializationError , "Content AAD length field is currently unused, its value must be always 0"
173
- ):
177
+ with pytest .raises (SerializationError ) as excinfo :
174
178
stream = io .BytesIO (VALUES ["serialized_header_bad_reserved_space" ])
175
179
aws_encryption_sdk .internal .formatting .deserialize .deserialize_header (stream )
180
+ excinfo .match ("Content AAD length field is currently unused, its value must be always 0" )
176
181
177
182
def test_deserialize_header_bad_iv_len (self ):
178
183
"""Validate that the deserialize_header function behaves
179
184
as expected for bad IV length (incompatible with
180
185
specified algorithm).
181
186
"""
182
- with six . assertRaisesRegex ( self , SerializationError , "Specified IV length *" ) :
187
+ with pytest . raises ( SerializationError ) as excinfo :
183
188
stream = io .BytesIO (VALUES ["serialized_header_bad_iv_len" ])
184
189
aws_encryption_sdk .internal .formatting .deserialize .deserialize_header (stream )
190
+ excinfo .match ("Specified IV length *" )
185
191
186
192
def test_deserialize_header_framed_bad_frame_length (self ):
187
193
"""Validate that the deserialize_header function behaves
188
194
as expected for bad frame length values (greater than
189
195
the default maximum).
190
196
"""
191
- with six . assertRaisesRegex ( self , SerializationError , "Specified frame length larger than allowed maximum: *" ) :
197
+ with pytest . raises ( SerializationError ) as excinfo :
192
198
stream = io .BytesIO (VALUES ["serialized_header_bad_frame_len" ])
193
199
aws_encryption_sdk .internal .formatting .deserialize .deserialize_header (stream )
200
+ excinfo .match ("Specified frame length larger than allowed maximum: *" )
194
201
195
202
def test_deserialize_header_non_framed_bad_frame_length (self ):
196
203
"""Validate that the deserialize_header function behaves
197
204
as expected for bad frame length values for non-framed
198
205
messages (non-zero).
199
206
"""
200
- with six . assertRaisesRegex ( self , SerializationError , "Non-zero frame length found for non-framed message" ) :
207
+ with pytest . raises ( SerializationError ) as excinfo :
201
208
stream = io .BytesIO (VALUES ["serialized_non_framed_header_bad_frame_len" ])
202
209
aws_encryption_sdk .internal .formatting .deserialize .deserialize_header (stream )
210
+ excinfo .match ("Non-zero frame length found for non-framed message" )
203
211
204
212
def test_deserialize_header_valid (self ):
205
213
"""Validate that the deserialize_header function behaves
@@ -247,10 +255,11 @@ def test_deserialize_body_frame_final_invalid_final_frame_length(self):
247
255
behaves as expected for a valid final body frame.
248
256
"""
249
257
stream = io .BytesIO (VALUES ["serialized_final_frame_bad_length" ])
250
- with six . assertRaisesRegex ( self , SerializationError , "Invalid final frame length: *" ) :
258
+ with pytest . raises ( SerializationError ) as excinfo :
251
259
aws_encryption_sdk .internal .formatting .deserialize .deserialize_frame (
252
260
stream = stream , header = VALUES ["deserialized_header_frame" ]
253
261
)
262
+ excinfo .match ("Invalid final frame length: *" )
254
263
255
264
def test_deserialize_footer_no_verifier (self ):
256
265
"""Vaidate that the deserialize_footer function behaves
@@ -275,8 +284,9 @@ def test_deserialize_footer_verifier_no_footer(self):
275
284
with no footer.
276
285
"""
277
286
stream = io .BytesIO (b"" )
278
- with six . assertRaisesRegex ( self , SerializationError , "No signature found in message" ) :
287
+ with pytest . raises ( SerializationError ) as excinfo :
279
288
aws_encryption_sdk .internal .formatting .deserialize .deserialize_footer (stream , self .mock_verifier )
289
+ excinfo .match ("No signature found in message" )
280
290
281
291
@patch ("aws_encryption_sdk.internal.formatting.deserialize.struct" )
282
292
def test_unpack_values (self , mock_struct ):
@@ -328,59 +338,65 @@ def test_deserialize_wrapped_key_symmetric(self):
328
338
)
329
339
330
340
def test_deserialize_wrapped_key_symmetric_wrapping_key_mismatch (self ):
331
- with six . assertRaisesRegex ( self , SerializationError , "Master Key mismatch for wrapped data key" ) :
341
+ with pytest . raises ( SerializationError ) as excinfo :
332
342
aws_encryption_sdk .internal .formatting .deserialize .deserialize_wrapped_key (
333
343
wrapping_algorithm = self .mock_wrapping_algorithm ,
334
344
wrapping_key_id = b"asifuhasjaskldjfhlsakdfj" ,
335
345
wrapped_encrypted_key = VALUES ["wrapped_keys" ]["structures" ]["wrapped_encrypted_data_key_asymmetric" ],
336
346
)
347
+ excinfo .match ("Master Key mismatch for wrapped data key" )
337
348
338
349
def test_deserialize_wrapped_key_symmetric_wrapping_algorithm_incomplete_info (self ):
339
- with six . assertRaisesRegex ( self , SerializationError , "Malformed key info: key info missing data" ) :
350
+ with pytest . raises ( SerializationError ) as excinfo :
340
351
aws_encryption_sdk .internal .formatting .deserialize .deserialize_wrapped_key (
341
352
wrapping_algorithm = self .mock_wrapping_algorithm ,
342
353
wrapping_key_id = VALUES ["wrapped_keys" ]["raw" ]["key_info" ],
343
354
wrapped_encrypted_key = VALUES ["wrapped_keys" ]["structures" ][
344
355
"wrapped_encrypted_data_key_symmetric_incomplete_info"
345
356
],
346
357
)
358
+ excinfo .match ("Malformed key info: key info missing data" )
347
359
348
360
def test_deserialize_wrapped_key_symmetric_wrapping_algorithm_iv_len_mismatch (self ):
349
- with six . assertRaisesRegex ( self , SerializationError , "Wrapping AlgorithmSuite mismatch for wrapped data key" ) :
361
+ with pytest . raises ( SerializationError ) as excinfo :
350
362
aws_encryption_sdk .internal .formatting .deserialize .deserialize_wrapped_key (
351
363
wrapping_algorithm = self .mock_wrapping_algorithm ,
352
364
wrapping_key_id = VALUES ["wrapped_keys" ]["raw" ]["key_info" ],
353
365
wrapped_encrypted_key = VALUES ["wrapped_keys" ]["structures" ][
354
366
"wrapped_encrypted_data_key_symmetric_bad_iv_len"
355
367
],
356
368
)
369
+ excinfo .match ("Wrapping AlgorithmSuite mismatch for wrapped data key" )
357
370
358
371
def test_deserialize_wrapped_key_symmetric_wrapping_algorithm_incomplete_iv (self ):
359
- with six . assertRaisesRegex ( self , SerializationError , "Malformed key info: incomplete iv" ) :
372
+ with pytest . raises ( SerializationError ) as excinfo :
360
373
aws_encryption_sdk .internal .formatting .deserialize .deserialize_wrapped_key (
361
374
wrapping_algorithm = self .mock_wrapping_algorithm ,
362
375
wrapping_key_id = VALUES ["wrapped_keys" ]["raw" ]["key_info" ],
363
376
wrapped_encrypted_key = VALUES ["wrapped_keys" ]["structures" ][
364
377
"wrapped_encrypted_data_key_symmetric_incomplete_iv"
365
378
],
366
379
)
380
+ excinfo .match ("Malformed key info: incomplete iv" )
367
381
368
382
def test_deserialize_wrapped_key_symmetric_wrapping_algorithm_incomplete_tag (self ):
369
- with six . assertRaisesRegex ( self , SerializationError , "Malformed key info: incomplete ciphertext or tag" ) :
383
+ with pytest . raises ( SerializationError ) as excinfo :
370
384
aws_encryption_sdk .internal .formatting .deserialize .deserialize_wrapped_key (
371
385
wrapping_algorithm = self .mock_wrapping_algorithm ,
372
386
wrapping_key_id = VALUES ["wrapped_keys" ]["raw" ]["key_info" ],
373
387
wrapped_encrypted_key = VALUES ["wrapped_keys" ]["structures" ][
374
388
"wrapped_encrypted_data_key_symmetric_incomplete_tag"
375
389
],
376
390
)
391
+ excinfo .match ("Malformed key info: incomplete ciphertext or tag" )
377
392
378
393
def test_deserialize_wrapped_key_symmetric_wrapping_algorithm_incomplete_tag2 (self ):
379
- with six . assertRaisesRegex ( self , SerializationError , "Malformed key info: incomplete ciphertext or tag" ) :
394
+ with pytest . raises ( SerializationError ) as excinfo :
380
395
aws_encryption_sdk .internal .formatting .deserialize .deserialize_wrapped_key (
381
396
wrapping_algorithm = self .mock_wrapping_algorithm ,
382
397
wrapping_key_id = VALUES ["wrapped_keys" ]["raw" ]["key_info" ],
383
398
wrapped_encrypted_key = VALUES ["wrapped_keys" ]["structures" ][
384
399
"wrapped_encrypted_data_key_symmetric_incomplete_tag2"
385
400
],
386
401
)
402
+ excinfo .match ("Malformed key info: incomplete ciphertext or tag" )
0 commit comments