On Sun, Aug 4, 2013 at 7:55 PM, Itamar Turner-Trauring <ita...@itamarst.org>wrote:
> On 08/04/2013 10:25 AM, Benjamin BERTRAND wrote: > >> Hi, >> >> 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 >> gateway.test.test_example >> GatewayServiceTestCase >> test_messageReceived ... >> [ERROR] >> >> ==============================**==============================** >> =================== >> [ERROR] >> Traceback (most recent call last): >> Failure: twisted.internet.error.**ConnectionDone: Connection was closed >> cleanly. >> >> gateway.test.test_example.**GatewayServiceTestCase.test_**messageReceived >> ------------------------------**------------------------------** >> ------------------- >> Ran 1 tests in 0.007s >> >> >> As I understand, the connection to the redis server is lost during the >> test. >> 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 > this). > > 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/** > documents/current/core/howto/**trial.html#auto11<https://twistedmatrix.com/documents/current/core/howto/trial.html#auto11> > > 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?
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python