aboutsummaryrefslogtreecommitdiffstats
path: root/library/python/runtime_py3/test/test_traceback.py
diff options
context:
space:
mode:
authorDevtools Arcadia <arcadia-devtools@yandex-team.ru>2022-02-07 18:08:42 +0300
committerDevtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net>2022-02-07 18:08:42 +0300
commit1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch)
treee26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/python/runtime_py3/test/test_traceback.py
downloadydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/python/runtime_py3/test/test_traceback.py')
-rw-r--r--library/python/runtime_py3/test/test_traceback.py63
1 files changed, 63 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..82087ce98a
--- /dev/null
+++ b/library/python/runtime_py3/test/test_traceback.py
@@ -0,0 +1,63 @@
+# -*- coding: utf-8 -*-
+
+from __future__ import print_function, absolute_import, division
+
+import os
+import re
+
+import pytest
+
+import yatest.common as yc
+
+
+def clean_traceback(traceback):
+ traceback = re.sub(br'\033\[(\d|;)+?m', b'', traceback) # strip ANSI codes
+ traceback = re.sub(br' 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,
+ ),
+ }