def test_basic(self):
        def application(environ, start_response):
            status = "200 OK"
            headers = [("Content-type", "text/plain; charset=utf-8")]
            start_response(status, headers)
            return [b"hello world"]

        with TestServer(application) as server:
            client = HTTPConnection("localhost", server.port)

            client.request("GET", "/")
            resp = client.getresponse()
            self.assertEqual(resp.status, 200)
            self.assertEqual(resp.read(), b"hello world")

            port = server.port

        # make sure server is down after leaving context
        self.assertRaises(ConnectionRefusedError, client.request, "GET", "/")
        make_inet_socket("localhost", port).close()
    def test_basic(self):
        def application(environ, start_response):
            status = '200 OK'
            headers = [('Content-type', 'text/plain; charset=utf-8')]
            start_response(status, headers)
            return [b'hello world']

        with TestServer(application) as server:
            client = HTTPConnection('localhost', server.port)

            client.request('GET', '/')
            resp = client.getresponse()
            self.assertEqual(resp.status, 200)
            self.assertEqual(resp.read(), b'hello world')

            port = server.port

        # make sure server is down after leaving context
        self.assertRaises(ConnectionRefusedError, client.request, 'GET', '/')
        make_inet_socket('localhost', port).close()
Exemple #3
0
def make_socket(args, ssl_context=None):
    """Create a new socket using settings from command line

    :param args:
        An :module:`argparse` namespace populated with the arguments from
        :func:`add_socket_arguments`
    :param ssl_context:
        An :class:`ssl.SSLContext` instance or ``None.

    :returns:
        A new stream :class:`socket.Socket` instance.
    """
    if args.socket is not None:
        socket = verktyg_server.make_unix_socket(
            args.socket, ssl_context=ssl_context
        )

    elif args.address is not None:
        scheme = args.address.scheme
        if scheme == 'https' and not ssl_context:
            raise ValueError("ssl server requested but no details for context")

        if scheme == 'http' and ssl_context:
            raise ValueError("trying to create http server with ssl")

        if not scheme:
            scheme = 'https' if ssl_context else 'http'

        if scheme not in {'https', 'http'}:
            raise ValueError(
                "if provided scheme should be either http or https"
            )

        address = args.address.hostname

        port = args.address.port
        if not port:
            port = {
                'http': 80,
                'https': 443,
            }[scheme]

        socket = verktyg_server.make_inet_socket(
            address, port, ssl_context=ssl_context
        )

    elif args.fd is not None:
        socket = verktyg_server.make_fd_socket(args.fd)

    return socket
Exemple #4
0
    def test_yield_no_set_headers(self):
        def application(environ, start_response):
            return [b"Who needs headers"]

        socket = make_inet_socket('localhost')
        port = socket.getsockname()[1]

        server = make_server(socket, application)
        thread = Thread(target=server.serve_forever)
        thread.start()

        try:
            conn = HTTPConnection('localhost', port)
            conn.request('GET', '/')

            resp = conn.getresponse()
            self.assertEqual(resp.status, 500)
        finally:
            server.shutdown()
            thread.join()
Exemple #5
0
    def test_basic(self):
        def application(environ, start_response):
            status = '200 OK'
            headers = [('Content-type', 'text/plain; charset=utf-8')]
            start_response(status, headers)
            return [b"Hello world!"]

        socket = make_inet_socket('localhost')
        port = socket.getsockname()[1]

        server = make_server(socket, application)
        thread = Thread(target=server.serve_forever)
        thread.start()

        try:
            conn = HTTPConnection('localhost', port)
            conn.request('GET', '/')

            resp = conn.getresponse()
            self.assertEqual(resp.read(), b"Hello world!")
        finally:
            server.shutdown()
            thread.join()
Exemple #6
0
    def __init__(
                self, app, *, threaded=False,
                request_handler=None, ssl_context=None
            ):
        self._app = app
        self._threaded = threaded
        self._request_handler = request_handler
        self._ssl_context = ssl_context

        self._host = 'localhost'

        socket = make_inet_socket(self.host, 0, ssl_context=self._ssl_context)
        self._port = socket.getsockname()[1]

        self._server = make_server(
            socket, self._app,
            threaded=self._threaded,
            request_handler=self._request_handler,
        )

        self._thread = Thread(target=self._server.serve_forever)
        self._thread.start()

        self.closed = False