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

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

Issue 820113002: [Findit] Add a sub-pipeline to detect first-known failure. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Add appengine/findit/model/test/base_model_test.py Created 5 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
Index: appengine/findit/waterfall/test/build_failure_analysis_pipelines_test.py
diff --git a/appengine/findit/waterfall/test/build_failure_analysis_pipelines_test.py b/appengine/findit/waterfall/test/build_failure_analysis_pipelines_test.py
index 8b40736b3dfad0b3f35bdd7856165767c5d54c6b..3d4dfc00ad2b5387befd6fc07399c1f05fdad8f3 100644
--- a/appengine/findit/waterfall/test/build_failure_analysis_pipelines_test.py
+++ b/appengine/findit/waterfall/test/build_failure_analysis_pipelines_test.py
@@ -2,29 +2,33 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import os
+
from pipeline_utils.appengine_third_party_pipeline_src_pipeline import handlers
from testing_utils import testing
-from model.build import Build
+from model.build_analysis import BuildAnalysis
from model.build_analysis_status import BuildAnalysisStatus
from waterfall import build_failure_analysis_pipelines
+from waterfall import buildbot
class BuildFailureAnalysisPipelinesTest(testing.AppengineTestCase):
app_module = handlers._APP
- def _CreateAndSaveBuild(self, master_name, builder_name, build_number,
- analysis_status):
- build = Build.CreateBuild(master_name, builder_name, build_number)
- build.analysis_status = analysis_status
- build.put()
+ def _CreateAndSaveBuildAnanlysis(
+ self, master_name, builder_name, build_number, status):
+ analysis = BuildAnalysis.CreateBuildAnalysis(
+ master_name, builder_name, build_number)
+ analysis.status = status
+ analysis.put()
def testAnanlysIsNeededWhenBuildWasNeverAnalyzed(self):
master_name = 'm'
builder_name = 'b 1'
build_number = 123
- _, need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis(
+ need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis(
master_name, builder_name, build_number, False)
self.assertTrue(need_analysis)
@@ -33,37 +37,56 @@ class BuildFailureAnalysisPipelinesTest(testing.AppengineTestCase):
master_name = 'm'
builder_name = 'b 1'
build_number = 123
- self._CreateAndSaveBuild(master_name, builder_name, build_number,
+ self._CreateAndSaveBuildAnanlysis(master_name, builder_name, build_number,
BuildAnalysisStatus.ANALYZED)
- build, need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis(
+ need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis(
master_name, builder_name, build_number, False)
self.assertFalse(need_analysis)
- self.assertEqual(BuildAnalysisStatus.ANALYZED, build.analysis_status)
def testNewAnanlysIsNeededWhenForced(self):
master_name = 'm'
builder_name = 'b 1'
build_number = 123
- self._CreateAndSaveBuild(master_name, builder_name, build_number,
+ self._CreateAndSaveBuildAnanlysis(master_name, builder_name, build_number,
BuildAnalysisStatus.ANALYZED)
- _, need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis(
+ need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis(
master_name, builder_name, build_number, True)
self.assertTrue(need_analysis)
- def testAnalysisScheduled(self):
+ def testSuccessfulAnalysisOfBuildFailure(self):
master_name = 'm'
- builder_name = 'b 1'
+ builder_name = 'b'
build_number = 123
- build_failure_analysis_pipelines.ScheduleAnalysisIfNeeded(
- master_name, builder_name, build_number, False, 'default')
-
- self.execute_queued_tasks()
-
- build = Build.GetBuild(master_name, builder_name, build_number)
- self.assertIsNotNone(build)
- self.assertEqual(BuildAnalysisStatus.ANALYZED, build.analysis_status)
+ def _MockFunc(*_):
+ return True
+
+ original_func = build_failure_analysis_pipelines._WaitUntilDownloadAllowed
+ try:
+ build_failure_analysis_pipelines._WaitUntilDownloadAllowed = _MockFunc
+
+ with self.mock_urlfetch() as urlfetch:
+ for i in range(3):
+ file_name = os.path.join(os.path.dirname(__file__), 'data',
+ 'm_b_%s.json' % (build_number - i))
+ with open(file_name, 'r') as f:
+ urlfetch.register_handler(
+ buildbot.CreateBuildUrl(
+ master_name, builder_name, build_number - i, json_api=True),
+ f.read())
qyearsley 2015/01/07 06:59:46 It's not very clear what's happening here -- 1) Ma
stgao 2015/01/09 01:28:23 I add a comment about the purpose of the code. url
+
+ build_failure_analysis_pipelines.ScheduleAnalysisIfNeeded(
+ master_name, builder_name, build_number, False, 'default')
+
+ self.execute_queued_tasks()
+
+ analysis = BuildAnalysis.GetBuildAnalysis(
+ master_name, builder_name, build_number)
+ self.assertIsNotNone(analysis)
+ self.assertEqual(BuildAnalysisStatus.ANALYZED, analysis.status)
+ finally:
+ build_failure_analysis_pipelines._WaitUntilDownloadAllowed = original_func

Powered by Google App Engine
This is Rietveld 408576698