Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(117)

Side by Side Diff: appengine/findit/crash/test/clusterfuzz_parser_test.py

Issue 2593593003: [Predator] Add Clusterfuzz stacktrace parser. (Closed)
Patch Set: Rebase and fix nit. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 import textwrap
6
7 from common.dependency import Dependency
8 from crash import callstack_detectors
9 from crash.clusterfuzz_parser import ClusterfuzzParser
10 from crash.clusterfuzz_parser import GetCallStackDetector
11 from crash.stacktrace import StackFrame
12 from crash.stacktrace import CallStack
13 from crash.stacktrace import Stacktrace
14 from crash.test.stacktrace_test_suite import StacktraceTestSuite
15 from crash.type_enums import CallStackFormatType
16 from crash.type_enums import LanguageType
17 from crash.type_enums import SanitizerType
18
19
20 class ClusterfuzzParserTest(StacktraceTestSuite):
21
22 def testGetCallStackDetector(self):
23 self.assertTrue(isinstance(GetCallStackDetector('android_job', None),
24 callstack_detectors.AndroidJobDetector))
25 self.assertTrue(
26 isinstance(GetCallStackDetector('job', SanitizerType.SYZYASAN),
27 callstack_detectors.SyzyasanDetector))
28 self.assertTrue(
29 isinstance(GetCallStackDetector('job', SanitizerType.THREAD_SANITIZER),
30 callstack_detectors.TsanDetector))
31 self.assertTrue(
32 isinstance(GetCallStackDetector('job', SanitizerType.UBSAN),
33 callstack_detectors.UbsanDetector))
34 self.assertTrue(
35 isinstance(GetCallStackDetector('job', SanitizerType.MEMORY_SANITIZER),
36 callstack_detectors.MsanDetector))
37 self.assertTrue(
38 isinstance(GetCallStackDetector('job', SanitizerType.ADDRESS_SANITIZER),
39 callstack_detectors.AsanDetector))
40 self.assertIsNone(GetCallStackDetector('job', None))
41
42 def testReturnNoneForEmptyString(self):
43 parser = ClusterfuzzParser()
44 deps = {'src/': Dependency('src/', 'https://repo', '1')}
45
46 self.assertIsNone(parser.Parse('', deps, 'asan_job'))
47
48 def testReturnNoneForDummyJobType(self):
49 parser = ClusterfuzzParser()
50 deps = {'src/': Dependency('src/', 'https://repo', '1')}
51
52 self.assertIsNone(parser.Parse('Crash stack:', deps, 'dummy_job'))
53
54 def testChromeCrashParserParseLineMalformatedCallstack(self):
55 parser = ClusterfuzzParser()
56 deps = {'src/': Dependency('src/', 'https://repo', '1')}
57 stacktrace_string = textwrap.dedent(
58 """
59 Blabla...
60 ==1==ERROR: AddressSanitizer: stack-overflow on address 0x7ffec59ebec0
61 #0 dummy
62 #1 dummy
63 #2 dummy
64 """
65 )
66 self.assertIsNone(parser.Parse(stacktrace_string, deps, 'asan_job'))
67
68 def testClusterfuzzParserParseStacktrace(self):
69 parser = ClusterfuzzParser()
70 deps = {'src/': Dependency('src/', 'https://repo', '1')}
71 stacktrace_string = textwrap.dedent(
72 """
73 Blabla...
74 ==1==ERROR: AddressSanitizer: stack-overflow on address 0x7ffec59ebec0
75 #0 0x7f5b944a37bb in a::aa(p* d) src/a.h:225
76 #1 0x7f5b9449a880 in b::bb(p* d) src/b.h:266:1
77 #2 0x7f5b9449a880 in c::cc(p* d) src/c.h:281
78 """
79 )
80
81 stacktrace = parser.Parse(stacktrace_string, deps, 'asan_job')
82 stack = CallStack(0, frame_list=[
83 StackFrame(0, 'src/', 'a::aa(p* d)', 'a.h', 'src/a.h', [225]),
84 StackFrame(1, 'src/', 'b::bb(p* d)', 'b.h', 'src/b.h', [266, 267]),
85 StackFrame(2, 'src/', 'c::cc(p* d)', 'c.h', 'src/c.h', [281])])
86 expected_stacktrace = Stacktrace([stack], stack)
87
88 self._VerifyTwoStacktracesEqual(stacktrace, expected_stacktrace)
OLDNEW
« no previous file with comments | « appengine/findit/crash/test/chromecrash_parser_test.py ('k') | appengine/findit/crash/test/type_enums_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698