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

Unified Diff: appengine/findit/crash/test/clusterfuzz_parser_test.py

Issue 2593593003: [Predator] Add Clusterfuzz stacktrace parser. (Closed)
Patch Set: Rebase and fix nit. Created 4 years 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 side-by-side diff with in-line comments
Download patch
Index: appengine/findit/crash/test/clusterfuzz_parser_test.py
diff --git a/appengine/findit/crash/test/clusterfuzz_parser_test.py b/appengine/findit/crash/test/clusterfuzz_parser_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..efbeece1b3e215af4aa8f6652362c7fdaf651f1b
--- /dev/null
+++ b/appengine/findit/crash/test/clusterfuzz_parser_test.py
@@ -0,0 +1,88 @@
+# Copyright 2016 The Chromium 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 textwrap
+
+from common.dependency import Dependency
+from crash import callstack_detectors
+from crash.clusterfuzz_parser import ClusterfuzzParser
+from crash.clusterfuzz_parser import GetCallStackDetector
+from crash.stacktrace import StackFrame
+from crash.stacktrace import CallStack
+from crash.stacktrace import Stacktrace
+from crash.test.stacktrace_test_suite import StacktraceTestSuite
+from crash.type_enums import CallStackFormatType
+from crash.type_enums import LanguageType
+from crash.type_enums import SanitizerType
+
+
+class ClusterfuzzParserTest(StacktraceTestSuite):
+
+ def testGetCallStackDetector(self):
+ self.assertTrue(isinstance(GetCallStackDetector('android_job', None),
+ callstack_detectors.AndroidJobDetector))
+ self.assertTrue(
+ isinstance(GetCallStackDetector('job', SanitizerType.SYZYASAN),
+ callstack_detectors.SyzyasanDetector))
+ self.assertTrue(
+ isinstance(GetCallStackDetector('job', SanitizerType.THREAD_SANITIZER),
+ callstack_detectors.TsanDetector))
+ self.assertTrue(
+ isinstance(GetCallStackDetector('job', SanitizerType.UBSAN),
+ callstack_detectors.UbsanDetector))
+ self.assertTrue(
+ isinstance(GetCallStackDetector('job', SanitizerType.MEMORY_SANITIZER),
+ callstack_detectors.MsanDetector))
+ self.assertTrue(
+ isinstance(GetCallStackDetector('job', SanitizerType.ADDRESS_SANITIZER),
+ callstack_detectors.AsanDetector))
+ self.assertIsNone(GetCallStackDetector('job', None))
+
+ def testReturnNoneForEmptyString(self):
+ parser = ClusterfuzzParser()
+ deps = {'src/': Dependency('src/', 'https://repo', '1')}
+
+ self.assertIsNone(parser.Parse('', deps, 'asan_job'))
+
+ def testReturnNoneForDummyJobType(self):
+ parser = ClusterfuzzParser()
+ deps = {'src/': Dependency('src/', 'https://repo', '1')}
+
+ self.assertIsNone(parser.Parse('Crash stack:', deps, 'dummy_job'))
+
+ def testChromeCrashParserParseLineMalformatedCallstack(self):
+ parser = ClusterfuzzParser()
+ deps = {'src/': Dependency('src/', 'https://repo', '1')}
+ stacktrace_string = textwrap.dedent(
+ """
+ Blabla...
+ ==1==ERROR: AddressSanitizer: stack-overflow on address 0x7ffec59ebec0
+ #0 dummy
+ #1 dummy
+ #2 dummy
+ """
+ )
+ self.assertIsNone(parser.Parse(stacktrace_string, deps, 'asan_job'))
+
+ def testClusterfuzzParserParseStacktrace(self):
+ parser = ClusterfuzzParser()
+ deps = {'src/': Dependency('src/', 'https://repo', '1')}
+ stacktrace_string = textwrap.dedent(
+ """
+ Blabla...
+ ==1==ERROR: AddressSanitizer: stack-overflow on address 0x7ffec59ebec0
+ #0 0x7f5b944a37bb in a::aa(p* d) src/a.h:225
+ #1 0x7f5b9449a880 in b::bb(p* d) src/b.h:266:1
+ #2 0x7f5b9449a880 in c::cc(p* d) src/c.h:281
+ """
+ )
+
+ stacktrace = parser.Parse(stacktrace_string, deps, 'asan_job')
+ stack = CallStack(0, frame_list=[
+ StackFrame(0, 'src/', 'a::aa(p* d)', 'a.h', 'src/a.h', [225]),
+ StackFrame(1, 'src/', 'b::bb(p* d)', 'b.h', 'src/b.h', [266, 267]),
+ StackFrame(2, 'src/', 'c::cc(p* d)', 'c.h', 'src/c.h', [281])])
+ expected_stacktrace = Stacktrace([stack], stack)
+
+ self._VerifyTwoStacktracesEqual(stacktrace, expected_stacktrace)
« 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