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: | 
