Chromium Code Reviews| OLD | NEW |
|---|---|
| (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 from crash import callstack_detectors | |
| 6 from crash.flag_manager import Flag | |
| 7 from crash.flag_manager import FlagManager | |
| 8 from crash.test.stacktrace_test_suite import StacktraceTestSuite | |
| 9 from crash.type_enums import CallStackFormatType | |
| 10 from crash.type_enums import LanguageType | |
| 11 | |
| 12 | |
| 13 class CallStackDetectorTest(StacktraceTestSuite): | |
| 14 | |
| 15 def testAndroidJobDetector(self): | |
| 16 """Tests ``AndroidJobDetector`` detects android job callstack.""" | |
|
wrengr
2016/12/22 23:28:36
for all these docstrings "tests ``foo`` detects" -
Sharu Jiang
2016/12/28 20:16:46
Done.
| |
| 17 stack_detector = callstack_detectors.AndroidJobDetector() | |
| 18 flag_manager = FlagManager() | |
| 19 flag_manager.Register('group', Flag('java_main_stack_flag', val=True)) | |
| 20 | |
| 21 self.assertTupleEqual( | |
| 22 stack_detector.IsStartOfNewCallStack( | |
| 23 'java.lang.IllegalStateException: blabla', flag_manager), | |
| 24 (True, 0, CallStackFormatType.JAVA, LanguageType.JAVA, {})) | |
| 25 self.assertTupleEqual( | |
| 26 stack_detector.IsStartOfNewCallStack( | |
| 27 'org.chromium.src.BlaBla', flag_manager), | |
| 28 (True, 1, CallStackFormatType.JAVA, LanguageType.JAVA, {})) | |
| 29 self.assertTupleEqual( | |
| 30 stack_detector.IsStartOfNewCallStack('Caused by:', flag_manager), | |
| 31 (True, 1, CallStackFormatType.JAVA, LanguageType.JAVA, {})) | |
| 32 self.assertTupleEqual( | |
| 33 stack_detector.IsStartOfNewCallStack( | |
| 34 'com.google.android.BlaBla', flag_manager), | |
| 35 (True, 1, CallStackFormatType.JAVA, LanguageType.JAVA, {})) | |
| 36 self.assertTupleEqual( | |
| 37 stack_detector.IsStartOfNewCallStack('dummy', flag_manager), | |
| 38 (False, None, None, None, None)) | |
| 39 | |
| 40 def testSyzyasanDetector(self): | |
| 41 """Tests ``SyzyasanDetector`` detects sysyasn callstack.""" | |
| 42 stack_detector = callstack_detectors.SyzyasanDetector() | |
| 43 self.assertTupleEqual( | |
| 44 stack_detector.IsStartOfNewCallStack('Crash stack:'), | |
| 45 (True, 0, CallStackFormatType.SYZYASAN, LanguageType.CPP, {})) | |
| 46 self.assertTupleEqual( | |
| 47 stack_detector.IsStartOfNewCallStack('A stack:'), | |
| 48 (True, 1, CallStackFormatType.SYZYASAN, LanguageType.CPP, {})) | |
| 49 self.assertTupleEqual( | |
| 50 stack_detector.IsStartOfNewCallStack('dummy'), | |
| 51 (False, None, None, None, None)) | |
| 52 | |
| 53 def testTsanDetector(self): | |
| 54 """Tests ``TsanDetector`` detects thread sanitizer callstack.""" | |
| 55 stack_detector = callstack_detectors.TsanDetector() | |
| 56 self.assertTupleEqual( | |
| 57 stack_detector.IsStartOfNewCallStack('Read of size 1023:'), | |
| 58 (True, 0, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) | |
| 59 self.assertTupleEqual( | |
| 60 stack_detector.IsStartOfNewCallStack('WARNING: ThreadSanitizer'), | |
| 61 (True, 0, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) | |
| 62 self.assertTupleEqual( | |
| 63 stack_detector.IsStartOfNewCallStack('Previous read of size 102'), | |
| 64 (True, 1, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) | |
| 65 self.assertTupleEqual( | |
| 66 stack_detector.IsStartOfNewCallStack( | |
| 67 'Location is heap block of size 3543'), | |
| 68 (True, 1, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) | |
| 69 self.assertTupleEqual( | |
| 70 stack_detector.IsStartOfNewCallStack('dummy'), | |
| 71 (False, None, None, None, None)) | |
| 72 | |
| 73 def testUbsanDetector(self): | |
| 74 """Tests ``UbsanDetector`` detects ubsan callstack.""" | |
| 75 stack_detector = callstack_detectors.UbsanDetector() | |
| 76 flag_manager = FlagManager() | |
| 77 flag_manager.Register('group', Flag('is_first_stack_flag', val=True)) | |
| 78 self.assertTupleEqual( | |
| 79 stack_detector.IsStartOfNewCallStack('blabla: runtime error: blabla', | |
| 80 flag_manager), | |
| 81 (True, 0, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) | |
| 82 # After the ``is_first_stack_flag`` is set to False, the priority will be | |
| 83 # 1. | |
| 84 self.assertTupleEqual( | |
| 85 stack_detector.IsStartOfNewCallStack('blabla: runtime error: blabla', | |
| 86 flag_manager), | |
| 87 (True, 1, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) | |
| 88 self.assertTupleEqual( | |
| 89 stack_detector.IsStartOfNewCallStack('dummy', flag_manager), | |
| 90 (False, None, None, None, None)) | |
| 91 | |
| 92 def testMsanDetector(self): | |
| 93 """Tests ``MsanDetector`` detects memory sanitizer callstack.""" | |
| 94 stack_detector = callstack_detectors.MsanDetector() | |
| 95 self.assertTupleEqual( | |
| 96 stack_detector.IsStartOfNewCallStack( | |
| 97 'Uninitialized value was created by'), | |
| 98 (True, 0, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) | |
| 99 # After the ``is_first_stack_flag`` is set to False, the priority will be | |
| 100 # 1. | |
| 101 self.assertTupleEqual( | |
| 102 stack_detector.IsStartOfNewCallStack( | |
| 103 'Uninitialized value was stored to'), | |
| 104 (True, 1, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) | |
| 105 self.assertTupleEqual( | |
| 106 stack_detector.IsStartOfNewCallStack( | |
| 107 '==123== ERROR:MemorySanitizer'), | |
| 108 (True, 2, CallStackFormatType.DEFAULT, LanguageType.CPP, {'pid': 123})) | |
| 109 self.assertTupleEqual( | |
| 110 stack_detector.IsStartOfNewCallStack('dummy'), | |
| 111 (False, None, None, None, None)) | |
| 112 | |
| 113 def testAsanDetector(self): | |
| 114 """Tests ``AsanDetector`` detects address sanitizer callstack.""" | |
| 115 stack_detector = callstack_detectors.AsanDetector() | |
| 116 self.assertTupleEqual( | |
| 117 stack_detector.IsStartOfNewCallStack('==123== ERROR:AddressSanitizer'), | |
| 118 (True, 0, CallStackFormatType.DEFAULT, LanguageType.CPP, {'pid': 123})) | |
| 119 # After the ``is_first_stack_flag`` is set to False, the priority will be | |
| 120 # 1. | |
| 121 self.assertTupleEqual( | |
| 122 stack_detector.IsStartOfNewCallStack('READ of size 32 at backtrace:'), | |
| 123 (True, 0, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) | |
| 124 self.assertTupleEqual( | |
| 125 stack_detector.IsStartOfNewCallStack('freed by thread T99 here:'), | |
| 126 (True, 1, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) | |
| 127 self.assertTupleEqual( | |
| 128 stack_detector.IsStartOfNewCallStack( | |
| 129 'previously allocated by thread T1 here:'), | |
| 130 (True, 1, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) | |
| 131 self.assertTupleEqual( | |
| 132 stack_detector.IsStartOfNewCallStack('Thread T9 created by'), | |
| 133 (True, 1, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) | |
| 134 self.assertTupleEqual( | |
| 135 stack_detector.IsStartOfNewCallStack('dummy'), | |
| 136 (False, None, None, None, None)) | |
| 137 | |
| 138 def testChromeCrashDetector(self): | |
| 139 """Tests ``ChromeCrashDetector`` detects Fracas/Cracas callstack.""" | |
| 140 stack_detector = callstack_detectors.ChromeCrashStackDetector() | |
| 141 | |
| 142 self.assertTupleEqual( | |
| 143 stack_detector.IsStartOfNewCallStack('CRASHED [EXC @ 0x508]'), | |
| 144 (True, 0, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) | |
| 145 self.assertTupleEqual( | |
| 146 stack_detector.IsStartOfNewCallStack('(JAVA) CRASHED [EXC @ 0x508]'), | |
| 147 (True, 0, CallStackFormatType.DEFAULT, LanguageType.JAVA, {})) | |
| 148 self.assertTupleEqual(stack_detector.IsStartOfNewCallStack('dummy line'), | |
| 149 (False, None, None, None, None)) | |
| OLD | NEW |