diff options
| -rw-r--r-- | src/leap/bitmask/mail/incoming/service.py | 9 | ||||
| -rw-r--r-- | tests/integration/mail/incoming/test_incoming_mail.py | 24 | 
2 files changed, 29 insertions, 4 deletions
diff --git a/src/leap/bitmask/mail/incoming/service.py b/src/leap/bitmask/mail/incoming/service.py index 2ecd5876..e1dde02a 100644 --- a/src/leap/bitmask/mail/incoming/service.py +++ b/src/leap/bitmask/mail/incoming/service.py @@ -337,10 +337,13 @@ class IncomingMail(Service):                         "1" if success else "0")              return self._process_decrypted_doc(doc, decrdata) +        def log_doc_id_and_raise_exception(failure): +            logger.error( +                '_decrypt_doc: Error decrypting document with ID %s' % doc.doc_id) +            self._errback(failure) +          d = self._keymanager.decrypt(doc.content[ENC_JSON_KEY], self._userid) -        d.addErrback(self._errback) -        d.addErrback(lambda _: logger.error( -            '_decrypt_doc: Error decrypting document with ID %s' % doc.doc_id)) +        d.addErrback(log_doc_id_and_raise_exception)          d.addCallback(process_decrypted)          d.addCallback(lambda data: (doc, data))          return d diff --git a/tests/integration/mail/incoming/test_incoming_mail.py b/tests/integration/mail/incoming/test_incoming_mail.py index b8d69f12..daef0578 100644 --- a/tests/integration/mail/incoming/test_incoming_mail.py +++ b/tests/integration/mail/incoming/test_incoming_mail.py @@ -29,10 +29,12 @@ import uuid  from email.mime.application import MIMEApplication  from email.mime.multipart import MIMEMultipart  from email.parser import Parser -from mock import Mock +from mock import Mock, patch, MagicMock, ANY  from twisted.internet import defer  from twisted.python import log +from twisted.logger import Logger +from twisted.python.failure import Failure  from leap.bitmask.keymanager.errors import KeyAddressMismatch  from leap.bitmask.mail.adaptors import soledad_indexes as fields @@ -324,6 +326,26 @@ subject: independence of cyberspace          d.addCallback(add_decrypted_header_called)          return d +    def test_log_error_if_decrypt_fails(self): + +        def assert_failure(_): +            mock_logger_error.assert_any_call('_decrypt_doc: ' +                                              'Error decrypting document with ' +                                              'ID 1') + +        with patch.object(Logger, 'error') as mock_logger_error: +            doc = SoledadDocument() +            doc.doc_id = '1' +            doc.content = {'_enc_json': ''} + +            self.fetcher._process_decrypted_doc = Mock() +            self.km.decrypt = Mock( +                return_value=defer.fail(Exception())) + +            d = self.fetcher._decrypt_doc(doc) +            d.addCallback(assert_failure) +            return d +      def testValidateSignatureFromEncryptedEmailFromAppleMail(self):          enc_signed_file = os.path.join(              HERE, 'rfc822.multi-encrypt-signed.message')  | 
