Sam Chaudry
Upload folder using huggingface_hub
7885a28 verified
raw
history blame
2.52 kB
import re
import sys
from joblib.testing import check_subprocess_call, raises
def test_check_subprocess_call():
code = "\n".join(
["result = 1 + 2 * 3", "print(result)", "my_list = [1, 2, 3]", "print(my_list)"]
)
check_subprocess_call([sys.executable, "-c", code])
# Now checking stdout with a regex
check_subprocess_call(
[sys.executable, "-c", code],
# Regex needed for platform-specific line endings
stdout_regex=r"7\s{1,2}\[1, 2, 3\]",
)
def test_check_subprocess_call_non_matching_regex():
code = "42"
non_matching_pattern = "_no_way_this_matches_anything_"
with raises(ValueError) as excinfo:
check_subprocess_call(
[sys.executable, "-c", code], stdout_regex=non_matching_pattern
)
excinfo.match("Unexpected stdout.+{}".format(non_matching_pattern))
def test_check_subprocess_call_wrong_command():
wrong_command = "_a_command_that_does_not_exist_"
with raises(OSError):
check_subprocess_call([wrong_command])
def test_check_subprocess_call_non_zero_return_code():
code_with_non_zero_exit = "\n".join(
[
"import sys",
'print("writing on stdout")',
'sys.stderr.write("writing on stderr")',
"sys.exit(123)",
]
)
pattern = re.compile(
"Non-zero return code: 123.+"
"Stdout:\nwriting on stdout.+"
"Stderr:\nwriting on stderr",
re.DOTALL,
)
with raises(ValueError) as excinfo:
check_subprocess_call([sys.executable, "-c", code_with_non_zero_exit])
excinfo.match(pattern)
def test_check_subprocess_call_timeout():
code_timing_out = "\n".join(
[
"import time",
"import sys",
'print("before sleep on stdout")',
"sys.stdout.flush()",
'sys.stderr.write("before sleep on stderr")',
"sys.stderr.flush()",
# We need to sleep for at least 2 * timeout seconds in case the SIGKILL
# is triggered.
"time.sleep(10)",
'print("process should have be killed before")',
"sys.stdout.flush()",
]
)
pattern = re.compile(
"Non-zero return code:.+"
"Stdout:\nbefore sleep on stdout\\s+"
"Stderr:\nbefore sleep on stderr",
re.DOTALL,
)
with raises(ValueError) as excinfo:
check_subprocess_call([sys.executable, "-c", code_timing_out], timeout=1)
excinfo.match(pattern)