summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Shyba <victor1984@riseup.net>2017-12-31 21:16:04 -0300
committerVictor Shyba <victor1984@riseup.net>2017-12-31 21:17:34 -0300
commit2fbf74283d94b946c0d4cdd837aa1a80e2546ebb (patch)
treea0074223cc7226e68dd35e94082a82a9f0733e02
parent50a863e58c3075bf6206d060d41b35790fe5e955 (diff)
[tests] add a test for incomplete downloaded blob
-rw-r--r--tests/blobs/test_decrypter_buffer.py19
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)