Files
Al Muthanna Athamina 7c055e7ab0 Add logic to the stack analyzer to accommodate TSAN stacktraces
Add custom analysis that is only done if the ClusterFuzz analyzer fails
analyze the stacktrace given without overriding any of its functionality.

Bug: v8:12313
Change-Id: I9e4bc40404387160eb122b8f58999717bd4e7672
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4165085
Commit-Queue: Almothana Athamneh <almuthanna@chromium.org>
Reviewed-by: Michael Achenbach <machenbach@chromium.org>
Cr-Commit-Position: refs/heads/main@{#85390}
2023-01-19 12:13:36 +00:00

66 lines
2.3 KiB
Python

#!/usr/bin/env python3
# Copyright 2022 the V8 project authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import json
import os
import sys
import unittest
TOOLS_PATH = os.path.dirname(
os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
sys.path.append(TOOLS_PATH)
TEST_DATA_ROOT = os.path.join(TOOLS_PATH, 'testproc', 'stack_utils', 'testdata')
TEST_DATA_GENERAL = os.path.join(TEST_DATA_ROOT, 'analyze_crash')
TEST_DATA_CUSTOM = os.path.join(TEST_DATA_ROOT, 'custom_analyzer')
from testproc.stack_utils.stack_analyzer_util import create_stack_parser
class TestScript(unittest.TestCase):
# TODO(almuthanna): find out why these test cases are not analyzed and add
# logic to make them pass.
skipped_tests = [
'type_assertion_1.txt',
'type_assertion_2.txt',
'static_assertion_2.txt',
'static_assertion_1.txt',
]
def test_analyze_crash(self):
stack_parser = create_stack_parser()
for file in [
f for f in os.listdir(TEST_DATA_GENERAL) if f.endswith('.txt')
]:
if file in self.skipped_tests:
continue
filepath = os.path.join(TEST_DATA_GENERAL, file)
exp_filepath = os.path.join(TEST_DATA_GENERAL,
file.replace('.txt', '.expected.json'))
with self.subTest(test_name=file[:-4]):
with open(filepath) as f:
result = stack_parser.analyze_crash(f.read())
with open(exp_filepath, 'r') as exp_f:
expectation = json.load(exp_f)
self.assertDictEqual(result, expectation)
def test_fallback_crash_state(self):
self.maxDiff = None
stack_parser = create_stack_parser()
for file in [f for f in os.listdir(TEST_DATA_CUSTOM) if f.endswith('.txt')]:
filepath = os.path.join(TEST_DATA_CUSTOM, file)
exp_filepath = os.path.join(TEST_DATA_CUSTOM,
file.replace('.txt', '.expected'))
with self.subTest(test_name=file[:-4]):
with open(filepath) as f:
result = stack_parser._fallback_crash_state(f.read())
with open(exp_filepath, 'r') as exp_f:
expectation = exp_f.read()
self.assertEqual(result, expectation)
if __name__ == '__main__':
unittest.main()