diff options
author | nkozlovskiy <nmk@ydb.tech> | 2023-09-29 12:24:06 +0300 |
---|---|---|
committer | nkozlovskiy <nmk@ydb.tech> | 2023-09-29 12:41:34 +0300 |
commit | e0e3e1717e3d33762ce61950504f9637a6e669ed (patch) | |
tree | bca3ff6939b10ed60c3d5c12439963a1146b9711 /library/python/runtime_py3/test/test_traceback.py | |
parent | 38f2c5852db84c7b4d83adfcb009eb61541d1ccd (diff) | |
download | ydb-e0e3e1717e3d33762ce61950504f9637a6e669ed.tar.gz |
add ydb deps
Diffstat (limited to 'library/python/runtime_py3/test/test_traceback.py')
-rw-r--r-- | library/python/runtime_py3/test/test_traceback.py | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/library/python/runtime_py3/test/test_traceback.py b/library/python/runtime_py3/test/test_traceback.py new file mode 100644 index 0000000000..08aed1a510 --- /dev/null +++ b/library/python/runtime_py3/test/test_traceback.py @@ -0,0 +1,65 @@ +import os +import re + +import pytest + +import yatest.common as yc + + +def clean_traceback(traceback): + traceback = re.sub(rb"\033\[(\d|;)+?m", b"", traceback) # strip ANSI codes + traceback = re.sub(rb" at 0x[0-9a-fA-F]+", b"", traceback) # remove object ids + return traceback + + +@pytest.mark.parametrize( + "mode", + [ + "default", + "ultratb_color", + "ultratb_verbose", + ], +) +@pytest.mark.parametrize( + "entry_point", + [ + "main", + "custom", + ], +) +def test_traceback(mode, entry_point): + tb_tool = yc.build_path("library/python/runtime_py3/test/traceback/traceback") + stdout_path = yc.test_output_path("stdout_raw.txt") + stderr_path = yc.test_output_path("stderr_raw.txt") + filtered_stdout_path = yc.test_output_path("stdout.txt") + filtered_stderr_path = yc.test_output_path("stderr.txt") + + env = os.environ.copy() + env.pop("PYTHONPATH", None) # Do not let program peek into its sources on filesystem + if entry_point == "custom": + env["Y_PYTHON_ENTRY_POINT"] = "library.python.runtime_py3.test.traceback.crash:main" + + proc = yc.execute( + command=[tb_tool, mode], + env=env, + stdout=stdout_path, + stderr=stderr_path, + check_exit_code=False, + ) + + with open(filtered_stdout_path, "wb") as f: + f.write(clean_traceback(proc.std_out)) + + with open(filtered_stderr_path, "wb") as f: + f.write(clean_traceback(proc.std_err)) + + return { + "stdout": yc.canonical_file( + filtered_stdout_path, + local=True, + ), + "stderr": yc.canonical_file( + filtered_stderr_path, + local=True, + ), + } |