diff options
Diffstat (limited to 'dummyserver/testcase.py')
-rw-r--r-- | dummyserver/testcase.py | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/dummyserver/testcase.py b/dummyserver/testcase.py index de6aedd..e5ae51b 100644 --- a/dummyserver/testcase.py +++ b/dummyserver/testcase.py @@ -14,6 +14,11 @@ from dummyserver.handlers import TestingApp from dummyserver.proxy import ProxyHandler +def consume_socket(sock, chunks=65536): + while not sock.recv(chunks).endswith(b'\r\n\r\n'): + pass + + class SocketDummyServerTestCase(unittest.TestCase): """ A simple socket-based server is created for this class that is good for @@ -35,6 +40,32 @@ class SocketDummyServerTestCase(unittest.TestCase): cls.port = cls.server_thread.port @classmethod + def start_response_handler(cls, response, num=1, block_send=None): + ready_event = threading.Event() + def socket_handler(listener): + for _ in range(num): + ready_event.set() + ready_event.clear() + + sock = listener.accept()[0] + consume_socket(sock) + if block_send: + block_send.wait() + block_send.clear() + sock.send(response) + sock.close() + + cls._start_server(socket_handler) + return ready_event + + @classmethod + def start_basic_handler(cls, **kw): + return cls.start_response_handler( + b'HTTP/1.1 200 OK\r\n' + b'Content-Length: 0\r\n' + b'\r\n', **kw) + + @classmethod def tearDownClass(cls): if hasattr(cls, 'server_thread'): cls.server_thread.join(0.1) |