summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorVictor Shyba <victor1984@riseup.net>2017-12-31 21:14:49 -0300
committerVictor Shyba <victor1984@riseup.net>2017-12-31 21:14:49 -0300
commit50a863e58c3075bf6206d060d41b35790fe5e955 (patch)
treea1fab7b6f5cfd538ef1a4285baf4ee826802444a /tests
parent8a89f00a4a2b9e5622ce8581ebf633ae222311df (diff)
[bug] handle incomplete preamble as a retriable error
Diffstat (limited to 'tests')
-rw-r--r--tests/blobs/test_decrypter_buffer.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/tests/blobs/test_decrypter_buffer.py b/tests/blobs/test_decrypter_buffer.py
index 83fbaad3..f6e03946 100644
--- a/tests/blobs/test_decrypter_buffer.py
+++ b/tests/blobs/test_decrypter_buffer.py
@@ -27,6 +27,7 @@ from twisted.internet import defer
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 import _crypto
@@ -70,3 +71,15 @@ class DecrypterBufferCase(unittest.TestCase):
fd = BytesIO('up and up')
manager._client.put = _check_result
yield manager._encrypt_and_upload(self.doc_info.doc_id, fd)
+
+ @defer.inlineCallbacks
+ def test_incomplete_decryption(self):
+ # SCENARIO: Transport failed and close was called with incomplete data
+ # CASE 1: Incomplete preamble
+ 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)