Chromium Code Reviews| Index: appengine/findit/crash/test/project_classifier_test.py |
| diff --git a/appengine/findit/crash/test/project_classifier_test.py b/appengine/findit/crash/test/project_classifier_test.py |
| index c8cc5ee918b42e9e93fc69ebb9dd8626f61d5851..14dda6085436fffe22efc4474b38ec7ab5f207c4 100644 |
| --- a/appengine/findit/crash/test/project_classifier_test.py |
| +++ b/appengine/findit/crash/test/project_classifier_test.py |
| @@ -4,169 +4,86 @@ |
| from crash.stacktrace import StackFrame |
| from crash.stacktrace import CallStack |
| +from crash.project import Project |
| from crash.project_classifier import ProjectClassifier |
| from crash.suspect import Suspect |
| from crash.test.predator_testcase import PredatorTestCase |
| from crash.type_enums import LanguageType |
| +from libs.gitiles.change_log import FileChangeInfo |
| +from libs.gitiles.diff import ChangeType |
| from model.crash.crash_config import CrashConfig |
| class ProjectClassifierTest(PredatorTestCase): |
| - |
| - def testGetProjectNameFromDepPath(self): |
| - classifier = ProjectClassifier() |
| - self.assertEqual(classifier._GetProjectFromDepPath('src/'), |
| - 'chromium') |
| - |
| - self.assertEqual(classifier._GetProjectFromDepPath('src/abc'), |
| - 'chromium-abc') |
| - |
| - self.assertEqual(classifier._GetProjectFromDepPath('unknown/unknown'), |
| - 'chromium-unknown_unknown') |
| - |
| - def testGetClassFromStackFrame(self): |
| - classifier = ProjectClassifier() |
| - |
| - frame = StackFrame(0, 'src/', 'func', 'f.cc', 'src/f.cc', [2]) |
| + """Tests ``ProjectClassifier`` class.""" |
| + |
| + def setUp(self): |
| + super(ProjectClassifierTest, self).setUp() |
| + config = CrashConfig.Get().project_classifier |
| + projects = [Project(name, path_regexs, function_regexs, host_directories) |
| + for name, path_regexs, function_regexs, host_directories |
|
wrengr
2017/01/30 19:14:19
again, should be able to ``map(Project, config['pr
Sharu Jiang
2017/01/30 22:23:52
As above, we cannot do that :(
|
| + in config['project_path_function_hosts']] |
| + self.classifier = ProjectClassifier( |
| + projects, config['top_n'], config['non_chromium_project_rank_priority']) |
| + |
| + def testClassifyCallStack(self): |
| + """Tests ``ClassifyCallStack`` method.""" |
| + callstack = CallStack( |
| + 0, [StackFrame(0, 'src/', 'func', 'f.cc', 'src/f.cc', [2])]) |
| self.assertEqual( |
| - classifier.GetClassFromStackFrame(frame), 'chromium') |
| + self.classifier.ClassifyCallStack(callstack), 'chromium') |
| - frame = StackFrame(0, '', 'android.a', 'comp1.cc', 'src/comp1.cc', [2]) |
| + callstack = CallStack( |
| + 0, [StackFrame(0, '', 'android.a', 'comp1.cc', 'src/comp1.cc', [2])]) |
| self.assertEqual( |
| - classifier.GetClassFromStackFrame(frame), 'android_os') |
| + self.classifier.ClassifyCallStack(callstack), 'android_os') |
| - frame = StackFrame(0, '', 'func', 'comp2.cc', |
| - 'googleplex-android/src/comp2.cc', [32]) |
| + callstack = CallStack( |
| + 0, [StackFrame(0, '', 'func', 'comp2.cc', |
| + 'googleplex-android/src/comp2.cc', [32])]) |
| self.assertEqual( |
| - classifier.GetClassFromStackFrame(frame), 'android_os') |
| + self.classifier.ClassifyCallStack(callstack), 'android_os') |
| - frame = StackFrame(0, '', 'func', 'comp2.cc', 'unknown/comp2.cc', [32]) |
| - self.assertEqual( |
| - classifier.GetClassFromStackFrame(frame), '') |
| + callstack = CallStack( |
| + 0, [StackFrame(0, '', 'func', 'comp2.cc', 'unknown/comp2.cc', [32])]) |
| + self.assertIsNone(self.classifier.ClassifyCallStack(callstack)) |
| - def testGetClassFromSuspect(self): |
| - classifier = ProjectClassifier() |
| + callstack = CallStack( |
| + 0, [StackFrame(0, '', 'android.a.b', 'f.java', 'unknown/f.java', [32])], |
| + language_type=LanguageType.JAVA) |
| + self.assertEqual( |
| + self.classifier.ClassifyCallStack(callstack), 'android_os') |
| + |
| + def testClassifyJavaCallstack(self): |
| + """Tests ``ClassifyCallStack`` classify java callstack.""" |
| + callstack = CallStack( |
| + 0, [StackFrame(0, 'src/', 'org.chromium.ab', |
| + 'f.java', 'unknown/f.java', [32])], |
| + language_type=LanguageType.JAVA) |
| + self.assertEqual( |
| + self.classifier.ClassifyCallStack(callstack), 'chromium') |
| + def testClassifySuspect(self): |
| + """Tests ``ClassifySuspect`` method.""" |
| suspect = Suspect(self.GetDummyChangeLog(), 'src/') |
| - suspect.file_to_stack_infos = {'a.cc': [( |
| - StackFrame(0, 'src/', 'func', 'a.cc', 'src/a.cc', [3]), 0 |
| - )]} |
| - self.assertEqual(classifier.GetClassFromSuspect(suspect), 'chromium') |
| - |
| - suspect.file_to_stack_infos = { |
| - 'comp1.cc': [ |
| - (StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2]), 0) |
| - ] |
| - } |
| - self.assertEqual(classifier.GetClassFromSuspect(suspect), 'chromium') |
| - |
| - def testClassifyCrashStack(self): |
| - classifier = ProjectClassifier() |
| - |
| - crash_stack = CallStack(0, frame_list=[ |
| - StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2]), |
| - StackFrame(1, 'src/', 'ff', 'comp1.cc', 'src/comp1.cc', [21]), |
| - StackFrame(2, 'src/', 'func2', 'comp2.cc', 'src/comp2.cc', [8])]) |
| - |
| - self.assertEqual(classifier.Classify([], crash_stack), 'chromium') |
| - |
| - def testClassifyEmpty(self): |
| - classifier = ProjectClassifier() |
| - suspect = Suspect(self.GetDummyChangeLog(), '') |
| - self.assertEqual(classifier.Classify([suspect], CallStack(0)), '') |
| - |
| - def testClassifyRankFunction(self): |
| - classifier = ProjectClassifier() |
| + self.assertEqual(self.classifier.ClassifySuspect(suspect), 'chromium') |
| - suspect1 = Suspect(self.GetDummyChangeLog(), 'src/') |
| - suspect1.file_to_stack_infos = { |
| - 'comp1.cc': [ |
| - (StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2]), 0) |
| - ] |
| - } |
| - |
| - self.assertEqual(classifier.Classify([suspect1], CallStack(0)), 'chromium') |
| - |
| - suspect2 = Suspect(self.GetDummyChangeLog(), '') |
| - suspect2.file_to_stack_infos = { |
| - 'ad.cc': [ |
| - (StackFrame(0, '', 'android.a', 'ad.cc', 'ad.cc', [2]), 0) |
| - ] |
| - } |
| - |
| - self.assertEqual(classifier.Classify([suspect2], CallStack(0)), |
| - 'android_os') |
| - |
| - self.assertEqual(classifier.Classify([suspect1, suspect2], CallStack(0)), |
| - 'chromium') |
| - |
| - def testClassifyForJavaRankFunction(self): |
| - classifier = ProjectClassifier() |
| - crash_stack = CallStack(0, |
| - language_type=LanguageType.JAVA, |
| - frame_list=[ |
| - StackFrame(0, '', 'android.a.f', 'android/a/cc', |
| - 'android/a.java', [2]), |
| - StackFrame(1, '', 'org.chromium.c', 'org/chromium/c.java', |
| - 'org/chromium/c.java', [8]) |
| - ]) |
| - |
| - self.assertEqual(classifier.Classify([], crash_stack), |
| - 'chromium') |
| + def testClassifyEmptySuspect(self): |
| + """Tests ``ClassifySuspect`` returns None for empty suspect.""" |
| + self.assertIsNone(self.classifier.ClassifySuspect(None)) |
| - # TODO(wrengr): what's the point of this? we're just testing that |
| - # mocking does in fact mock. |
| - def testClassifyReturnsNone(self): |
| - self.mock(ProjectClassifier, 'Classify', lambda *_: None) |
| - self.assertIsNone(ProjectClassifier().Classify([], CallStack(0))) |
| - |
| - def testProjectClassifierDoNotHaveConfig(self): |
| - crash_config = CrashConfig.Get() |
| - crash_config.project_classifier = {} |
| - crash_config.put() |
| - |
| - crash_stack = CallStack(0, frame_list=[ |
| - StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2]), |
| - StackFrame(1, 'src/', 'ff', 'comp1.cc', 'src/comp1.cc', [21]), |
| - StackFrame(2, 'src/', 'func2', 'comp2.cc', 'src/comp2.cc', [8])]) |
| + def testClassifySuspectNoTouchedFileMatch(self): |
| + """Tests ``ClassifySuspect`` returns None if there is no file match.""" |
| + suspect = Suspect(self.GetDummyChangeLog(), 'dummy') |
| + suspect.touched_files = [FileChangeInfo(ChangeType.MODIFY, |
| + 'a/b.h', 'a/b.h')] |
| + self.assertIsNone(self.classifier.ClassifySuspect(suspect)) |
| + def testClassifySuspects(self): |
| + """Tests ``ClassifySuspects`` classify a list of ``Suspect``s.""" |
| suspect1 = Suspect(self.GetDummyChangeLog(), 'src/') |
| - suspect1.file_to_stack_infos = { |
| - 'comp1.cc': [ |
| - (StackFrame(0, 'src/', 'func', 'comp1.cc', 'src/comp1.cc', [2]), 0) |
| - ] |
| - } |
| - |
| - self.assertIsNone(ProjectClassifier().Classify([suspect1], crash_stack)) |
| - |
| - def testSortHosts(self): |
| - host_list = [ |
| - 'src/', |
| - 'src/chrome/browser/resources/', |
| - 'src/media/', |
| - 'src/sdch/', |
| - 'src/testing/', |
| - 'src/third_party/WebKit/', |
| - 'src/third_party/', |
| - 'src/tools/', |
| - 'src/chrome/test/data/layout_tests/' |
| - ] |
| + suspect2 = Suspect(self.GetDummyChangeLog(), 'src/dep') |
| + suspect3 = Suspect(self.GetDummyChangeLog(), 'src/dep') |
| - crash_config = CrashConfig.Get() |
| - crash_config.project_classifier['host_directories'] = host_list |
| - |
| - expected_sorted_host_list = [ |
| - 'src/chrome/test/data/layout_tests/', |
| - 'src/chrome/browser/resources/', |
| - 'src/third_party/WebKit/', |
| - 'src/media/', |
| - 'src/sdch/', |
| - 'src/testing/', |
| - 'src/third_party/', |
| - 'src/tools/', |
| - 'src/' |
| - ] |
| - |
| - self.assertEqual( |
| - ProjectClassifier().project_classifier_config['host_directories'], |
| - expected_sorted_host_list) |
| + self.assertEqual(self.classifier.ClassifySuspects( |
| + [suspect1, suspect2, suspect3]), 'chromium-dep') |