From 4caa27ae0ec92af59ddacf57dd7fd43fcdd64c69 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Wed, 21 Jun 2017 01:58:36 +0300 Subject: [PATCH] tests/net_inet/test_tls_sites.py: Integration test for SSL connections. This attempts to bootstrap network tests for MicroPython. This commits sets test/net_inet/ as place for tests which require access to wide Internet. They aren't intended to be run as part of the main testsuite, instead to be run manually on demand. test_tls_sites.py in particular check that it's possible to establish SSL/TLS connection to select sites on the Internet: few references ones, plus those for which problems were reported, and resolved. --- tests/net_inet/README | 5 +++ tests/net_inet/test_tls_sites.py | 56 ++++++++++++++++++++++++++++ tests/net_inet/test_tls_sites.py.exp | 4 ++ 3 files changed, 65 insertions(+) create mode 100644 tests/net_inet/README create mode 100644 tests/net_inet/test_tls_sites.py create mode 100644 tests/net_inet/test_tls_sites.py.exp diff --git a/tests/net_inet/README b/tests/net_inet/README new file mode 100644 index 0000000000..cdd49259aa --- /dev/null +++ b/tests/net_inet/README @@ -0,0 +1,5 @@ +This direcctory contains network tests which require Internet connection. +Note that these tests are not run as part of the main testsuite and need +to be run seperately (from the main test/ directory): + + ./run-tests net_inet/*.py diff --git a/tests/net_inet/test_tls_sites.py b/tests/net_inet/test_tls_sites.py new file mode 100644 index 0000000000..67345fd0b9 --- /dev/null +++ b/tests/net_inet/test_tls_sites.py @@ -0,0 +1,56 @@ +try: + import usocket as _socket +except: + import _socket +try: + import ussl as ssl +except: + import ssl + + +def test_one(site, opts): + ai = _socket.getaddrinfo(site, 443) + addr = ai[0][-1] + + s = _socket.socket() + + try: + s.connect(addr) + + if "sni" in opts: + s = ssl.wrap_socket(s, server_hostname=opts["host"]) + else: + s = ssl.wrap_socket(s) + + s.write(b"GET / HTTP/1.0\r\n\r\n") + resp = s.read(4096) +# print(resp) + + finally: + s.close() + + +SITES = [ + "google.com", + "www.google.com", + "api.telegram.org", +# "w9rybpfril.execute-api.ap-southeast-2.amazonaws.com", + {"host": "w9rybpfril.execute-api.ap-southeast-2.amazonaws.com", "sni": True}, +] + + +def main(): + for site in SITES: + opts = {} + if isinstance(site, dict): + opts = site + site = opts["host"] + + try: + test_one(site, opts) + print(site, "ok") + except Exception as e: + print(site, repr(e)) + + +main() diff --git a/tests/net_inet/test_tls_sites.py.exp b/tests/net_inet/test_tls_sites.py.exp new file mode 100644 index 0000000000..12732d1fa5 --- /dev/null +++ b/tests/net_inet/test_tls_sites.py.exp @@ -0,0 +1,4 @@ +google.com ok +www.google.com ok +api.telegram.org ok +w9rybpfril.execute-api.ap-southeast-2.amazonaws.com ok