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

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

Issue 2607813002: [Predator] Make ``CallStackDetector`` return a namedtuple. (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
« no previous file with comments | « appengine/findit/crash/stacktrace.py ('k') | appengine/findit/crash/test/stacktrace_test.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2016 The Chromium Authors. All rights reserved. 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 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 from crash import callstack_detectors 5 from crash import callstack_detectors
6 from crash.callstack_detectors import StartOfCallStack
6 from crash.flag_manager import ParsingFlag 7 from crash.flag_manager import ParsingFlag
7 from crash.flag_manager import FlagManager 8 from crash.flag_manager import FlagManager
8 from crash.test.stacktrace_test_suite import StacktraceTestSuite 9 from crash.test.stacktrace_test_suite import StacktraceTestSuite
9 from crash.type_enums import CallStackFormatType 10 from crash.type_enums import CallStackFormatType
10 from crash.type_enums import LanguageType 11 from crash.type_enums import LanguageType
11 12
12 13
13 class CallStackDetectorTest(StacktraceTestSuite): 14 class CallStackDetectorTest(StacktraceTestSuite):
14 15
15 def testAndroidJobDetector(self): 16 def testAndroidJobDetector(self):
16 """Tests that ``AndroidJobDetector`` detects android job callstack.""" 17 """Tests that ``AndroidJobDetector`` detects android job callstack."""
17 stack_detector = callstack_detectors.AndroidJobDetector() 18 stack_detector = callstack_detectors.AndroidJobDetector()
18 flag_manager = FlagManager() 19 flag_manager = FlagManager()
19 flag_manager.Register('group', 20 flag_manager.Register('group',
20 ParsingFlag('java_main_stack_flag', value=True)) 21 ParsingFlag('java_main_stack_flag', value=True))
21 22
22 self.assertTupleEqual( 23 self.assertTupleEqual(
23 stack_detector.IsStartOfNewCallStack( 24 stack_detector('java.lang.IllegalStateException: blabla', flag_manager),
24 'java.lang.IllegalStateException: blabla', flag_manager), 25 StartOfCallStack(0, CallStackFormatType.JAVA, LanguageType.JAVA, {}))
25 (True, 0, CallStackFormatType.JAVA, LanguageType.JAVA, {}))
26 self.assertTupleEqual( 26 self.assertTupleEqual(
27 stack_detector.IsStartOfNewCallStack( 27 stack_detector('org.chromium.src.BlaBla', flag_manager),
28 'org.chromium.src.BlaBla', flag_manager), 28 StartOfCallStack(1, CallStackFormatType.JAVA, LanguageType.JAVA, {}))
29 (True, 1, CallStackFormatType.JAVA, LanguageType.JAVA, {}))
30 self.assertTupleEqual( 29 self.assertTupleEqual(
31 stack_detector.IsStartOfNewCallStack('Caused by:', flag_manager), 30 stack_detector('Caused by:', flag_manager),
32 (True, 1, CallStackFormatType.JAVA, LanguageType.JAVA, {})) 31 StartOfCallStack(1, CallStackFormatType.JAVA, LanguageType.JAVA, {}))
33 self.assertTupleEqual( 32 self.assertTupleEqual(
34 stack_detector.IsStartOfNewCallStack( 33 stack_detector('com.google.android.BlaBla', flag_manager),
35 'com.google.android.BlaBla', flag_manager), 34 StartOfCallStack(1, CallStackFormatType.JAVA, LanguageType.JAVA, {}))
36 (True, 1, CallStackFormatType.JAVA, LanguageType.JAVA, {})) 35 self.assertIsNone(stack_detector('dummy', flag_manager))
37 self.assertTupleEqual(
38 stack_detector.IsStartOfNewCallStack('dummy', flag_manager),
39 (False, None, None, None, None))
40 36
41 def testSyzyasanDetector(self): 37 def testSyzyasanDetector(self):
42 """Tests that ``SyzyasanDetector`` detects sysyasn callstack.""" 38 """Tests that ``SyzyasanDetector`` detects sysyasn callstack."""
43 stack_detector = callstack_detectors.SyzyasanDetector() 39 stack_detector = callstack_detectors.SyzyasanDetector()
44 self.assertTupleEqual( 40 self.assertTupleEqual(
45 stack_detector.IsStartOfNewCallStack('Crash stack:'), 41 stack_detector('Crash stack:'),
46 (True, 0, CallStackFormatType.SYZYASAN, LanguageType.CPP, {})) 42 StartOfCallStack(0, CallStackFormatType.SYZYASAN, LanguageType.CPP, {}))
47 self.assertTupleEqual( 43 self.assertTupleEqual(
48 stack_detector.IsStartOfNewCallStack('A stack:'), 44 stack_detector('A stack:'),
49 (True, 1, CallStackFormatType.SYZYASAN, LanguageType.CPP, {})) 45 StartOfCallStack(1, CallStackFormatType.SYZYASAN, LanguageType.CPP, {}))
50 self.assertTupleEqual( 46 self.assertIsNone(stack_detector('dummy'))
51 stack_detector.IsStartOfNewCallStack('dummy'),
52 (False, None, None, None, None))
53 47
54 def testTsanDetector(self): 48 def testTsanDetector(self):
55 """Tests that ``TsanDetector`` detects thread sanitizer callstack.""" 49 """Tests that ``TsanDetector`` detects thread sanitizer callstack."""
56 stack_detector = callstack_detectors.TsanDetector() 50 stack_detector = callstack_detectors.TsanDetector()
57 self.assertTupleEqual( 51 self.assertTupleEqual(
58 stack_detector.IsStartOfNewCallStack('Read of size 1023:'), 52 stack_detector('Read of size 1023:'),
59 (True, 0, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) 53 StartOfCallStack(0, CallStackFormatType.DEFAULT, LanguageType.CPP, {}))
60 self.assertTupleEqual( 54 self.assertTupleEqual(
61 stack_detector.IsStartOfNewCallStack('WARNING: ThreadSanitizer'), 55 stack_detector('WARNING: ThreadSanitizer'),
62 (True, 0, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) 56 StartOfCallStack(0, CallStackFormatType.DEFAULT, LanguageType.CPP, {}))
63 self.assertTupleEqual( 57 self.assertTupleEqual(
64 stack_detector.IsStartOfNewCallStack('Previous read of size 102'), 58 stack_detector('Previous read of size 102'),
65 (True, 1, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) 59 StartOfCallStack(1, CallStackFormatType.DEFAULT, LanguageType.CPP, {}))
66 self.assertTupleEqual( 60 self.assertTupleEqual(
67 stack_detector.IsStartOfNewCallStack( 61 stack_detector('Location is heap block of size 3543'),
68 'Location is heap block of size 3543'), 62 StartOfCallStack(1, CallStackFormatType.DEFAULT, LanguageType.CPP, {}))
69 (True, 1, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) 63 self.assertIsNone(stack_detector('dummy'))
70 self.assertTupleEqual(
71 stack_detector.IsStartOfNewCallStack('dummy'),
72 (False, None, None, None, None))
73 64
74 def testUbsanDetector(self): 65 def testUbsanDetector(self):
75 """Tests that ``UbsanDetector`` detects ubsan callstack.""" 66 """Tests that ``UbsanDetector`` detects ubsan callstack."""
76 stack_detector = callstack_detectors.UbsanDetector() 67 stack_detector = callstack_detectors.UbsanDetector()
77 flag_manager = FlagManager() 68 flag_manager = FlagManager()
78 flag_manager.Register('group', 69 flag_manager.Register('group',
79 ParsingFlag('is_first_stack_flag', value=True)) 70 ParsingFlag('is_first_stack_flag', value=True))
80 self.assertTupleEqual( 71 self.assertTupleEqual(
81 stack_detector.IsStartOfNewCallStack('blabla: runtime error: blabla', 72 stack_detector('blabla: runtime error: blabla', flag_manager),
82 flag_manager), 73 StartOfCallStack(0, CallStackFormatType.DEFAULT, LanguageType.CPP, {}))
83 (True, 0, CallStackFormatType.DEFAULT, LanguageType.CPP, {}))
84 # After the ``is_first_stack_flag`` is set to False, the priority will be 74 # After the ``is_first_stack_flag`` is set to False, the priority will be
85 # 1. 75 # 1.
86 self.assertTupleEqual( 76 self.assertTupleEqual(
87 stack_detector.IsStartOfNewCallStack('blabla: runtime error: blabla', 77 stack_detector('blabla: runtime error: blabla', flag_manager),
88 flag_manager), 78 StartOfCallStack(1, CallStackFormatType.DEFAULT, LanguageType.CPP, {}))
89 (True, 1, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) 79 self.assertIsNone(stack_detector('dummy', flag_manager))
90 self.assertTupleEqual(
91 stack_detector.IsStartOfNewCallStack('dummy', flag_manager),
92 (False, None, None, None, None))
93 80
94 def testMsanDetector(self): 81 def testMsanDetector(self):
95 """Tests that ``MsanDetector`` detects memory sanitizer callstack.""" 82 """Tests that ``MsanDetector`` detects memory sanitizer callstack."""
96 stack_detector = callstack_detectors.MsanDetector() 83 stack_detector = callstack_detectors.MsanDetector()
97 self.assertTupleEqual( 84 self.assertTupleEqual(
98 stack_detector.IsStartOfNewCallStack( 85 stack_detector('Uninitialized value was created by'),
99 'Uninitialized value was created by'), 86 StartOfCallStack(0, CallStackFormatType.DEFAULT, LanguageType.CPP, {}))
100 (True, 0, CallStackFormatType.DEFAULT, LanguageType.CPP, {}))
101 # After the ``is_first_stack_flag`` is set to False, the priority will be 87 # After the ``is_first_stack_flag`` is set to False, the priority will be
102 # 1. 88 # 1.
103 self.assertTupleEqual( 89 self.assertTupleEqual(
104 stack_detector.IsStartOfNewCallStack( 90 stack_detector('Uninitialized value was stored to'),
105 'Uninitialized value was stored to'), 91 StartOfCallStack(1, CallStackFormatType.DEFAULT, LanguageType.CPP, {}))
106 (True, 1, CallStackFormatType.DEFAULT, LanguageType.CPP, {}))
107 self.assertTupleEqual( 92 self.assertTupleEqual(
108 stack_detector.IsStartOfNewCallStack( 93 stack_detector('==123== ERROR:MemorySanitizer'),
109 '==123== ERROR:MemorySanitizer'), 94 StartOfCallStack(2, CallStackFormatType.DEFAULT, LanguageType.CPP,
110 (True, 2, CallStackFormatType.DEFAULT, LanguageType.CPP, {'pid': 123})) 95 {'pid': 123}))
111 self.assertTupleEqual( 96 self.assertIsNone(stack_detector('dummy'))
112 stack_detector.IsStartOfNewCallStack('dummy'),
113 (False, None, None, None, None))
114 97
115 def testAsanDetector(self): 98 def testAsanDetector(self):
116 """Tests that ``AsanDetector`` detects address sanitizer callstack.""" 99 """Tests that ``AsanDetector`` detects address sanitizer callstack."""
117 stack_detector = callstack_detectors.AsanDetector() 100 stack_detector = callstack_detectors.AsanDetector()
118 self.assertTupleEqual( 101 self.assertTupleEqual(
119 stack_detector.IsStartOfNewCallStack('==123== ERROR:AddressSanitizer'), 102 stack_detector('==123== ERROR:AddressSanitizer'),
120 (True, 0, CallStackFormatType.DEFAULT, LanguageType.CPP, {'pid': 123})) 103 StartOfCallStack(0, CallStackFormatType.DEFAULT, LanguageType.CPP,
104 {'pid': 123}))
121 # After the ``is_first_stack_flag`` is set to False, the priority will be 105 # After the ``is_first_stack_flag`` is set to False, the priority will be
122 # 1. 106 # 1.
123 self.assertTupleEqual( 107 self.assertTupleEqual(
124 stack_detector.IsStartOfNewCallStack('READ of size 32 at backtrace:'), 108 stack_detector('READ of size 32 at backtrace:'),
125 (True, 0, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) 109 StartOfCallStack(0, CallStackFormatType.DEFAULT, LanguageType.CPP, {}))
126 self.assertTupleEqual( 110 self.assertTupleEqual(
127 stack_detector.IsStartOfNewCallStack('freed by thread T99 here:'), 111 stack_detector('freed by thread T99 here:'),
128 (True, 1, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) 112 StartOfCallStack(1, CallStackFormatType.DEFAULT, LanguageType.CPP, {}))
129 self.assertTupleEqual( 113 self.assertTupleEqual(
130 stack_detector.IsStartOfNewCallStack( 114 stack_detector('previously allocated by thread T1 here:'),
131 'previously allocated by thread T1 here:'), 115 StartOfCallStack(1, CallStackFormatType.DEFAULT, LanguageType.CPP, {}))
132 (True, 1, CallStackFormatType.DEFAULT, LanguageType.CPP, {}))
133 self.assertTupleEqual( 116 self.assertTupleEqual(
134 stack_detector.IsStartOfNewCallStack('Thread T9 created by'), 117 stack_detector('Thread T9 created by'),
135 (True, 1, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) 118 StartOfCallStack(1, CallStackFormatType.DEFAULT, LanguageType.CPP, {}))
136 self.assertTupleEqual( 119 self.assertIsNone(stack_detector('dummy'))
137 stack_detector.IsStartOfNewCallStack('dummy'),
138 (False, None, None, None, None))
139 120
140 def testChromeCrashDetector(self): 121 def testChromeCrashDetector(self):
141 """Tests that ``ChromeCrashDetector`` detects Fracas/Cracas callstack.""" 122 """Tests that ``ChromeCrashDetector`` detects Fracas/Cracas callstack."""
142 stack_detector = callstack_detectors.ChromeCrashStackDetector() 123 stack_detector = callstack_detectors.ChromeCrashStackDetector()
143 124
144 self.assertTupleEqual( 125 self.assertTupleEqual(
145 stack_detector.IsStartOfNewCallStack('CRASHED [EXC @ 0x508]'), 126 stack_detector('CRASHED [EXC @ 0x508]'),
146 (True, 0, CallStackFormatType.DEFAULT, LanguageType.CPP, {})) 127 StartOfCallStack(0, CallStackFormatType.DEFAULT, LanguageType.CPP, {}))
147 self.assertTupleEqual( 128 self.assertTupleEqual(
148 stack_detector.IsStartOfNewCallStack('(JAVA) CRASHED [EXC @ 0x508]'), 129 stack_detector('(JAVA) CRASHED [EXC @ 0x508]'),
149 (True, 0, CallStackFormatType.DEFAULT, LanguageType.JAVA, {})) 130 StartOfCallStack(0, CallStackFormatType.DEFAULT, LanguageType.JAVA, {}))
150 self.assertTupleEqual(stack_detector.IsStartOfNewCallStack('dummy line'), 131 self.assertIsNone(stack_detector('dummy'))
151 (False, None, None, None, None))
OLDNEW
« no previous file with comments | « appengine/findit/crash/stacktrace.py ('k') | appengine/findit/crash/test/stacktrace_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698