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