def test_starting_stopping_server(self): proxy = ProxyServer() expected_host = socket.gethostbyname(socket.gethostname()) expected_port = 1111 th = threading.Thread(target=proxy.start, kwargs={ 'host': '0.0.0.0', 'port': expected_port }) th.start() time.sleep(0.1) host, port = proxy.get_addr() proxy.stop() self.assertEqual(host, expected_host) self.assertEqual(port, expected_port) self.assertEqual(proxy.sever_sock.fileno(), -1) self.assertIsNone(proxy.executor)
def test_handling_clients(self): url = 'http://{}:{}'.format(WEB_SERVER_ADDRESS[0], WEB_SERVER_ADDRESS[1]) server = HTTPServer(WEB_SERVER_ADDRESS, CGIHTTPRequestHandler) proxy = ProxyServer() proxy_th = threading.Thread(target=proxy.start) http_th = threading.Thread(target=server.serve_forever) proxy_th.start() http_th.start() proxy_url = 'http://{}:{}'.format(*proxy.get_addr()) proxies = {'http': proxy_url} r = requests.get(url, proxies=proxies) self.assertEqual(r.status_code, 200) proxy.stop() server.shutdown() http_th.join() proxy_th.join() self.assertEqual(proxy.executor, None)
def test_handling_https(self): proxy = ProxyServer() th = threading.Thread(target=proxy.start) th.start() host, port = proxy.get_addr() serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM) serv.connect((host, port)) serv.sendall(HTTPS_PACKAGE) response = b'' while True: data = serv.recv(BUFFER_SIZE) if not data: break response += data self.assertEqual(SUCCESS_MESSAGE, response) proxy.stop() th.join()