def test_wrong_sni_hint(self): """ Provides a wrong sni hint to validate an exception is thrown. """ self.start_destination_server() self.start_proxy_server() sock = socket.create_connection( (self.proxy_server.host, self.proxy_server.port) ) with self.client_context.wrap_socket( sock, server_hostname="localhost" ) as proxy_sock: with pytest.raises(Exception) as e: SSLTransport( proxy_sock, self.client_context, server_hostname="veryverywrong" ) # ssl.CertificateError is a child of ValueError in python3.6 or # before. After python3.7 it's a child of SSLError assert e.type in [ssl.SSLError, ssl.CertificateError]
def test_tls_in_tls_tunnel(self): """ Basic communication over the TLS in TLS tunnel. """ self.start_destination_server() self.start_proxy_server() sock = socket.create_connection( (self.proxy_server.host, self.proxy_server.port) ) with self.client_context.wrap_socket( sock, server_hostname="localhost" ) as proxy_sock: with SSLTransport( proxy_sock, self.client_context, server_hostname="localhost" ) as destination_sock: assert destination_sock.version() is not None destination_sock.send(sample_request()) response = consume_socket(destination_sock) validate_response(response)
def test_tls_in_tls_recv_into_sendall(self): """ Valides recv_into and sendall also work as expected. Other tests are using recv/send. """ self.start_destination_server() self.start_proxy_server() sock = socket.create_connection( (self.proxy_server.host, self.proxy_server.port)) with self.client_context.wrap_socket( sock, server_hostname="localhost") as proxy_sock: with SSLTransport(proxy_sock, self.client_context, server_hostname="localhost") as destination_sock: destination_sock.sendall(sample_request()) response = bytearray(65536) destination_sock.recv_into(response) str_response = response.decode("utf-8").rstrip("\x00") validate_response(str_response, binary=False)