| 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.callstack import StackFrame, CallStack |
| 6 from crash.project_classifier import ProjectClassifier |
| 7 from crash.results import Result |
| 8 from crash.test.crash_testcase import CrashTestCase |
| 9 from crash.type_enums import CallStackLanguageType |
| 10 |
| 11 |
| 12 class ProjectClassifierTest(CrashTestCase): |
| 13 |
| 14 def testGetProjectNameFromDepPath(self): |
| 15 classifier = ProjectClassifier() |
| 16 self.assertEqual(classifier._GetProjectNameFromDepPath('src/'), |
| 17 'chromium') |
| 18 |
| 19 self.assertEqual(classifier._GetProjectNameFromDepPath('src/abc'), |
| 20 'chromium-abc') |
| 21 |
| 22 self.assertEqual(classifier._GetProjectNameFromDepPath('unknown/unknown'), |
| 23 'chromium-unknown_unknown') |
| 24 |
| 25 def testGetClassFromStackFrame(self): |
| 26 classifier = ProjectClassifier() |
| 27 |
| 28 frame = StackFrame(0, 'src/', 'func', 'f.cc', 'src/f.cc', [2]) |
| 29 self.assertEqual( |
| 30 classifier.GetClassFromStackFrame(frame), |
| 31 ('chromium', 'src/')) |
| 32 |
| 33 frame = StackFrame(0, '', 'android.a', 'comp1.cc', 'src/comp1.cc', [2]) |
| 34 self.assertEqual( |
| 35 classifier.GetClassFromStackFrame(frame), |
| 36 ('android_os', '')) |
| 37 |
| 38 frame = StackFrame(0, '', 'func', 'comp2.cc', |
| 39 'googleplex-android/src/comp2.cc', [32]) |
| 40 self.assertEqual( |
| 41 classifier.GetClassFromStackFrame(frame), |
| 42 ('android_os', '')) |
| 43 |
| 44 frame = StackFrame(0, '', 'func', 'comp2.cc', 'unknown/comp2.cc', [32]) |
| 45 self.assertEqual( |
| 46 classifier.GetClassFromStackFrame(frame), |
| 47 ('others', '')) |
| 48 |
| 49 def testGetClassFromResult(self): |
| 50 classifier = ProjectClassifier() |
| 51 |
| 52 result = Result(self.GetDummyChangeLog(), 'src/') |
| 53 self.assertEqual(classifier.GetClassFromResult(result), |
| 54 ('chromium', 'src/')) |
| 55 |
| 56 result.file_to_stack_infos = { |
| 57 'comp1.cc': [ |
| 58 (StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2]), 0) |
| 59 ] |
| 60 } |
| 61 self.assertEqual(classifier.GetClassFromResult(result), |
| 62 ('chromium', 'src/')) |
| 63 |
| 64 def testClassifyCrashStack(self): |
| 65 classifier = ProjectClassifier() |
| 66 |
| 67 crash_stack = CallStack(0) |
| 68 crash_stack.extend([ |
| 69 StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2]), |
| 70 StackFrame(1, 'src/', 'ff', 'comp1.cc', 'src/comp1.cc', [21]), |
| 71 StackFrame(2, 'src/', 'func2', 'comp2.cc', 'src/comp2.cc', [8]) |
| 72 ]) |
| 73 |
| 74 self.assertEqual(classifier.Classify([], crash_stack), |
| 75 'chromium (src/)') |
| 76 |
| 77 def testClassifyResultsEmpty(self): |
| 78 classifier = ProjectClassifier() |
| 79 |
| 80 result = Result(self.GetDummyChangeLog(), '') |
| 81 self.assertEqual(classifier.Classify([result], CallStack(0)), |
| 82 'others') |
| 83 |
| 84 def testClassifyRankFunction(self): |
| 85 classifier = ProjectClassifier() |
| 86 |
| 87 result1 = Result(self.GetDummyChangeLog(), 'src/') |
| 88 result1.file_to_stack_infos = { |
| 89 'comp1.cc': [ |
| 90 (StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2]), 0) |
| 91 ] |
| 92 } |
| 93 |
| 94 self.assertEqual(classifier.Classify([result1], CallStack(0)), |
| 95 'chromium (src/)') |
| 96 |
| 97 result2 = Result(self.GetDummyChangeLog(), '') |
| 98 result2.file_to_stack_infos = { |
| 99 'ad.cc': [ |
| 100 (StackFrame(0, '', 'android.a', 'ad.cc', 'ad.cc', [2]), 0) |
| 101 ] |
| 102 } |
| 103 |
| 104 self.assertEqual(classifier.Classify([result2], CallStack(0)), |
| 105 'android_os') |
| 106 |
| 107 self.assertEqual(classifier.Classify([result1, result2], CallStack(0)), |
| 108 'chromium (src/)') |
| 109 |
| 110 def testClassifyForJavaRankFunction(self): |
| 111 classifier = ProjectClassifier() |
| 112 |
| 113 crash_stack = CallStack(0) |
| 114 crash_stack.language_type = CallStackLanguageType.JAVA |
| 115 |
| 116 crash_stack.extend([ |
| 117 StackFrame(0, '', 'android.a.f', 'android/a/cc', |
| 118 'android/a.java', [2]), |
| 119 StackFrame(1, '', 'org.chromium.c', 'org/chromium/c.java', |
| 120 'org/chromium/c.java', [8]) |
| 121 ]) |
| 122 |
| 123 self.assertEqual(classifier.Classify([], crash_stack), |
| 124 'chromium') |
| 125 |
| 126 def testClassifyReturnsNone(self): |
| 127 def _MockClassify(*_, **args): |
| 128 self.assertIsNotNone(args) |
| 129 return None |
| 130 |
| 131 self.mock(ProjectClassifier, '_Classify', _MockClassify) |
| 132 |
| 133 classifier = ProjectClassifier() |
| 134 self.assertEqual(classifier.Classify([], CallStack(0)), |
| 135 'others') |
| OLD | NEW |