From 2a2589738c7bcc0a318f9054562de9a62575d8cc Mon Sep 17 00:00:00 2001 From: Damien George Date: Fri, 24 Jun 2022 16:39:45 +1000 Subject: [PATCH] tests/extmod: Add heap-lock test for stream writing. Signed-off-by: Damien George --- tests/extmod/uasyncio_heaplock.py | 32 +++++++++++++++++++++++++-- tests/extmod/uasyncio_heaplock.py.exp | 3 +++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/tests/extmod/uasyncio_heaplock.py b/tests/extmod/uasyncio_heaplock.py index 34a51cd370..a6b4a0819c 100644 --- a/tests/extmod/uasyncio_heaplock.py +++ b/tests/extmod/uasyncio_heaplock.py @@ -1,4 +1,8 @@ -# test that basic scheduling of tasks, and uasyncio.sleep_ms, does not use the heap +# test that the following do not use the heap: +# - basic scheduling of tasks +# - uasyncio.sleep_ms +# - StreamWriter.write, stream is blocked and data to write is a bytes object +# - StreamWriter.write, when stream is not blocked import micropython @@ -22,6 +26,17 @@ except ImportError: raise SystemExit +class TestStream: + def __init__(self, blocked): + self.blocked = blocked + + def write(self, data): + print("TestStream.write", data) + if self.blocked: + return None + return len(data) + + async def task(id, n, t): for i in range(n): print(id, i) @@ -32,14 +47,27 @@ async def main(): t1 = asyncio.create_task(task(1, 4, 100)) t2 = asyncio.create_task(task(2, 2, 250)) + # test scheduling tasks, and calling sleep_ms micropython.heap_lock() - print("start") await asyncio.sleep_ms(5) print("sleep") await asyncio.sleep_ms(350) print("finish") + micropython.heap_unlock() + # test writing to a stream, when the underlying stream is blocked + s = asyncio.StreamWriter(TestStream(True), None) + micropython.heap_lock() + s.write(b"12") + micropython.heap_unlock() + + # test writing to a stream, when the underlying stream is not blocked + buf = bytearray(b"56") + s = asyncio.StreamWriter(TestStream(False), None) + micropython.heap_lock() + s.write(b"34") + s.write(buf) micropython.heap_unlock() diff --git a/tests/extmod/uasyncio_heaplock.py.exp b/tests/extmod/uasyncio_heaplock.py.exp index 68c6366c6f..5c7b4e3dba 100644 --- a/tests/extmod/uasyncio_heaplock.py.exp +++ b/tests/extmod/uasyncio_heaplock.py.exp @@ -7,3 +7,6 @@ sleep 2 1 1 3 finish +TestStream.write b'12' +TestStream.write b'34' +TestStream.write bytearray(b'56')