diff options
author | Victor Shyba <victor1984@riseup.net> | 2017-12-31 21:16:04 -0300 |
---|---|---|
committer | Victor Shyba <victor1984@riseup.net> | 2017-12-31 21:17:34 -0300 |
commit | 2fbf74283d94b946c0d4cdd837aa1a80e2546ebb (patch) | |
tree | a0074223cc7226e68dd35e94082a82a9f0733e02 /tests/blobs | |
parent | 50a863e58c3075bf6206d060d41b35790fe5e955 (diff) |
[tests] add a test for incomplete downloaded blob
Diffstat (limited to 'tests/blobs')
-rw-r--r-- | tests/blobs/test_decrypter_buffer.py | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/tests/blobs/test_decrypter_buffer.py b/tests/blobs/test_decrypter_buffer.py index f6e03946..db8ca5fa 100644 --- a/tests/blobs/test_decrypter_buffer.py +++ b/tests/blobs/test_decrypter_buffer.py @@ -28,6 +28,7 @@ from leap.soledad.client._db.blobs import DecrypterBuffer from leap.soledad.client._db.blobs import BlobManager from leap.soledad.client._db.blobs import FIXED_REV from leap.soledad.client._db.blobs.errors import RetriableTransferError +from leap.soledad.client._crypto import InvalidBlob from leap.soledad.client import _crypto @@ -73,13 +74,25 @@ class DecrypterBufferCase(unittest.TestCase): yield manager._encrypt_and_upload(self.doc_info.doc_id, fd) @defer.inlineCallbacks - def test_incomplete_decryption(self): + def test_incomplete_preamble_decryption(self): # SCENARIO: Transport failed and close was called with incomplete data # CASE 1: Incomplete preamble + # OUTCOME: Raise an error which can trigger a retry on crash recovery encrypted = (yield self.blob.encrypt()).getvalue() encrypted = encrypted[:20] # only 20 bytes of preamble arrived tag = encrypted[-16:] buf = DecrypterBuffer(self.doc_info.doc_id, self.secret, tag) buf.write(encrypted) - self.assertRaises(RetriableTransferError, - buf.close) + self.assertRaises(RetriableTransferError, buf.close) + + @defer.inlineCallbacks + def test_incomplete_blob_decryption(self): + # SCENARIO: Transport failed and close was called with incomplete data + # CASE 1: Incomplete blob of known encryption type + # OUTCOME: InvalidBlob. It's safer to assume the tag is invalid + encrypted = (yield self.blob.encrypt()).getvalue() + encrypted = encrypted[:-20] # 20 bytes missing + tag = encrypted[-16:] + buf = DecrypterBuffer(self.doc_info.doc_id, self.secret, tag) + buf.write(encrypted) + self.assertRaises(InvalidBlob, buf.close) |