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:
@@ -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]))
|
||||||
|
|
||||||
|
@@ -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), '')
|
||||||
|
@@ -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()
|
||||||
|
Reference in New Issue
Block a user