On 26 November 2017 at 05:36, Glyph <gl...@twistedmatrix.com> wrote:
>
>> On Nov 25, 2017, at 8:52 PM, Adi Roiban <a...@roiban.ro> wrote:
>>
>> Do you see anything suspicious with this code?
>
> Just that it looks like it leaves a Deferred in an error state. You said the 
> tests weren’t “written using” trial, but are you running them with trial, or 
> with any runner that will consider a logged failure to be a failure? If so, 
> the failure won’t be logged until the garbage collector runs, which might be 
> in a later test.

Many thanks for looking into that.

I dag deeper and I found the error.

The root cause is
twisted.internet.posixbase._DisconnectSelectableMixin._disconnectSelectable

It starts as:

    def _disconnectSelectable(self, selectable, why, isRead, faildict={
        error.ConnectionDone: failure.Failure(error.ConnectionDone()),
        error.ConnectionLost: failure.Failure(error.ConnectionLost())
        }):
        """
        Utility function for disconnecting a selectable.

        Supports half-close notification, isRead should be boolean indicating
        whether error resulted from doRead().
        """
        self.removeReader(selectable)
        f = faildict.get(why.__class__)

Then `f` is returned but in STMP we have:

f.value = smtp.SMTPConnectError( -1, "Unable to connect to server.")

This replaces the value for `faildict` via f.
Any future call will return that replaced error.

I have created a ticket for this

https://twistedmatrix.com/trac/ticket/9339

I guess that we can continue the discussion on how to fix it as part
of that ticket.

----------

Here is my answer to Glyph's question regarding unhandled failed deferred.

The tests are not inheriting from the Trial test case.

I can run them with trial, including with --force-gc and no leftover
deferred is detected.
The SMTP test is [OK].

If I reverse the order, so that the STMP tests is executed last, trial
will execute all tests without any error.


Thanks!
-- 
Adi Roiban

_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to