aboutsummaryrefslogtreecommitdiffstats
path: root/library/python/runtime_py3/test/test_traceback.py
diff options
context:
space:
mode:
authornkozlovskiy <nmk@ydb.tech>2023-09-29 12:24:06 +0300
committernkozlovskiy <nmk@ydb.tech>2023-09-29 12:41:34 +0300
commite0e3e1717e3d33762ce61950504f9637a6e669ed (patch)
treebca3ff6939b10ed60c3d5c12439963a1146b9711 /library/python/runtime_py3/test/test_traceback.py
parent38f2c5852db84c7b4d83adfcb009eb61541d1ccd (diff)
downloadydb-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.py65
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,
+ ),
+ }