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

Unified Diff: appengine/findit/waterfall/test/identify_culprit_pipeline_test.py

Issue 2230103002: [Findit] Pipeline change to save suspected cls to data store. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@0808-resubmit-suspected_cl_model
Patch Set: Created 4 years, 4 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
Index: appengine/findit/waterfall/test/identify_culprit_pipeline_test.py
diff --git a/appengine/findit/waterfall/test/identify_culprit_pipeline_test.py b/appengine/findit/waterfall/test/identify_culprit_pipeline_test.py
index 9d4bcdce1ff46ea75beaac3819d3292587289184..45200c565207f0f242aaa2f895d03df7c5765b19 100644
--- a/appengine/findit/waterfall/test/identify_culprit_pipeline_test.py
+++ b/appengine/findit/waterfall/test/identify_culprit_pipeline_test.py
@@ -5,9 +5,12 @@
from testing_utils import testing
from common.pipeline_wrapper import pipeline_handlers
+from common.waterfall import failure_type
+from model import analysis_approach_type
from model import analysis_status
from model import result_status
from model.wf_analysis import WfAnalysis
+from model.wf_suspected_cl import WfSuspectedCL
from waterfall import build_failure_analysis
from waterfall import identify_culprit_pipeline
@@ -201,6 +204,8 @@ class IdentifyCulpritPipelineTest(testing.AppengineTestCase):
master_name = 'm'
builder_name = 'b'
build_number = 123
+ repo_name = 'chromium'
+ revision = 'r99_1'
analysis = WfAnalysis.Create(master_name, builder_name, build_number)
analysis.result = None
@@ -211,12 +216,34 @@ class IdentifyCulpritPipelineTest(testing.AppengineTestCase):
'master_name': master_name,
'builder_name': builder_name,
'build_number': build_number,
+ 'failure_type': failure_type.TEST
}
change_logs = {}
deps_info = {}
signals = {}
- dummy_result = {'failures': []}
+ dummy_result = {
+ 'failures': [
+ {
+ 'step_name': 'a',
+ 'first_failure': 98,
+ 'last_pass': None,
+ 'suspected_cls': [
+ {
+ 'build_number': 99,
+ 'repo_name': repo_name,
+ 'revision': revision,
+ 'commit_position': None,
+ 'url': None,
+ 'score': 1,
+ 'hints': {
+ 'modified f99_2.cc (and it was in log)': 1,
+ },
+ }
+ ],
+ }
+ ]
+ }
def MockAnalyzeBuildFailure(*_):
return dummy_result
@@ -229,12 +256,108 @@ class IdentifyCulpritPipelineTest(testing.AppengineTestCase):
pipeline.start()
self.execute_queued_tasks()
- expected_suspected_cls = []
+ expected_suspected_cls = [
+ {
+ 'repo_name': repo_name,
+ 'revision': revision,
+ 'commit_position': None,
+ 'url': None
+ }
+ ]
analysis = WfAnalysis.Get(master_name, builder_name, build_number)
self.assertTrue(analysis.build_completed)
self.assertIsNotNone(analysis)
self.assertEqual(dummy_result, analysis.result)
self.assertEqual(analysis_status.COMPLETED, analysis.status)
- self.assertIsNone(analysis.result_status)
+ self.assertIsNotNone(analysis.result_status)
self.assertEqual(expected_suspected_cls, analysis.suspected_cls)
+
+ suspected_cl = WfSuspectedCL.Get(repo_name, revision)
+ self.assertIsNotNone(suspected_cl)
+ self.assertEqual(
+ [[master_name, builder_name, build_number]], suspected_cl.builds)
+
+ def testCreateWfSuspectedCL(self):
+ build_info = ['m', 'b', 123]
+ compile_failure_type = failure_type.COMPILE
+ repo_name = 'chromium'
+ revision = 'r1'
+ commit_position = 1
+
+ self.assertIsNone(WfSuspectedCL.Get(repo_name, revision))
+
+ identify_culprit_pipeline._SaveSuspectedCL(
+ build_info, compile_failure_type, repo_name, revision, commit_position)
+
+ suspected_cl = WfSuspectedCL.Get(repo_name, revision)
+
+ self.assertIsNotNone(suspected_cl)
+ self.assertEqual(analysis_approach_type.HEURISTIC, suspected_cl.approach)
+ self.assertEqual(compile_failure_type, suspected_cl.failure_type)
+ self.assertEqual([build_info], suspected_cl.builds)
+
+ def testUpdateWfSuspectedCL(self):
+ build_info = ['m', 'b', 122]
+ test_failure_type = failure_type.TEST
+ repo_name = 'chromium'
+ revision = 'r2'
+ commit_position = 2
+
+ suspected_cl = WfSuspectedCL.Create(repo_name, revision, commit_position)
+ suspected_cl.approach = analysis_approach_type.TRY_JOB
+ suspected_cl.builds.append(['m', 'b1', 100])
+ suspected_cl.failure_type = test_failure_type
+ suspected_cl.put()
+
+ identify_culprit_pipeline._SaveSuspectedCL(
+ build_info, test_failure_type, repo_name, revision, commit_position)
+
+ suspected_cl = WfSuspectedCL.Get(repo_name, revision)
+
+ self.assertIsNotNone(suspected_cl)
+ self.assertEqual(analysis_approach_type.BOTH, suspected_cl.approach)
+ self.assertEqual(test_failure_type, suspected_cl.failure_type)
+ self.assertEqual([['m', 'b1', 100], build_info], suspected_cl.builds)
+
+ def testUpdateWfSuspectedCLAddanotherHeuristic(self):
+ build_info = ['m', 'b', 122]
+ test_failure_type = failure_type.TEST
+ repo_name = 'chromium'
+ revision = 'r2'
+ commit_position = 2
+
+ suspected_cl = WfSuspectedCL.Create(repo_name, revision, commit_position)
+ suspected_cl.approach = analysis_approach_type.HEURISTIC
+ suspected_cl.put()
+
+ identify_culprit_pipeline._SaveSuspectedCL(
+ build_info, test_failure_type, repo_name, revision, commit_position)
+
+ suspected_cl = WfSuspectedCL.Get(repo_name, revision)
+
+ self.assertEqual(analysis_approach_type.HEURISTIC, suspected_cl.approach)
+
+ def testUpdateWfSuspectedCLRerun(self):
+ build_info = ['m', 'b', 122]
+ test_failure_type = failure_type.TEST
+ repo_name = 'chromium'
+ revision = 'r2'
+ commit_position = 2
+
+ suspected_cl = WfSuspectedCL.Create(repo_name, revision, commit_position)
+ suspected_cl.builds = [build_info]
+ suspected_cl.put()
+
+ identify_culprit_pipeline._SaveSuspectedCL(
+ build_info, test_failure_type, repo_name, revision, commit_position)
+
+ suspected_cl = WfSuspectedCL.Get(repo_name, revision)
+
+ self.assertEqual([build_info], suspected_cl.builds)
+
+ def testGetResultAnalysisStatusNone(self):
+ self.assertIsNone(identify_culprit_pipeline._GetResultAnalysisStatus([]))
+
+ def testGetSuspectedCLsEmpty(self):
+ self.assertEqual([], identify_culprit_pipeline._GetSuspectedCLs([]))

Powered by Google App Engine
This is Rietveld 408576698