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:
parent
bfb1bee6fe
commit
195bf05115
1 changed files with 50 additions and 0 deletions
50
tests/extmod/ssl_noleak.py
Normal file
50
tests/extmod/ssl_noleak.py
Normal 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()
|
||||
Loading…
Reference in a new issue