def test_run_multiple_connections(connection_ids): """Test that the command 'aea run' works as expected when specifying multiple connections.""" runner = CliRunner() agent_name = "myagent" cwd = os.getcwd() t = tempfile.mkdtemp() # copy the 'packages' directory in the parent of the agent folder. shutil.copytree(Path(ROOT_DIR, "packages"), Path(t, "packages")) os.chdir(t) result = runner.invoke( cli, [*CLI_LOG_OPTION, "init", "--local", "--author", AUTHOR]) assert result.exit_code == 0 result = runner.invoke(cli, [*CLI_LOG_OPTION, "create", "--local", agent_name]) assert result.exit_code == 0 os.chdir(Path(t, agent_name)) result = runner.invoke(cli, [ *CLI_LOG_OPTION, "add", "--local", "connection", "fetchai/local:0.1.0" ]) assert result.exit_code == 0 # stub is the default connection, so it should fail result = runner.invoke(cli, [ *CLI_LOG_OPTION, "add", "--local", "connection", str(DEFAULT_CONNECTION) ]) assert result.exit_code == 1 try: process = subprocess.Popen( # nosec [ sys.executable, "-m", "aea.cli", "run", "--connections", connection_ids ], stdout=subprocess.PIPE, env=os.environ.copy(), ) time.sleep(5.0) sigint_crossplatform(process) process.wait(timeout=5) assert process.returncode == 0 finally: poll = process.poll() if poll is None: process.terminate() process.wait(2) os.chdir(cwd) try: shutil.rmtree(t) except (OSError, IOError): pass
def test_run_with_default_connection(): """Test that the command 'aea run' works as expected.""" runner = CliRunner() agent_name = "myagent" cwd = os.getcwd() t = tempfile.mkdtemp() # copy the 'packages' directory in the parent of the agent folder. shutil.copytree(Path(ROOT_DIR, "packages"), Path(t, "packages")) os.chdir(t) result = runner.invoke( cli, [*CLI_LOG_OPTION, "init", "--local", "--author", AUTHOR]) assert result.exit_code == 0 result = runner.invoke(cli, [*CLI_LOG_OPTION, "create", "--local", agent_name]) assert result.exit_code == 0 os.chdir(Path(t, agent_name)) try: process = subprocess.Popen( # nosec [sys.executable, "-m", "aea.cli", "run"], stdout=subprocess.PIPE, env=os.environ.copy(), ) time.sleep(10.0) sigint_crossplatform(process) process.wait(timeout=20) assert process.returncode == 0 finally: poll = process.poll() if poll is None: process.terminate() process.wait(2) os.chdir(cwd) try: shutil.rmtree(t) except (OSError, IOError): pass
def terminate_agents( cls, *subprocesses: subprocess.Popen, signal: signal.Signals = signal.SIGINT, timeout: int = 10, ) -> None: """ Terminate agent subprocesses. Run from agent's directory. :param subprocesses: the subprocesses running the agents :param signal: the signal for interuption :param timeout: the timeout for interuption """ if not subprocesses: subprocesses = tuple(cls.subprocesses) for process in subprocesses: sigint_crossplatform(process) for process in subprocesses: process.wait(timeout=timeout)
def test_run_fet_ledger_apis(): """Test that the command 'aea run' works as expected.""" runner = CliRunner() agent_name = "myagent" cwd = os.getcwd() t = tempfile.mkdtemp() # copy the 'packages' directory in the parent of the agent folder. shutil.copytree(Path(ROOT_DIR, "packages"), Path(t, "packages")) os.chdir(t) result = runner.invoke( cli, [*CLI_LOG_OPTION, "init", "--local", "--author", AUTHOR]) assert result.exit_code == 0 result = runner.invoke(cli, [*CLI_LOG_OPTION, "create", "--local", agent_name]) assert result.exit_code == 0 os.chdir(Path(t, agent_name)) result = runner.invoke( cli, [ *CLI_LOG_OPTION, "add", "--local", "connection", "fetchai/http_client:0.5.0" ], ) assert result.exit_code == 0 result = runner.invoke( cli, [ *CLI_LOG_OPTION, "config", "set", "agent.default_connection", "fetchai/http_client:0.5.0", ], ) assert result.exit_code == 0 # Load the agent yaml file and manually insert the things we need file = open("aea-config.yaml", mode="r") # read all lines at once whole_file = file.read() # add in the ledger address find_text = "ledger_apis: {}" replace_text = """ledger_apis: fetchai: network: testnet""" whole_file = whole_file.replace(find_text, replace_text) # close the file file.close() with open("aea-config.yaml", "w") as f: f.write(whole_file) try: process = subprocess.Popen( # nosec [ sys.executable, "-m", "aea.cli", "run", "--connections", "fetchai/http_client:0.5.0", ], stdout=subprocess.PIPE, env=os.environ.copy(), ) time.sleep(10.0) sigint_crossplatform(process) process.wait(timeout=20) assert process.returncode == 0 finally: poll = process.poll() if poll is None: process.terminate() process.wait(2) os.chdir(cwd) try: shutil.rmtree(t) except (OSError, IOError): pass