summaryrefslogtreecommitdiff
path: root/tests/net_inet/tls_text_errors.py
diff options
context:
space:
mode:
authorThorsten von Eicken <tve@voneicken.com>2020-03-26 23:17:35 -0700
committerDamien George <damien@micropython.org>2020-07-20 23:41:45 +1000
commit9aa214077e6d1e0fba1a775431fedea4c8d76558 (patch)
treed04efd64de63ed54a32b53392125bebf2f394672 /tests/net_inet/tls_text_errors.py
parentc7f7c0214c433d52204fe73613bd6162507a0482 (diff)
extmod/modussl: Improve exception error messages.
This commit adds human readable error messages when mbedtls or axtls raise an exception. Currently often just an EIO error is raised so the user is lost and can't tell whether it's a cert error, buffer overrun, connecting to a non-ssl port, etc. The axtls and mbedtls error raising in the ussl module is modified to raise: OSError(-err_num, "error string") For axtls a small error table of strings is added and used for the second argument of the OSErrer. For mbedtls the code uses mbedtls' built-in strerror function, and if there is an out of memory condition it just produces OSError(-err_num). Producing the error string for mbedtls is conditional on them being included in the mbedtls build, via MBEDTLS_ERROR_C.
Diffstat (limited to 'tests/net_inet/tls_text_errors.py')
-rw-r--r--tests/net_inet/tls_text_errors.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/net_inet/tls_text_errors.py b/tests/net_inet/tls_text_errors.py
new file mode 100644
index 000000000..2ba167b86
--- /dev/null
+++ b/tests/net_inet/tls_text_errors.py
@@ -0,0 +1,33 @@
+# test that modtls produces a text error message
+
+try:
+ import usocket as socket, ussl as ssl, sys
+except:
+ import socket, ssl, sys
+
+
+def test(addr):
+ s = socket.socket()
+ s.connect(addr)
+ try:
+ s = ssl.wrap_socket(s)
+ print("wrap: no exception")
+ except OSError as e:
+ # mbedtls produces "mbedtls -0x7200: SSL - An invalid SSL record was received"
+ # axtls produces "RECORD_OVERFLOW"
+ # CPython produces "[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1108)"
+ ok = (
+ "invalid SSL record" in str(e)
+ or "RECORD_OVERFLOW" in str(e)
+ or "wrong version" in str(e)
+ )
+ print("wrap:", ok)
+ if not ok:
+ print("got exception:", e)
+ s.close()
+
+
+if __name__ == "__main__":
+ # connect to plain HTTP port, oops!
+ addr = socket.getaddrinfo("micropython.org", 80)[0][-1]
+ test(addr)