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

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

Issue 1914113002: [Findit] Enable project classifier and component classifier (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Rebase Created 4 years, 7 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
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 collections import defaultdict 5 from collections import defaultdict
6 6
7 from common.blame import Region, Blame 7 from common.blame import Region, Blame
8 from common.change_log import ChangeLog 8 from common.change_log import ChangeLog
9 from common.dependency import Dependency, DependencyRoll 9 from common.dependency import Dependency, DependencyRoll
10 from common.git_repository import GitRepository 10 from common.git_repository import GitRepository
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 'revision': '3', 88 'revision': '3',
89 'reverted_revision': None 89 'reverted_revision': None
90 }) 90 })
91 91
92 92
93 class FinditForCrashTest(CrashTestSuite): 93 class FinditForCrashTest(CrashTestSuite):
94 94
95 def testGetDepsInCrashStack(self): 95 def testGetDepsInCrashStack(self):
96 crash_stack = CallStack(0) 96 crash_stack = CallStack(0)
97 crash_stack.extend([ 97 crash_stack.extend([
98 StackFrame(0, 'src/', '', 'func0', 'f0.cc', [1]), 98 StackFrame(0, 'src/', 'func0', 'f0.cc', 'src/f0.cc', [1]),
99 StackFrame(1, 'src/', '', 'func1', 'f1.cc', [2, 3]), 99 StackFrame(1, 'src/', 'func1', 'f1.cc', 'src/f1.cc', [2, 3]),
100 StackFrame(1, '', '', 'func1', 'f1.cc', [3]), 100 StackFrame(1, '', 'func2', 'f2.cc', 'src/f2.cc', [2, 3]),
101 ]) 101 ])
102 crash_deps = {'src/': Dependency('src/', 'https://chromium_repo', '1'), 102 crash_deps = {'src/': Dependency('src/', 'https://chromium_repo', '1'),
103 'src/v8/': Dependency('src/v8/', 'https://v8_repo', '2')} 103 'src/v8/': Dependency('src/v8/', 'https://v8_repo', '2')}
104 104
105 expected_stack_deps = {'src/': crash_deps['src/']} 105 expected_stack_deps = {'src/': crash_deps['src/']}
106 106
107 self.assertEqual( 107 self.assertEqual(
108 findit_for_crash.GetDepsInCrashStack(crash_stack, crash_deps), 108 findit_for_crash.GetDepsInCrashStack(crash_stack, crash_deps),
109 expected_stack_deps) 109 expected_stack_deps)
110 110
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 } 142 }
143 } 143 }
144 self.assertEqual(dep_file_to_changelogs_json, 144 self.assertEqual(dep_file_to_changelogs_json,
145 expected_dep_file_to_changelogs_json) 145 expected_dep_file_to_changelogs_json)
146 self.assertEqual(ignore_cls, set(['1'])) 146 self.assertEqual(ignore_cls, set(['1']))
147 147
148 def testGetStackInfosForFilesGroupedByDeps(self): 148 def testGetStackInfosForFilesGroupedByDeps(self):
149 149
150 main_stack = CallStack(0) 150 main_stack = CallStack(0)
151 main_stack.extend( 151 main_stack.extend(
152 [StackFrame(0, 'src/', '', 'c(p* &d)', 'a.cc', [177]), 152 [StackFrame(0, 'src/', 'c(p* &d)', 'a.cc', 'src/a.cc', [177]),
153 StackFrame(1, 'src/', '', 'd(a* c)', 'a.cc', [227, 228, 229]), 153 StackFrame(1, 'src/', 'd(a* c)', 'a.cc', 'src/a.cc', [227, 228, 229]),
154 StackFrame(2, 'src/v8/', '', 'e(int)', 'b.cc', [87, 88, 89, 90])]) 154 StackFrame(2, 'src/v8/', 'e(int)', 'b.cc', 'src/v8/b.cc', [89, 90])])
155 155
156 low_priority_stack = CallStack(1) 156 low_priority_stack = CallStack(1)
157 low_priority_stack.append( 157 low_priority_stack.append(
158 StackFrame(0, 'src/dummy/', '', 'c(p* &d)', 'd.cc', [17])) 158 StackFrame(0, 'src/dummy/', 'c(p* &d)', 'd.cc', 'src/dummy/d.cc', [17]))
159 159
160 stacktrace = Stacktrace() 160 stacktrace = Stacktrace()
161 stacktrace.extend([main_stack, low_priority_stack]) 161 stacktrace.extend([main_stack, low_priority_stack])
162 162
163 crashed_deps = {'src/': Dependency('src/', 'https//repo', '2'), 163 crashed_deps = {'src/': Dependency('src/', 'https//repo', '2'),
164 'src/v8/': Dependency('src/v8', 'https//repo', '1')} 164 'src/v8/': Dependency('src/v8', 'https//repo', '1')}
165 165
166 expected_dep_file_to_stack_infos = { 166 expected_dep_file_to_stack_infos = {
167 'src/': { 167 'src/': {
168 'a.cc': [ 168 'a.cc': [
(...skipping 30 matching lines...) Expand all
199 'src/': { 199 'src/': {
200 'a.cc': [ 200 'a.cc': [
201 DUMMY_CHANGELOG1, 201 DUMMY_CHANGELOG1,
202 ] 202 ]
203 } 203 }
204 } 204 }
205 205
206 dep_file_to_stack_infos = { 206 dep_file_to_stack_infos = {
207 'src/': { 207 'src/': {
208 'a.cc': [ 208 'a.cc': [
209 (StackFrame(0, 'src/', '', 'func', 'a.cc', [1]), 0), 209 (StackFrame(0, 'src/', 'func', 'a.cc', 'src/a.cc', [1]), 0),
210 (StackFrame(1, 'src/', '', 'func', 'a.cc', [7]), 0), 210 (StackFrame(1, 'src/', 'func', 'a.cc', 'src/a.cc', [7]), 0),
211 ], 211 ],
212 'b.cc': [ 212 'b.cc': [
213 (StackFrame(2, 'src/', '', 'func', 'b.cc', [36]), 0), 213 (StackFrame(2, 'src/', 'func', 'b.cc', 'src/b.cc', [36]), 0),
214 ] 214 ]
215 } 215 }
216 } 216 }
217 217
218 dummy_blame = Blame('9', 'a.cc') 218 dummy_blame = Blame('9', 'a.cc')
219 dummy_blame.AddRegion( 219 dummy_blame.AddRegion(
220 Region(1, 5, '6', 'a', 'a@chromium.org', 'Thu Mar 31 21:24:43 2016')) 220 Region(1, 5, '6', 'a', 'a@chromium.org', 'Thu Mar 31 21:24:43 2016'))
221 dummy_blame.AddRegion( 221 dummy_blame.AddRegion(
222 Region(6, 10, '1', 'b', 'b@chromium.org', 'Thu Jun 19 12:11:40 2015')) 222 Region(6, 10, '1', 'b', 'b@chromium.org', 'Thu Jun 19 12:11:40 2015'))
223 223
(...skipping 19 matching lines...) Expand all
243 243
244 expected_dep_to_changed_file_to_blame = {'src/': {'a.cc': dummy_blame}} 244 expected_dep_to_changed_file_to_blame = {'src/': {'a.cc': dummy_blame}}
245 245
246 match_results, dep_to_changed_file_to_blame = ( 246 match_results, dep_to_changed_file_to_blame = (
247 findit_for_crash.FindMatchResults( 247 findit_for_crash.FindMatchResults(
248 dep_file_to_changelogs, dep_file_to_stack_infos, stack_deps)) 248 dep_file_to_changelogs, dep_file_to_stack_infos, stack_deps))
249 self.assertEqual([result.ToDict() for result in match_results], 249 self.assertEqual([result.ToDict() for result in match_results],
250 expected_match_results) 250 expected_match_results)
251 251
252 for file_path, blame in dep_to_changed_file_to_blame.iteritems(): 252 for file_path, blame in dep_to_changed_file_to_blame.iteritems():
253 print dep_to_changed_file_to_blame
254 self.assertTrue(file_path in expected_dep_to_changed_file_to_blame) 253 self.assertTrue(file_path in expected_dep_to_changed_file_to_blame)
255 self.assertEqual(blame, expected_dep_to_changed_file_to_blame[file_path]) 254 self.assertEqual(blame, expected_dep_to_changed_file_to_blame[file_path])
256 255
257 def testFindItForCrashNoRegressionRange(self): 256 def testFindItForCrashNoRegressionRange(self):
258 self.assertEqual( 257 self.assertEqual(
259 findit_for_crash.FindItForCrash(Stacktrace(), {}, {}), 258 findit_for_crash.FindItForCrash(Stacktrace(), {}, {}),
260 []) 259 [])
261 260
262 def testFindItForCrashNoMatchFound(self): 261 def testFindItForCrashNoMatchFound(self):
263 262
264 def _MockFindMatchResults(*_): 263 def _MockFindMatchResults(*_):
265 return [], {} 264 return [], {}
266 265
267 self.mock(findit_for_crash, 'FindMatchResults', _MockFindMatchResults) 266 self.mock(findit_for_crash, 'FindMatchResults', _MockFindMatchResults)
268 267
269 regression_deps_rolls = {'src/': DependencyRoll('src/', 'https://repo', 268 regression_deps_rolls = {'src/': DependencyRoll('src/', 'https://repo',
270 '1', '2')} 269 '1', '2')}
271 self.assertEqual(findit_for_crash.FindItForCrash( 270 self.assertEqual(findit_for_crash.FindItForCrash(
272 Stacktrace(), regression_deps_rolls, {}), []) 271 Stacktrace(), regression_deps_rolls, {}), [])
273 272
274 def testFindItForCrash(self): 273 def testFindItForCrash(self):
275 274
276 def _MockFindMatchResults(*_): 275 def _MockFindMatchResults(*_):
277 match_result1 = MatchResult(DUMMY_CHANGELOG1, 'src/', '') 276 match_result1 = MatchResult(DUMMY_CHANGELOG1, 'src/', '')
278 match_result1.file_to_stack_infos = { 277 match_result1.file_to_stack_infos = {
279 'a.cc': [ 278 'a.cc': [
280 (StackFrame(0, 'src/', '', 'func', 'a.cc', [1]), 0), 279 (StackFrame(0, 'src/', 'func', 'a.cc', 'src/a.cc', [1]), 0),
281 (StackFrame(1, 'src/', '', 'func', 'a.cc', [7]), 0), 280 (StackFrame(1, 'src/', 'func', 'a.cc', 'src/a.cc', [7]), 0),
282 ] 281 ]
283 } 282 }
284 match_result1.min_distance = 0 283 match_result1.min_distance = 0
285 284
286 match_result2 = MatchResult(DUMMY_CHANGELOG3, 'src/', '') 285 match_result2 = MatchResult(DUMMY_CHANGELOG3, 'src/', '')
287 match_result2.file_to_stack_infos = { 286 match_result2.file_to_stack_infos = {
288 'f.cc': [ 287 'f.cc': [
289 (StackFrame(5, 'src/', '', 'func', 'f.cc', [1]), 0), 288 (StackFrame(5, 'src/', 'func', 'f.cc', 'src/f.cc', [1]), 0),
290 ] 289 ]
291 } 290 }
292 match_result2.min_distance = 20 291 match_result2.min_distance = 20
293 292
294 return [match_result1, match_result2], {} 293 return [match_result1, match_result2], {}
295 294
296 self.mock(findit_for_crash, 'FindMatchResults', _MockFindMatchResults) 295 self.mock(findit_for_crash, 'FindMatchResults', _MockFindMatchResults)
297 296
298 expected_match_results = [ 297 expected_match_results = [
299 { 298 {
(...skipping 13 matching lines...) Expand all
313 '1', '2')} 312 '1', '2')}
314 313
315 self.assertEqual(findit_for_crash.FindItForCrash( 314 self.assertEqual(findit_for_crash.FindItForCrash(
316 Stacktrace(), regression_deps_rolls, {}), expected_match_results) 315 Stacktrace(), regression_deps_rolls, {}), expected_match_results)
317 316
318 def testFinditForCrashFilterZeroConfidentResults(self): 317 def testFinditForCrashFilterZeroConfidentResults(self):
319 def _MockFindMatchResults(*_): 318 def _MockFindMatchResults(*_):
320 match_result1 = MatchResult(DUMMY_CHANGELOG1, 'src/', '') 319 match_result1 = MatchResult(DUMMY_CHANGELOG1, 'src/', '')
321 match_result1.file_to_stack_infos = { 320 match_result1.file_to_stack_infos = {
322 'a.cc': [ 321 'a.cc': [
323 (StackFrame(0, 'src/', '', 'func', 'a.cc', [1]), 0), 322 (StackFrame(0, 'src/', 'func', 'a.cc', 'src/a.cc', [1]), 0),
324 (StackFrame(1, 'src/', '', 'func', 'a.cc', [7]), 0), 323 (StackFrame(1, 'src/', 'func', 'a.cc', 'src/a.cc', [7]), 0),
325 ] 324 ]
326 } 325 }
327 match_result1.min_distance = 1 326 match_result1.min_distance = 1
328 327
329 match_result2 = MatchResult(DUMMY_CHANGELOG3, 'src/', '') 328 match_result2 = MatchResult(DUMMY_CHANGELOG3, 'src/', '')
330 match_result2.file_to_stack_infos = { 329 match_result2.file_to_stack_infos = {
331 'f.cc': [ 330 'f.cc': [
332 (StackFrame(15, 'src/', '', 'func', 'f.cc', [1]), 0), 331 (StackFrame(15, 'src/', 'func', 'f.cc', 'src/f.cc', [1]), 0),
333 ] 332 ]
334 } 333 }
335 match_result2.min_distance = 20 334 match_result2.min_distance = 20
336 335
337 match_result3 = MatchResult(DUMMY_CHANGELOG3, 'src/', '') 336 match_result3 = MatchResult(DUMMY_CHANGELOG3, 'src/', '')
338 match_result3.file_to_stack_infos = { 337 match_result3.file_to_stack_infos = {
339 'f.cc': [ 338 'f.cc': [
340 (StackFrame(3, 'src/', '', 'func', 'ff.cc', [1]), 0), 339 (StackFrame(3, 'src/', 'func', 'ff.cc', 'src/ff.cc', [1]), 0),
341 ] 340 ]
342 } 341 }
343 match_result3.min_distance = 60 342 match_result3.min_distance = 60
344 343
345 return [match_result1, match_result2, match_result3], {} 344 return [match_result1, match_result2, match_result3], {}
346 345
347 self.mock(findit_for_crash, 'FindMatchResults', _MockFindMatchResults) 346 self.mock(findit_for_crash, 'FindMatchResults', _MockFindMatchResults)
348 347
349 expected_match_results = [ 348 expected_match_results = [
350 { 349 {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 385
387 return [match_result1, match_result2], {} 386 return [match_result1, match_result2], {}
388 387
389 self.mock(findit_for_crash, 'FindMatchResults', _MockFindMatchResults) 388 self.mock(findit_for_crash, 'FindMatchResults', _MockFindMatchResults)
390 389
391 regression_deps_rolls = {'src/': DependencyRoll('src/', 'https://repo', 390 regression_deps_rolls = {'src/': DependencyRoll('src/', 'https://repo',
392 '1', '2')} 391 '1', '2')}
393 392
394 self.assertEqual(findit_for_crash.FindItForCrash( 393 self.assertEqual(findit_for_crash.FindItForCrash(
395 Stacktrace(), regression_deps_rolls, {}), []) 394 Stacktrace(), regression_deps_rolls, {}), [])
OLDNEW
« no previous file with comments | « appengine/findit/crash/test/crash_testcase.py ('k') | appengine/findit/crash/test/fracas_crash_pipeline_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698