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()
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
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()
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()
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