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}
66 lines
2.3 KiB
Python
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()
|