diff options
-rw-r--r-- | netlib/tcp.py | 4 | ||||
-rw-r--r-- | test/data/server.crt | 14 | ||||
-rw-r--r-- | test/data/server.key | 15 | ||||
-rw-r--r-- | test/test_tcp.py | 32 |
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: |