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>
This commit is contained in:
Angus Gratton 2024-10-15 12:23:28 +11:00 committed by Damien George
parent bfb1bee6fe
commit 195bf05115

View file

@ -0,0 +1,50 @@
# 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()