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

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

Issue 2338273006: [Findit] Factoring out the components, so they can classify themselves (Closed)
Patch Set: Created 4 years, 3 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 common.pipeline_wrapper import pipeline_handlers 5 from common.pipeline_wrapper import pipeline_handlers
6 from crash.callstack import StackFrame, CallStack 6 from crash.callstack import StackFrame, CallStack
7 from crash.component import Component
7 from crash.component_classifier import ComponentClassifier 8 from crash.component_classifier import ComponentClassifier
8 from crash.results import Result 9 from crash.results import Result
9 from crash.test.crash_testcase import CrashTestCase 10 from crash.test.crash_testcase import CrashTestCase
10 from model.crash.crash_config import CrashConfig 11 from model.crash.crash_config import CrashConfig
11 12
12 13
14 # N.B., the call to Get() in CrashConfigComponentClassifier.__init__
15 # must only be executed from within the testFoo methods of
16 # ComponentClassifierTest. That is, we can't just do this once and for all
17 # when doing ComponentClassifierTest.__init__, because that'll cause some
18 # strange issues in mocking. But factoring it out like this so it gets
Sharu Jiang 2016/09/20 00:31:29 You should do this in ComponentClassifierTest.setU
wrengr 2016/09/27 22:00:40 I agree it shouldn't, but it does.
19 # (re)called ever time a testFoo is run, that works.
20 class CrashConfigComponentClassifier(ComponentClassifier):
21 """A ComponentClassifier which gets its components from CrashConfig."""
22 def __init__(self):
23 config = CrashConfig.Get().component_classifier
24 super(CrashConfigComponentClassifier, self).__init__(
25 [ Component(name, path, function)
Sharu Jiang 2016/09/20 00:31:29 nit: no space after [
wrengr 2016/09/27 22:00:40 Done.
26 for path, function, name
27 in config.get('path_function_component', [])],
28 config.get('top_n', 0))
29
30
13 class ComponentClassifierTest(CrashTestCase): 31 class ComponentClassifierTest(CrashTestCase):
14 32
15 def testGetClassFromStackFrame(self): 33 def testGetClassFromStackFrame(self):
16 frame = StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2]) 34 frame = StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2])
17 self.assertEqual( 35 self.assertEqual(
18 ComponentClassifier().GetClassFromStackFrame(frame), 36 CrashConfigComponentClassifier().GetClassFromStackFrame(frame),
19 'Comp1>Dummy') 37 'Comp1>Dummy')
20 38
21 frame = StackFrame(0, 'src/', 'func2', 'comp2.cc', 'src/comp2.cc', [32]) 39 frame = StackFrame(0, 'src/', 'func2', 'comp2.cc', 'src/comp2.cc', [32])
22 self.assertEqual( 40 self.assertEqual(
23 ComponentClassifier().GetClassFromStackFrame(frame), 41 CrashConfigComponentClassifier().GetClassFromStackFrame(frame),
24 'Comp2>Dummy') 42 'Comp2>Dummy')
25 43
26 frame = StackFrame(0, 'src/', 'no_func', 'comp2.cc', 'src/comp2.cc', [32]) 44 frame = StackFrame(0, 'src/', 'no_func', 'comp2.cc', 'src/comp2.cc', [32])
27 self.assertEqual( 45 self.assertEqual(
28 ComponentClassifier().GetClassFromStackFrame(frame), 46 CrashConfigComponentClassifier().GetClassFromStackFrame(frame),
29 '') 47 '')
30 48
31 frame = StackFrame(0, 'src/', 'func2', 'a.cc', 'src/a.cc', [6]) 49 frame = StackFrame(0, 'src/', 'func2', 'a.cc', 'src/a.cc', [6])
32 self.assertEqual( 50 self.assertEqual(
33 ComponentClassifier().GetClassFromStackFrame(frame), 51 CrashConfigComponentClassifier().GetClassFromStackFrame(frame),
34 '') 52 '')
35 53
36 def testGetClassFromResult(self): 54 def testGetClassFromResult(self):
37 result = Result(self.GetDummyChangeLog(), 'src/') 55 result = Result(self.GetDummyChangeLog(), 'src/')
38 self.assertEqual(ComponentClassifier().GetClassFromResult(result), 56 self.assertEqual(
39 '') 57 CrashConfigComponentClassifier().GetClassFromResult(result),
58 '')
40 59
41 result.file_to_stack_infos = { 60 result.file_to_stack_infos = {
42 'comp1.cc': [ 61 'comp1.cc': [
43 (StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2]), 0) 62 (StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2]), 0)
44 ] 63 ]
45 } 64 }
46 self.assertEqual(ComponentClassifier().GetClassFromResult(result), 65 self.assertEqual(
47 'Comp1>Dummy') 66 CrashConfigComponentClassifier().GetClassFromResult(result),
67 'Comp1>Dummy')
48 68
49 def testClassifyCrashStack(self): 69 def testClassifyCrashStack(self):
50 crash_stack = CallStack(0) 70 crash_stack = CallStack(0)
51 crash_stack.extend([ 71 crash_stack.extend([
52 StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2]), 72 StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2]),
53 StackFrame(1, 'src/', 'ff', 'comp1.cc', 'src/comp1.cc', [21]), 73 StackFrame(1, 'src/', 'ff', 'comp1.cc', 'src/comp1.cc', [21]),
54 StackFrame(2, 'src/', 'func2', 'comp2.cc', 'src/comp2.cc', [8]) 74 StackFrame(2, 'src/', 'func2', 'comp2.cc', 'src/comp2.cc', [8])
55 ]) 75 ])
56 76
57 self.assertEqual(ComponentClassifier().Classify([], crash_stack), 77 self.assertEqual(CrashConfigComponentClassifier().Classify([], crash_stack),
58 ['Comp1>Dummy', 'Comp2>Dummy']) 78 ['Comp1>Dummy', 'Comp2>Dummy'])
59 79
60 def testClassifyResults(self): 80 def testClassifyResults(self):
61 result = Result(self.GetDummyChangeLog(), 'src/') 81 result = Result(self.GetDummyChangeLog(), 'src/')
62 result.file_to_stack_infos = { 82 result.file_to_stack_infos = {
63 'comp1.cc': [ 83 'comp1.cc': [
64 (StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2]), 0) 84 (StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2]), 0)
65 ] 85 ]
66 } 86 }
67 87
68 self.assertEqual(ComponentClassifier().Classify([result], CallStack(0)), 88 self.assertEqual(
69 ['Comp1>Dummy']) 89 CrashConfigComponentClassifier().Classify([result], CallStack(0)),
90 ['Comp1>Dummy'])
70 91
71 def testClassifierDoNotHaveConfig(self): 92 def testClassifierDoNotHaveConfig(self):
72 crash_config = CrashConfig.Get() 93 crash_config = CrashConfig.Get()
73 crash_config.component_classifier = {} 94 crash_config.component_classifier = {}
74 95
75 crash_stack = CallStack(0) 96 crash_stack = CallStack(0)
76 crash_stack.extend([ 97 crash_stack.extend([
77 StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2]), 98 StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2]),
78 StackFrame(1, 'src/', 'ff', 'comp1.cc', 'src/comp1.cc', [21]), 99 StackFrame(1, 'src/', 'ff', 'comp1.cc', 'src/comp1.cc', [21]),
79 StackFrame(2, 'src/', 'func2', 'comp2.cc', 'src/comp2.cc', [8]) 100 StackFrame(2, 'src/', 'func2', 'comp2.cc', 'src/comp2.cc', [8])
80 ]) 101 ])
81 102
82 result = Result(self.GetDummyChangeLog(), 'src/') 103 result = Result(self.GetDummyChangeLog(), 'src/')
83 result.file_to_stack_infos = { 104 result.file_to_stack_infos = {
84 'comp1.cc': [ 105 'comp1.cc': [
85 (StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2]), 0) 106 (StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2]), 0)
86 ] 107 ]
87 } 108 }
88 109
89 self.assertEqual(ComponentClassifier().Classify([result], crash_stack), 110 self.assertEqual(
90 []) 111 CrashConfigComponentClassifier().Classify([result], crash_stack),
112 [])
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698