diff options
| author | Kali Kaneko <kali@leap.se> | 2015-03-02 15:00:12 -0400 | 
|---|---|---|
| committer | Kali Kaneko <kali@leap.se> | 2015-03-03 14:30:18 -0400 | 
| commit | a3976983d40dc4e84ef98b30275ec3fb844b462e (patch) | |
| tree | 64f56aa891ff86312d729f81768031121878a499 /mail | |
| parent | da63b59cf49a3578f069095b83921ae8901787d3 (diff) | |
[bug] Fix testExpunge tests
this test was failing randomly because we were returning the deferred
before all the documents were saved into soledad store.
changed also the delete_msg deferred chaining for better readability.
Releases: 0.9.0
Diffstat (limited to 'mail')
| -rw-r--r-- | mail/src/leap/mail/imap/mailbox.py | 29 | ||||
| -rw-r--r-- | mail/src/leap/mail/imap/tests/test_imap.py | 10 | ||||
| -rw-r--r-- | mail/src/leap/mail/mail.py | 9 | 
3 files changed, 31 insertions, 17 deletions
| diff --git a/mail/src/leap/mail/imap/mailbox.py b/mail/src/leap/mail/imap/mailbox.py index 91c6549..61baca5 100644 --- a/mail/src/leap/mail/imap/mailbox.py +++ b/mail/src/leap/mail/imap/mailbox.py @@ -307,7 +307,7 @@ class IMAPMailbox(object):          d.addCallback(as_a_dict)          return d -    def addMessage(self, message, flags, date=None): +    def addMessage(self, message, flags, date=None, notify_just_mdoc=True):          """          Adds a message to this mailbox. @@ -327,6 +327,21 @@ class IMAPMailbox(object):          # TODO have a look at the cases for internal date in the rfc          # XXX we could treat the message as an IMessage from here +        # TODO  notify_just_mdoc *sometimes* make the append tests fail. +        # have to find a better solution for this. A workaround could probably +        # be to have a list of the ongoing deferreds related to append, so that +        # we queue for later all the requests having to do with these. + +        # notify_just_mdoc=True: feels HACKY, but improves a *lot* the +        # responsiveness of the APPENDS: we just need to be notified when the +        # mdoc is saved, and let's hope that the other parts are doing just +        # fine.  This will not catch any errors when the inserts of the other +        # parts fail, but on the other hand allows us to return very quickly, +        # which seems a good compromise given that we have to serialize the +        # appends. +        # A better solution will probably involve implementing MULTIAPPEND +        # extension or patching imap server to support pipelining. +          if isinstance(message, (cStringIO.OutputType, StringIO.StringIO)):              message = message.getvalue() @@ -340,19 +355,9 @@ class IMAPMailbox(object):          if date is None:              date = formatdate(time.time()) -        # notify_just_mdoc=True: feels HACKY, but improves a *lot* the -        # responsiveness of the APPENDS: we just need to be notified when the -        # mdoc is saved, and let's hope that the other parts are doing just -        # fine.  This will not catch any errors when the inserts of the other -        # parts fail, but on the other hand allows us to return very quickly, -        # which seems a good compromise given that we have to serialize the -        # appends. -        # A better solution will probably involve implementing MULTIAPPEND -        # extension or patching imap server to support pipelining. -          # TODO add notify_new as a callback here...          return self.collection.add_msg(message, flags, date=date, -                                       notify_just_mdoc=True) +                                       notify_just_mdoc=notify_just_mdoc)      def notify_new(self, *args):          """ diff --git a/mail/src/leap/mail/imap/tests/test_imap.py b/mail/src/leap/mail/imap/tests/test_imap.py index a94cea7..c4f752b 100644 --- a/mail/src/leap/mail/imap/tests/test_imap.py +++ b/mail/src/leap/mail/imap/tests/test_imap.py @@ -882,6 +882,7 @@ class LEAPIMAP4ServerTestCase(IMAP4HelperMixin):          """          Test partially appending a message to the mailbox          """ +        # TODO this test sometimes will fail because of the notify_just_mdoc          infile = util.sibpath(__file__, 'rfc822.message')          acc = self.server.theAccount @@ -990,11 +991,14 @@ class LEAPIMAP4ServerTestCase(IMAP4HelperMixin):          def add_messages():              d = self.mailbox.addMessage( -                'test 1', flags=('\\Deleted', 'AnotherFlag')) +                'test 1', flags=('\\Deleted', 'AnotherFlag'), +                notify_just_mdoc=False)              d.addCallback(lambda _: self.mailbox.addMessage( -                'test 2', flags=('AnotherFlag',))) +                'test 2', flags=('AnotherFlag',), +                notify_just_mdoc=False))              d.addCallback(lambda _: self.mailbox.addMessage( -                'test 3', flags=('\\Deleted',))) +                'test 3', flags=('\\Deleted',), +                notify_just_mdoc=False))              return d          def expunge(): diff --git a/mail/src/leap/mail/mail.py b/mail/src/leap/mail/mail.py index 584cc4a..ef9a0d9 100644 --- a/mail/src/leap/mail/mail.py +++ b/mail/src/leap/mail/mail.py @@ -645,8 +645,13 @@ class MessageCollection(object):              for h in hashes:                  d.append(self.mbox_indexer.delete_doc_by_hash(                           self.mbox_uuid, h)) -            return defer.gatherResults(d).addCallback( -                lambda _: uids) + +            def return_uids_when_deleted(ignored): +                return uids + +            all_deleted = defer.gatherResults(d).addCallback( +                return_uids_when_deleted) +            return all_deleted          mdocs_deleted = self.adaptor.del_all_flagged_messages(              self.store, self.mbox_uuid) | 
