Files
micropython/tests/extmod/ssl_noleak.py
Angus Gratton 195bf05115 tests: Add a test for SSL socket memory leaks.
Test is for an issue reported on the micropython-lib Discord as
effecting the rp2 port umqtt.simple interface when reconnecting with TLS,
however it's a more generic problem.

Currently this test fails on RPI_PICO_W and ESP32_GENERIC_C3 (and no doubt
others). Fixes are in the subsequent commits.

This work was funded through GitHub Sponsors.

Signed-off-by: Angus Gratton <angus@redyak.com.au>
2025-02-03 15:02:02 +11:00

51 lines
1.1 KiB
Python

# Ensure that SSLSockets can be allocated sequentially
# without running out of available memory.
try:
import io
import tls
except ImportError:
print("SKIP")
raise SystemExit
import unittest
class TestSocket(io.IOBase):
def write(self, buf):
return len(buf)
def readinto(self, buf):
return 0
def ioctl(self, cmd, arg):
return 0
def setblocking(self, value):
pass
ITERS = 128
class TLSNoLeaks(unittest.TestCase):
def test_unique_context(self):
for n in range(ITERS):
print(n)
s = TestSocket()
ctx = tls.SSLContext(tls.PROTOCOL_TLS_CLIENT)
ctx.verify_mode = tls.CERT_NONE
s = ctx.wrap_socket(s, do_handshake_on_connect=False)
def test_shared_context(self):
# Single SSLContext, multiple sockets
ctx = tls.SSLContext(tls.PROTOCOL_TLS_CLIENT)
ctx.verify_mode = tls.CERT_NONE
for n in range(ITERS):
print(n)
s = TestSocket()
s = ctx.wrap_socket(s, do_handshake_on_connect=False)
if __name__ == "__main__":
unittest.main()