summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/multi_net/uasyncio_tcp_client_rst.py56
-rw-r--r--tests/multi_net/uasyncio_tcp_client_rst.py.exp5
-rw-r--r--tests/multi_net/uasyncio_tcp_close_write.py69
-rw-r--r--tests/multi_net/uasyncio_tcp_close_write.py.exp10
-rw-r--r--tests/multi_net/uasyncio_tcp_server_client.py58
-rw-r--r--tests/multi_net/uasyncio_tcp_server_client.py.exp8
6 files changed, 206 insertions, 0 deletions
diff --git a/tests/multi_net/uasyncio_tcp_client_rst.py b/tests/multi_net/uasyncio_tcp_client_rst.py
new file mode 100644
index 000000000..a3a05490c
--- /dev/null
+++ b/tests/multi_net/uasyncio_tcp_client_rst.py
@@ -0,0 +1,56 @@
+# Test TCP server with client issuing TCP RST part way through read
+
+try:
+ import uasyncio as asyncio
+except ImportError:
+ try:
+ import asyncio
+ except ImportError:
+ print("SKIP")
+ raise SystemExit
+
+import struct, time, socket
+
+PORT = 8000
+
+
+async def handle_connection(reader, writer):
+ data = await reader.read(10) # should succeed
+ print(data)
+ await asyncio.sleep(0.2) # wait for client to drop connection
+ try:
+ data = await reader.read(100)
+ print(data)
+ writer.close()
+ await writer.wait_closed()
+ except OSError as er:
+ print("OSError", er.args[0])
+ ev.set()
+
+
+async def main():
+ global ev
+ ev = asyncio.Event()
+ server = await asyncio.start_server(handle_connection, "0.0.0.0", PORT)
+ multitest.next()
+ async with server:
+ await asyncio.wait_for(ev.wait(), 10)
+
+
+def instance0():
+ multitest.globals(IP=multitest.get_network_ip())
+ asyncio.run(main())
+
+
+def instance1():
+ if not hasattr(socket, "SO_LINGER"):
+ multitest.skip()
+ multitest.next()
+ s = socket.socket()
+ s.connect(socket.getaddrinfo(IP, PORT)[0][-1])
+ lgr_onoff = 1
+ lgr_linger = 0
+ s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack("ii", lgr_onoff, lgr_linger))
+ s.send(b"GET / HTTP/1.0\r\n\r\n")
+ time.sleep(0.1)
+ s.close() # This issues a TCP RST since we've set the linger option
diff --git a/tests/multi_net/uasyncio_tcp_client_rst.py.exp b/tests/multi_net/uasyncio_tcp_client_rst.py.exp
new file mode 100644
index 000000000..920d1bb8d
--- /dev/null
+++ b/tests/multi_net/uasyncio_tcp_client_rst.py.exp
@@ -0,0 +1,5 @@
+--- instance0 ---
+b'GET / HTTP'
+OSError 104
+--- instance1 ---
+
diff --git a/tests/multi_net/uasyncio_tcp_close_write.py b/tests/multi_net/uasyncio_tcp_close_write.py
new file mode 100644
index 000000000..5698ed8b1
--- /dev/null
+++ b/tests/multi_net/uasyncio_tcp_close_write.py
@@ -0,0 +1,69 @@
+# Test uasyncio TCP stream closing then writing
+
+try:
+ import uasyncio as asyncio
+except ImportError:
+ try:
+ import asyncio
+ except ImportError:
+ print("SKIP")
+ raise SystemExit
+
+PORT = 8000
+
+
+async def handle_connection(reader, writer):
+ # Write data to ensure connection
+ writer.write(b"x")
+ await writer.drain()
+
+ # Read, should return nothing
+ print("read:", await reader.read(100))
+
+ # Close connection
+ 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(), 5)
+
+
+async def tcp_client():
+ reader, writer = await asyncio.open_connection(IP, PORT)
+
+ # Read data to ensure connection
+ print("read:", await reader.read(1))
+
+ # Close connection
+ print("close")
+ writer.close()
+ await writer.wait_closed()
+
+ # Try writing data to the closed connection
+ print("write")
+ try:
+ writer.write(b"x")
+ await writer.drain()
+ except OSError:
+ print("OSError")
+
+
+def instance0():
+ multitest.globals(IP=multitest.get_network_ip())
+ asyncio.run(tcp_server())
+
+
+def instance1():
+ multitest.next()
+ asyncio.run(tcp_client())
diff --git a/tests/multi_net/uasyncio_tcp_close_write.py.exp b/tests/multi_net/uasyncio_tcp_close_write.py.exp
new file mode 100644
index 000000000..6c0f8d7ea
--- /dev/null
+++ b/tests/multi_net/uasyncio_tcp_close_write.py.exp
@@ -0,0 +1,10 @@
+--- instance0 ---
+server running
+read: b''
+close
+done
+--- instance1 ---
+read: b'x'
+close
+write
+OSError
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 000000000..6a8cb58de
--- /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"))
diff --git a/tests/multi_net/uasyncio_tcp_server_client.py.exp b/tests/multi_net/uasyncio_tcp_server_client.py.exp
new file mode 100644
index 000000000..6dc6a9bbc
--- /dev/null
+++ b/tests/multi_net/uasyncio_tcp_server_client.py.exp
@@ -0,0 +1,8 @@
+--- instance0 ---
+server running
+echo: b'client data'
+close
+done
+--- instance1 ---
+write: b'client data'
+read: b'client data'