Spaces:
Running
Running
"""Test the bash utility.""" | |
import re | |
import subprocess | |
import sys | |
from pathlib import Path | |
import pytest | |
from langchain_experimental.llm_bash.bash import BashProcess | |
def test_pwd_command() -> None: | |
"""Test correct functionality.""" | |
session = BashProcess() | |
commands = ["pwd"] | |
output = session.run(commands) | |
assert output == subprocess.check_output("pwd", shell=True).decode() | |
def test_pwd_command_persistent() -> None: | |
"""Test correct functionality when the bash process is persistent.""" | |
session = BashProcess(persistent=True, strip_newlines=True) | |
commands = ["pwd"] | |
output = session.run(commands) | |
assert subprocess.check_output("pwd", shell=True).decode().strip() in output | |
session.run(["cd .."]) | |
new_output = session.run(["pwd"]) | |
# Assert that the new_output is a parent of the old output | |
assert Path(output).parent == Path(new_output) | |
def test_incorrect_command() -> None: | |
"""Test handling of incorrect command.""" | |
session = BashProcess() | |
output = session.run(["invalid_command"]) | |
assert output == "Command 'invalid_command' returned non-zero exit status 127." | |
def test_incorrect_command_return_err_output() -> None: | |
"""Test optional returning of shell output on incorrect command.""" | |
session = BashProcess(return_err_output=True) | |
output = session.run(["invalid_command"]) | |
assert re.match( | |
r"^/bin/sh:.*invalid_command.*(?:not found|Permission denied).*$", output | |
) | |
def test_create_directory_and_files(tmp_path: Path) -> None: | |
"""Test creation of a directory and files in a temporary directory.""" | |
session = BashProcess(strip_newlines=True) | |
# create a subdirectory in the temporary directory | |
temp_dir = tmp_path / "test_dir" | |
temp_dir.mkdir() | |
# run the commands in the temporary directory | |
commands = [ | |
f"touch {temp_dir}/file1.txt", | |
f"touch {temp_dir}/file2.txt", | |
f"echo 'hello world' > {temp_dir}/file2.txt", | |
f"cat {temp_dir}/file2.txt", | |
] | |
output = session.run(commands) | |
assert output == "hello world" | |
# check that the files were created in the temporary directory | |
output = session.run([f"ls {temp_dir}"]) | |
assert output == "file1.txt\nfile2.txt" | |
def test_create_bash_persistent() -> None: | |
"""Test the pexpect persistent bash terminal""" | |
session = BashProcess(persistent=True) | |
response = session.run("echo hello") | |
response += session.run("echo world") | |
assert "hello" in response | |
assert "world" in response | |