summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--manual_tests/tcp_client.py34
-rw-r--r--tests/test_network.py75
2 files changed, 75 insertions, 34 deletions
diff --git a/manual_tests/tcp_client.py b/manual_tests/tcp_client.py
deleted file mode 100644
index 214c6d9..0000000
--- a/manual_tests/tcp_client.py
+++ /dev/null
@@ -1,34 +0,0 @@
-#import logging; logging.basicConfig(level=logging.DEBUG)
-import aiogreen
-try:
- import asyncio
-except ImportError:
- import trollius as asyncio
-
-class EchoClientProtocol(asyncio.Protocol):
- def __init__(self, message, loop):
- self.message = message
- self.loop = loop
-
- def connection_made(self, transport):
- transport.write(self.message.encode())
- print('Data sent: {!r}'.format(self.message))
-
- def data_received(self, data):
- print('Data received: {!r}'.format(data.decode()))
-
- def connection_lost(self, exc):
- print('The server closed the connection')
- print('Stop the event loop')
- self.loop.stop()
-
-loop = aiogreen.EventLoop()
-message = 'Hello World!'
-coro = loop.create_connection(lambda: EchoClientProtocol(message, loop),
- '127.0.0.1', 8888)
-loop.run_until_complete(coro)
-
-loop.run_forever()
-loop.close()
-
-
diff --git a/tests/test_network.py b/tests/test_network.py
new file mode 100644
index 0000000..b1e9731
--- /dev/null
+++ b/tests/test_network.py
@@ -0,0 +1,75 @@
+import eventlet
+import tests
+socket = eventlet.patcher.original('socket')
+threading = eventlet.patcher.original('threading')
+
+class TcpEchoClientProtocol(tests.asyncio.Protocol):
+ def __init__(self, message, loop):
+ self.message = message
+ self.loop = loop
+ self.state = 'new'
+ self.received = None
+
+ def connection_made(self, transport):
+ self.state = 'ping'
+ transport.write(self.message)
+
+ def data_received(self, data):
+ self.state = 'pong'
+ self.received = data
+
+ def connection_lost(self, exc):
+ self.state = 'closed'
+ self.loop.stop()
+
+
+class TcpServer(threading.Thread):
+ def __init__(self, host, port):
+ super(TcpServer, self).__init__()
+ self.host = host
+ self.port = port
+ self.sock = None
+ self.client = None
+
+ def run(self):
+ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ self.sock = sock
+ try:
+ sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+ sock.bind((self.host, self.port))
+ sock.listen(1)
+
+ client, addr = sock.accept()
+ self.client = client
+ try:
+ message = client.recv(100)
+ client.sendall(message)
+ finally:
+ client.close()
+ self.client = None
+ finally:
+ sock.close()
+ self.sock = None
+
+ def stop(self):
+ self.join()
+
+
+class NetworkTests(tests.TestCase):
+ def test_tcp_hello(self):
+ port = 8888
+ host = '127.0.0.1'
+ message = b'Hello World!'
+
+ server = TcpServer(host, port)
+ server.start()
+ self.addCleanup(server.stop)
+
+ proto = TcpEchoClientProtocol(message, self.loop)
+ coro = self.loop.create_connection(lambda: proto, host, port)
+ self.loop.run_until_complete(coro)
+ self.assertNotEqual(proto.state, 'new')
+
+ self.loop.run_forever()
+ self.assertEqual(proto.state, 'closed')
+ self.assertEqual(proto.received, message)