summaryrefslogtreecommitdiffstatshomepage
path: root/tests/multi_net/uasyncio_tcp_server_client.py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2020-03-10 02:59:14 +1100
committerDamien George <damien.p.george@gmail.com>2020-03-26 01:25:45 +1100
commit38904b89376bf628f7d70174204b5330618d49c0 (patch)
treea3aa131c9eb196405aba019d643d102b26954de6 /tests/multi_net/uasyncio_tcp_server_client.py
parent18fa65e47402d85c53361798046e306d2cf4bac1 (diff)
downloadmicropython-38904b89376bf628f7d70174204b5330618d49c0.tar.gz
micropython-38904b89376bf628f7d70174204b5330618d49c0.zip
tests/multi_net: Add uasyncio test for TCP server and client.
Includes a test where the (non uasyncio) client does a RST on the connection, as a simple TCP server/client test where both sides are using uasyncio, and a test for TCP stream close then write.
Diffstat (limited to 'tests/multi_net/uasyncio_tcp_server_client.py')
-rw-r--r--tests/multi_net/uasyncio_tcp_server_client.py58
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/multi_net/uasyncio_tcp_server_client.py b/tests/multi_net/uasyncio_tcp_server_client.py
new file mode 100644
index 0000000000..6a8cb58de5
--- /dev/null
+++ b/tests/multi_net/uasyncio_tcp_server_client.py
@@ -0,0 +1,58 @@
+# Test uasyncio TCP server and client using start_server() and open_connection()
+
+try:
+ import uasyncio as asyncio
+except ImportError:
+ try:
+ import asyncio
+ except ImportError:
+ print("SKIP")
+ raise SystemExit
+
+PORT = 8000
+
+
+async def handle_connection(reader, writer):
+ # Test that peername exists (but don't check its value, it changes)
+ writer.get_extra_info("peername")
+
+ data = await reader.read(100)
+ print("echo:", data)
+ writer.write(data)
+ await writer.drain()
+
+ print("close")
+ writer.close()
+ await writer.wait_closed()
+
+ print("done")
+ ev.set()
+
+
+async def tcp_server():
+ global ev
+ ev = asyncio.Event()
+ server = await asyncio.start_server(handle_connection, "0.0.0.0", PORT)
+ print("server running")
+ multitest.next()
+ async with server:
+ await asyncio.wait_for(ev.wait(), 10)
+
+
+async def tcp_client(message):
+ reader, writer = await asyncio.open_connection(IP, PORT)
+ print("write:", message)
+ writer.write(message)
+ await writer.drain()
+ data = await reader.read(100)
+ print("read:", data)
+
+
+def instance0():
+ multitest.globals(IP=multitest.get_network_ip())
+ asyncio.run(tcp_server())
+
+
+def instance1():
+ multitest.next()
+ asyncio.run(tcp_client(b"client data"))