aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--netlib/tcp.py4
-rw-r--r--test/data/server.crt14
-rw-r--r--test/data/server.key15
-rw-r--r--test/test_tcp.py32
4 files changed, 54 insertions, 11 deletions
diff --git a/netlib/tcp.py b/netlib/tcp.py
index 5a942522..007cf3a5 100644
--- a/netlib/tcp.py
+++ b/netlib/tcp.py
@@ -48,8 +48,8 @@ class FileLike:
class TCPClient:
- def __init__(self, ssl, host, port, clientcert):
- self.ssl, self.host, self.port, self.clientcert = ssl, host, port, clientcert
+ def __init__(self, ssl, host, port, clientcert, sni):
+ self.ssl, self.host, self.port, self.clientcert, self.sni = ssl, host, port, clientcert, sni
self.connection, self.rfile, self.wfile = None, None, None
self.cert = None
self.connect()
diff --git a/test/data/server.crt b/test/data/server.crt
new file mode 100644
index 00000000..68f61bac
--- /dev/null
+++ b/test/data/server.crt
@@ -0,0 +1,14 @@
+-----BEGIN CERTIFICATE-----
+MIICOzCCAaQCCQDC7f5GsEpo9jANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQGEwJO
+WjEOMAwGA1UECBMFT3RhZ28xEDAOBgNVBAcTB0R1bmVkaW4xDzANBgNVBAoTBm5l
+dGxpYjEPMA0GA1UECxMGbmV0bGliMQ8wDQYDVQQDEwZuZXRsaWIwHhcNMTIwNjI0
+MjI0MTU0WhcNMjIwNjIyMjI0MTU0WjBiMQswCQYDVQQGEwJOWjEOMAwGA1UECBMF
+T3RhZ28xEDAOBgNVBAcTB0R1bmVkaW4xDzANBgNVBAoTBm5ldGxpYjEPMA0GA1UE
+CxMGbmV0bGliMQ8wDQYDVQQDEwZuZXRsaWIwgZ8wDQYJKoZIhvcNAQEBBQADgY0A
+MIGJAoGBALJSVEl9y3QUSYuXTH0UjBOPQgS0nHmNWej9hjqnA0KWvEnGY+c6yQeP
+/rmwswlKw1iVV5o8kRK9Wej88YWQl/hl/xruyeJgGic0+yqY/FcueZxRudwBcWu2
+7+46aEftwLLRF0GwHZxX/HwWME+TcCXGpXGSG2qs921M4iVeBn5hAgMBAAEwDQYJ
+KoZIhvcNAQEFBQADgYEAODZCihEv2yr8zmmQZDrfqg2ChxAoOXWF5+W2F/0LAUBf
+2bHP+K4XE6BJWmadX1xKngj7SWrhmmTDp1gBAvXURoDaScOkB1iOCOHoIyalscTR
+0FvSHKqFF8fgSlfqS6eYaSbXU3zQolvwP+URzIVnGDqgQCWPtjMqLD3Kd5tuwos=
+-----END CERTIFICATE-----
diff --git a/test/data/server.key b/test/data/server.key
new file mode 100644
index 00000000..b1b658ab
--- /dev/null
+++ b/test/data/server.key
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQCyUlRJfct0FEmLl0x9FIwTj0IEtJx5jVno/YY6pwNClrxJxmPn
+OskHj/65sLMJSsNYlVeaPJESvVno/PGFkJf4Zf8a7sniYBonNPsqmPxXLnmcUbnc
+AXFrtu/uOmhH7cCy0RdBsB2cV/x8FjBPk3AlxqVxkhtqrPdtTOIlXgZ+YQIDAQAB
+AoGAQEpGcSiVTYhy64zk2sOprPOdTa0ALSK1I7cjycmk90D5KXAJXLho+f0ETVZT
+dioqO6m8J7NmamcyHznyqcDzyNRqD2hEBDGVRJWmpOjIER/JwWLNNbpeVjsMHV8I
+40P5rZMOhBPYlwECSC5NtMwaN472fyGNNze8u37IZKiER/ECQQDe1iY5AG3CgkP3
+tEZB3Vtzcn4PoOr3Utyn1YER34lPqAmeAsWUhmAVEfR3N1HDe1VFD9s2BidhBn1a
+/Bgqxz4DAkEAzNw0m+uO0WkD7aEYRBW7SbXCX+3xsbVToIWC1jXFG+XDzSWn++c1
+DMXEElzEJxPDA+FzQUvRTml4P92bTAbGywJAS9H7wWtm7Ubbj33UZfbGdhqfz/uF
+109naufXedhgZS0c0JnK1oV+Tc0FLEczV9swIUaK5O/lGDtYDcw3AN84NwJBAIw5
+/1jrOOtm8uVp6+5O4dBmthJsEZEPCZtLSG/Qhoe+EvUN3Zq0fL+tb7USAsKs6ERz
+wizj9PWzhDhTPMYhrVkCQGIponZHx6VqiFyLgYUH9+gDTjBhYyI+6yMTYzcRweyL
+9Suc2NkS3X2Lp+wCjvVZdwGtStp6Vo8z02b3giIsAIY=
+-----END RSA PRIVATE KEY-----
diff --git a/test/test_tcp.py b/test/test_tcp.py
index d7d4483e..9aebb2f0 100644
--- a/test/test_tcp.py
+++ b/test/test_tcp.py
@@ -27,6 +27,11 @@ class ServerTestBase:
class THandler(tcp.BaseHandler):
def handle(self):
+ if self.server.ssl:
+ self.convert_to_ssl(
+ tutils.test_data.path("data/server.crt"),
+ tutils.test_data.path("data/server.key"),
+ )
v = self.rfile.readline()
if v.startswith("echo"):
self.wfile.write(v)
@@ -36,9 +41,9 @@ class THandler(tcp.BaseHandler):
class TServer(tcp.TCPServer):
- def __init__(self, addr, q):
+ def __init__(self, addr, ssl, q):
tcp.TCPServer.__init__(self, addr)
- self.q = q
+ self.ssl, self.q = ssl, q
def handle_connection(self, request, client_address):
THandler(request, client_address, self)
@@ -53,28 +58,37 @@ class TestServer(ServerTestBase):
@classmethod
def makeserver(cls):
cls.q = Queue.Queue()
- s = TServer(("127.0.0.1", 0), cls.q)
+ s = TServer(("127.0.0.1", 0), False, cls.q)
cls.port = s.port
return s
def test_echo(self):
testval = "echo!\n"
- c = tcp.TCPClient(False, "127.0.0.1", self.port, None)
+ c = tcp.TCPClient(False, "127.0.0.1", self.port, None, None)
c.wfile.write(testval)
c.wfile.flush()
assert c.rfile.readline() == testval
- def test_error(self):
- testval = "error!\n"
- c = tcp.TCPClient(False, "127.0.0.1", self.port, None)
+
+class TestServerSSL(ServerTestBase):
+ @classmethod
+ def makeserver(cls):
+ cls.q = Queue.Queue()
+ s = TServer(("127.0.0.1", 0), True, cls.q)
+ cls.port = s.port
+ return s
+
+ def test_echo(self):
+ c = tcp.TCPClient(True, "127.0.0.1", self.port, None, None)
+ testval = "echo!\n"
c.wfile.write(testval)
c.wfile.flush()
- assert "Testing an error" in self.q.get()
+ assert c.rfile.readline() == testval
class TestTCPClient:
def test_conerr(self):
- tutils.raises(tcp.NetLibError, tcp.TCPClient, False, "127.0.0.1", 0, None)
+ tutils.raises(tcp.NetLibError, tcp.TCPClient, False, "127.0.0.1", 0, None, None)
class TestFileLike: