def start_processes() -> Iterator[None]: my_env = os.environ.copy() scene_port = find_free_port() scene_url = f"http://0.0.0.0:{scene_port}" my_env["ARCOR2_SCENE_SERVICE_URL"] = scene_url my_env["ARCOR2_SCENE_SERVICE_MOCK_PORT"] = str(scene_port) scene_service.URL = scene_url processes = [] for cmd in ("./src.python.arcor2_mocks.scripts/mock_scene.pex",): processes.append(subprocess.Popen(cmd, env=my_env, stdout=subprocess.PIPE)) scene_service.wait_for(20) yield None finish_processes(processes)
def start_processes() -> Iterator[None]: global _arserver_port _arserver_port = find_free_port() with tempfile.TemporaryDirectory() as tmp_dir: my_env = os.environ.copy() project_port = find_free_port() project_url = f"http://0.0.0.0:{project_port}" my_env["ARCOR2_PROJECT_SERVICE_URL"] = project_url my_env["ARCOR2_PROJECT_SERVICE_MOCK_PORT"] = str(project_port) project_service.URL = project_url scene_port = find_free_port() scene_url = f"http://0.0.0.0:{scene_port}" my_env["ARCOR2_SCENE_SERVICE_URL"] = scene_url my_env["ARCOR2_SCENE_SERVICE_MOCK_PORT"] = str(scene_port) scene_service.URL = scene_url my_env["ARCOR2_EXECUTION_URL"] = f"ws://0.0.0.0:{find_free_port()}" my_env["ARCOR2_PROJECT_PATH"] = os.path.join(tmp_dir, "packages") my_env["ARCOR2_SERVER_PORT"] = str(_arserver_port) my_env["ARCOR2_DATA_PATH"] = os.path.join(tmp_dir, "data") processes = [] for cmd in ( "./src.python.arcor2_mocks.scripts/mock_project.pex", "./src.python.arcor2_mocks.scripts/mock_scene.pex", "./src.python.arcor2_execution.scripts/execution.pex", ): processes.append( sp.Popen(cmd, env=my_env, stdout=sp.PIPE, stderr=sp.STDOUT)) scene_service.wait_for(60) # it may take some time for project service to come up so give it some time for _ in range(3): upload_proc = sp.Popen( "./src.python.arcor2_yumi.scripts/upload_objects.pex", env=my_env, stdout=sp.PIPE, stderr=sp.STDOUT) ret = upload_proc.communicate() if upload_proc.returncode == 0: log_proc_output(ret) break else: raise Exception("Failed to upload objects.") LOGGER.info(f"Starting ARServer listening on port {_arserver_port}.") arserver_proc = sp.Popen( "./src.python.arcor2_arserver.scripts/arserver.pex", env=my_env, stdout=sp.PIPE, stderr=sp.STDOUT) processes.append(arserver_proc) assert arserver_proc.stdout is not None while True: line = arserver_proc.stdout.readline().decode().strip() if not line or "Server initialized." in line: # TODO this is not ideal break if arserver_proc.poll(): finish_processes(processes) raise Exception("ARServer died.") yield None finish_processes(processes)