| 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)
|
|
|