summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_asyncio
diff options
context:
space:
mode:
authorGuido van Rossum <guido@dropbox.com>2013-11-19 19:43:38 (GMT)
committerGuido van Rossum <guido@dropbox.com>2013-11-19 19:43:38 (GMT)
commit1540b16ff424fe1d6ec0a94ef83a76b3df31d0eb (patch)
treeeac17c04de1ef7f4fe36028a724c2e324f1027f5 /Lib/test/test_asyncio
parent4a9ee26750aa8cb37b5072b2bb4dd328819febb4 (diff)
downloadcpython-1540b16ff424fe1d6ec0a94ef83a76b3df31d0eb.zip
cpython-1540b16ff424fe1d6ec0a94ef83a76b3df31d0eb.tar.gz
cpython-1540b16ff424fe1d6ec0a94ef83a76b3df31d0eb.tar.bz2
asyncio: Add streams.start_server(), by Gustavo Carneiro.
Diffstat (limited to 'Lib/test/test_asyncio')
-rw-r--r--Lib/test/test_asyncio/test_streams.py66
1 files changed, 66 insertions, 0 deletions
diff --git a/Lib/test/test_asyncio/test_streams.py b/Lib/test/test_asyncio/test_streams.py
index 69e2246..5516c15 100644
--- a/Lib/test/test_asyncio/test_streams.py
+++ b/Lib/test/test_asyncio/test_streams.py
@@ -359,6 +359,72 @@ class StreamReaderTests(unittest.TestCase):
test_utils.run_briefly(self.loop)
self.assertIs(stream._waiter, None)
+ def test_start_server(self):
+
+ class MyServer:
+
+ def __init__(self, loop):
+ self.server = None
+ self.loop = loop
+
+ @tasks.coroutine
+ def handle_client(self, client_reader, client_writer):
+ data = yield from client_reader.readline()
+ client_writer.write(data)
+
+ def start(self):
+ self.server = self.loop.run_until_complete(
+ streams.start_server(self.handle_client,
+ '127.0.0.1', 12345,
+ loop=self.loop))
+
+ def handle_client_callback(self, client_reader, client_writer):
+ task = tasks.Task(client_reader.readline(), loop=self.loop)
+
+ def done(task):
+ client_writer.write(task.result())
+
+ task.add_done_callback(done)
+
+ def start_callback(self):
+ self.server = self.loop.run_until_complete(
+ streams.start_server(self.handle_client_callback,
+ '127.0.0.1', 12345,
+ loop=self.loop))
+
+ def stop(self):
+ if self.server is not None:
+ self.server.close()
+ self.loop.run_until_complete(self.server.wait_closed())
+ self.server = None
+
+ @tasks.coroutine
+ def client():
+ reader, writer = yield from streams.open_connection(
+ '127.0.0.1', 12345, loop=self.loop)
+ # send a line
+ writer.write(b"hello world!\n")
+ # read it back
+ msgback = yield from reader.readline()
+ writer.close()
+ return msgback
+
+ # test the server variant with a coroutine as client handler
+ server = MyServer(self.loop)
+ server.start()
+ msg = self.loop.run_until_complete(tasks.Task(client(),
+ loop=self.loop))
+ server.stop()
+ self.assertEqual(msg, b"hello world!\n")
+
+ # test the server variant with a callback as client handler
+ server = MyServer(self.loop)
+ server.start_callback()
+ msg = self.loop.run_until_complete(tasks.Task(client(),
+ loop=self.loop))
+ server.stop()
+ self.assertEqual(msg, b"hello world!\n")
+
if __name__ == '__main__':
unittest.main()