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 * poll
* selects * selects
* libevent (requires pyevent) * 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) stuff = sock.read(8192)
sock.write('response') 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) 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') client.write('line 1\r\nline 2\r\n\r\n')
self.assertEquals(client.read(8192), 'response') self.assertEquals(client.read(8192), 'response')
server_coro.wait() server_coro.wait()
@@ -271,11 +271,11 @@ class SSLTest(LimitedTestCase):
sock.write('content') sock.write('content')
sock.shutdown() sock.shutdown()
sock.close() sock.close()
listener = api.ssl_listener(('', 4209), listener = api.ssl_listener(('', 0),
self.certificate_file, self.certificate_file,
self.private_key_file) self.private_key_file)
killer = api.spawn(serve, listener) 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) client = greenio.GreenSSLObject(client)
self.assertEquals(client.read(1024), 'content') self.assertEquals(client.read(1024), 'content')
self.assertEquals(client.read(1024), '') self.assertEquals(client.read(1024), '')

View File

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