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

Unified Diff: appengine/findit/crash/test/project_classifier_test.py

Issue 2657913002: [Predator] Add ``Project`` class and ``ClassifySuspect`` method to project and component classifier (Closed)
Patch Set: Fix nits. 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « appengine/findit/crash/test/predator_testcase.py ('k') | appengine/findit/crash/test/project_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
+ 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')
« no previous file with comments | « appengine/findit/crash/test/predator_testcase.py ('k') | appengine/findit/crash/test/project_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698