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..b8e26621b4a43326887c62fe223f047530ad565a 100644 |
--- a/appengine/findit/waterfall/test/build_failure_analysis_pipelines_test.py |
+++ b/appengine/findit/waterfall/test/build_failure_analysis_pipelines_test.py |
@@ -1,30 +1,35 @@ |
-# Copyright (c) 2014 The Chromium Authors. All rights reserved. |
+# Copyright 2014 The Chromium Authors. All rights reserved. |
# 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 |
+from waterfall import lock_util |
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 +38,52 @@ 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 |
+ def _WaitUntilDownloadAllowed(*_): |
+ return True |
+ |
+ self.mock(lock_util, 'WaitUntilDownloadAllowed', _WaitUntilDownloadAllowed) |
+ |
+ # Mock build data in urlfetch. |
+ with self.mock_urlfetch() as urlfetch: |
+ for i in range(3): |
+ build_url = buildbot.CreateBuildUrl( |
+ master_name, builder_name, build_number - i, json_api=True) |
+ 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(build_url, f.read()) |
+ |
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) |
+ analysis = BuildAnalysis.GetBuildAnalysis( |
+ master_name, builder_name, build_number) |
+ self.assertIsNotNone(analysis) |
+ self.assertEqual(BuildAnalysisStatus.ANALYZED, analysis.status) |