[Twisted-Python] What deferred can I use to detect when a server or client is "running"

Jean-Paul Calderone exarkun at divmod.com
Sun Dec 17 15:32:43 MST 2006


On Sun, 17 Dec 2006 15:10:34 -0700, Brian Granger <ellisonbg.net at gmail.com> wrote:
>Hi,
>
>i am writing some tests using trial and in my setUp methods I start
>various servers and clients using listenTCP/connectTCP.  The problem I
>am having is finding a deferred that will fire when:
>
>1.  A server is actually listening.  I want to use this deferred to
>trigger clients to connect...

listenTCP complete synchronously, so you don't need to wait before
connecting to a server started this way.

>
>2.  A client has connected.  I want to return this deferred from my
>setUp method so my tests won't actually run until the client has
>connected to the server.

twisted.internet.protocol.ClientCreator.connectTCP will return a Deferred
which fires with a protocol instance after it is connected.  You can use
that, or look at its implementation to see how to do something similar
yourself.

>
>I have some hackish ways that I have been getting around this, but
>they seem a little fickle.  What is the "standard" way of doing this
>in tests?

You might also consider /not/ using real sockets in your unit tests.  It
is often easier to use a simulated transport.

twisted.protocols.loopback.loopback is going to be deprecated in Twisted
2.5, but it will be replaced with something much the same, loopbackAsync.
You can also just create twisted.test.proto_helpers.StringTransport objects
and attach them to protocols directly.  This gives you very precise control
over what you are testing.

Jean-Paul




More information about the Twisted-Python mailing list