diff options
author | Guido van Rossum <guido@dropbox.com> | 2013-11-19 19:43:38 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@dropbox.com> | 2013-11-19 19:43:38 (GMT) |
commit | 1540b16ff424fe1d6ec0a94ef83a76b3df31d0eb (patch) | |
tree | eac17c04de1ef7f4fe36028a724c2e324f1027f5 /Lib/test | |
parent | 4a9ee26750aa8cb37b5072b2bb4dd328819febb4 (diff) | |
download | cpython-1540b16ff424fe1d6ec0a94ef83a76b3df31d0eb.zip cpython-1540b16ff424fe1d6ec0a94ef83a76b3df31d0eb.tar.gz cpython-1540b16ff424fe1d6ec0a94ef83a76b3df31d0eb.tar.bz2 |
asyncio: Add streams.start_server(), by Gustavo Carneiro.
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/test_asyncio/test_streams.py | 66 |
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() |