def start_mock_server(): """We start a server on boot for use by tests""" global server port = utils.free_port() root = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) path = os.path.join(root, "tests", "utils", "mock_server.py") command = [sys.executable, "-u", path] env = os.environ env["PORT"] = str(port) env["PYTHONPATH"] = root logfile = open("tests/logs/live_mock_server.log", "w") server = subprocess.Popen( command, stdout=logfile, env=env, stderr=subprocess.STDOUT, bufsize=1, close_fds=True, ) server._port = port server.base_url = "http://localhost:%i" % server._port def get_ctx(): return requests.get(server.base_url + "/ctx").json() def set_ctx(payload): return requests.put(server.base_url + "/ctx", json=payload).json() def reset_ctx(): return requests.delete(server.base_url + "/ctx").json() server.get_ctx = get_ctx server.set_ctx = set_ctx server.reset_ctx = reset_ctx started = False for i in range(5): try: res = requests.get("%s/ctx" % server.base_url, timeout=1) if res.status_code == 200: started = True break print("Attempting to connect but got: %s" % res) except requests.exceptions.RequestException: print("Timed out waiting for server to start...") if server.poll() is None: time.sleep(1) else: raise ValueError("Server failed to start.") if started: print( "Mock server listing on %s see tests/logs/live_mock_server.log" % server._port ) else: server.terminate() print("Server failed to launch, see tests/logs/live_mock_server.log") raise ValueError("Failed to start server! Exit code %s" % server.returncode) return server
def test_status_proxy_ports(self): port = free_port() with devtools_proxy(args=['--port', port]): status = requests.get( f'http://127.0.0.1:{port}/status.json').json() assert status['proxy_ports'] == [port]
def setup_method(self): self.devtools_proxy_port = free_port() capabilities = DesiredCapabilities.CHROME.copy() capabilities['chromeOptions'] = { 'binary': CHROME_WRAPPER_PATH, 'args': [ f'--devtools-proxy-binary={DEVTOOLS_PROXY_PATH}', f'--devtools-proxy-chrome-debugging-port={free_port()}', f'--devtools-proxy-args=--port {self.devtools_proxy_port}', ], } self.driver = selenium.webdriver.Chrome(desired_capabilities=capabilities)
def start_mock_server(worker_id): """We start a flask server process for each pytest-xdist worker_id""" port = utils.free_port() root = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) path = os.path.join(root, "tests", "utils", "mock_server.py") command = [sys.executable, "-u", path] env = os.environ env["PORT"] = str(port) env["PYTHONPATH"] = root logfname = os.path.join(root, "tests", "logs", "live_mock_server-{}.log".format(worker_id)) logfile = open(logfname, "w") server = subprocess.Popen( command, stdout=logfile, env=env, stderr=subprocess.STDOUT, bufsize=1, close_fds=True, ) server._port = port server.base_url = f"http://localhost:{server._port}" def get_ctx(): return requests.get(server.base_url + "/ctx").json() def set_ctx(payload): return requests.put(server.base_url + "/ctx", json=payload).json() def reset_ctx(): return requests.delete(server.base_url + "/ctx").json() server.get_ctx = get_ctx server.set_ctx = set_ctx server.reset_ctx = reset_ctx started = False for i in range(10): try: res = requests.get("%s/ctx" % server.base_url, timeout=5) if res.status_code == 200: started = True break print(f"Attempting to connect but got: {res}") except requests.exceptions.RequestException: print("Timed out waiting for server to start...", server.base_url, time.time()) if server.poll() is None: time.sleep(1) else: raise ValueError("Server failed to start.") if started: print("Mock server listing on {} see {}".format( server._port, logfname)) else: server.terminate() print("Server failed to launch, see {}".format(logfname)) try: print("=" * 40) with open(logfname) as f: for logline in f.readlines(): print(logline.strip()) print("=" * 40) except Exception as e: print("EXCEPTION:", e) raise ValueError("Failed to start server! Exit code %s" % server.returncode) return server