Changed some tests that hardcoded the port to not do so, added some docs on how to avoid doing that in the future.

This commit is contained in:
Ryan Williams
2009-10-01 14:48:25 -07:00
parent a517967e41
commit afb0df9b25
3 changed files with 23 additions and 12 deletions

View File

@@ -57,3 +57,16 @@ If you wish to run tests against a particular Twisted reactor, use ``--reactor=R
* poll
* selects
* libevent (requires pyevent)
Writing Tests
-------------
What follows are some notes on writing tests, in no particular order.
The filename convention when writing a test for module `foo` is to name the test `foo_test.py`. We don't yet have a convention for tests that are of finer granularity, but a sensible one might be `foo_class_test.py`.
If you are writing a test that involves a client connecting to a spawned server, it is best to not use a hardcoded port because that makes it harder to parallelize tests. Instead bind the server to 0, and then look up its port when connecting the client, like this::
server_sock = api.tcp_listener(('127.0.0.1', 0))
client_sock = api.connect_tcp(('localhost', server_sock.getsockname()[1]))

View File

@@ -257,10 +257,10 @@ class SSLTest(LimitedTestCase):
stuff = sock.read(8192)
sock.write('response')
sock = api.ssl_listener(('', 4201), self.certificate_file, self.private_key_file)
sock = api.ssl_listener(('127.0.0.1', 0), self.certificate_file, self.private_key_file)
server_coro = coros.execute(serve, sock)
client = util.wrap_ssl(api.connect_tcp(('localhost', 4201)))
client = util.wrap_ssl(api.connect_tcp(('127.0.0.1', sock.getsockname()[1])))
client.write('line 1\r\nline 2\r\n\r\n')
self.assertEquals(client.read(8192), 'response')
server_coro.wait()
@@ -271,11 +271,11 @@ class SSLTest(LimitedTestCase):
sock.write('content')
sock.shutdown()
sock.close()
listener = api.ssl_listener(('', 4209),
listener = api.ssl_listener(('', 0),
self.certificate_file,
self.private_key_file)
killer = api.spawn(serve, listener)
client = util.wrap_ssl(api.connect_tcp(('localhost', 4209)))
client = util.wrap_ssl(api.connect_tcp(('localhost', listener.getsockname()[1])))
client = greenio.GreenSSLObject(client)
self.assertEquals(client.read(1024), 'content')
self.assertEquals(client.read(1024), '')

View File

@@ -31,17 +31,15 @@ from eventlet.green.time import sleep
import weakref
import gc
address = ('0.0.0.0', 7878)
SOCKET_TIMEOUT = 0.1
def init_server():
s = socket.socket()
s.settimeout(SOCKET_TIMEOUT)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(address)
s.bind(('localhost', 0))
s.listen(5)
return s
return s, s.getsockname()[1]
def handle_request(s, raise_on_timeout):
try:
@@ -60,10 +58,10 @@ def handle_request(s, raise_on_timeout):
#print 'handle_request - conn refcount: %s' % sys.getrefcount(conn)
#conn.close()
def make_request():
def make_request(port):
#print 'make_request'
s = socket.socket()
s.connect(address)
s.connect(('localhost', port))
#print 'make_request - connected'
res = s.send('hello')
#print 'make_request - sent %s' % res
@@ -73,10 +71,10 @@ def make_request():
#s.close()
def run_interaction(run_client):
s = init_server()
s, port = init_server()
start_new_thread(handle_request, (s, run_client))
if run_client:
start_new_thread(make_request, ())
start_new_thread(make_request, (port,))
sleep(0.1+SOCKET_TIMEOUT)
#print sys.getrefcount(s.fd)
#s.close()