[Twisted-Python] Help with trial test failure
beenje at gmail.com
Mon Aug 5 03:09:56 MDT 2013
On Sun, Aug 4, 2013 at 7:55 PM, Itamar Turner-Trauring
<itamar at itamarst.org>wrote:
> On 08/04/2013 10:25 AM, Benjamin BERTRAND wrote:
>> I'm trying to write a simple gateway to receive messages using a specific
>> protocol and publish/store them using txredis.
>> I wrote a small example that seems to work.
>> But the small test I wrote fails:
>> $ trial gateway/test
>> test_messageReceived ...
>> Traceback (most recent call last):
>> Failure: twisted.internet.error.**ConnectionDone: Connection was closed
>> Ran 1 tests in 0.007s
>> As I understand, the connection to the redis server is lost during the
>> I actually managed to get the test to pass by adding some inlineCallbacks
>> decorator to my messageReceived and lineReceived methods.
>> But I don't really understand why that would be needed.
>> Could someone explain what is happening?
>> I suspect the inlineCallbacks is irrelevant (and not the way to solve
> At a guess, what is happening is that something is logging the connection
> being lost (perhaps the redis library?). Logging errors in a unit test
> makes trial consider that test to have failed: logging an error suggests
> something has gone wrong. You can tell trial to expect a specific error to
> be logged in your test: https://twistedmatrix.com/**
I think I understand what is happening.
In my publish method, I call the redis publish and zadd methods.
My test checks the message received by the subscriber and closes the
connection just after. I don't wait for the deferred return by the zadd
method to fire (and get an error).
That's why the inlineCallbacks solves the problem. When I yield on
the self.server.dataReceived, I wait for the deferred in the publish
methods to fire and everything is clean when I close the connection.
Is there another way to do that?
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Twisted-Python