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

Side by Side 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: Address comments 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 unified diff | Download patch
OLDNEW
1 # Copyright (c) 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import os
6
5 from pipeline_utils.appengine_third_party_pipeline_src_pipeline import handlers 7 from pipeline_utils.appengine_third_party_pipeline_src_pipeline import handlers
6 from testing_utils import testing 8 from testing_utils import testing
7 9
8 from model.build import Build 10 from model.build_analysis import BuildAnalysis
9 from model.build_analysis_status import BuildAnalysisStatus 11 from model.build_analysis_status import BuildAnalysisStatus
10 from waterfall import build_failure_analysis_pipelines 12 from waterfall import build_failure_analysis_pipelines
13 from waterfall import buildbot
14 from waterfall import lock_util
11 15
12 16
13 class BuildFailureAnalysisPipelinesTest(testing.AppengineTestCase): 17 class BuildFailureAnalysisPipelinesTest(testing.AppengineTestCase):
14 app_module = handlers._APP 18 app_module = handlers._APP
15 19
16 def _CreateAndSaveBuild(self, master_name, builder_name, build_number, 20 def _CreateAndSaveBuildAnanlysis(
17 analysis_status): 21 self, master_name, builder_name, build_number, status):
18 build = Build.CreateBuild(master_name, builder_name, build_number) 22 analysis = BuildAnalysis.CreateBuildAnalysis(
19 build.analysis_status = analysis_status 23 master_name, builder_name, build_number)
20 build.put() 24 analysis.status = status
25 analysis.put()
21 26
22 def testAnanlysIsNeededWhenBuildWasNeverAnalyzed(self): 27 def testAnanlysIsNeededWhenBuildWasNeverAnalyzed(self):
23 master_name = 'm' 28 master_name = 'm'
24 builder_name = 'b 1' 29 builder_name = 'b 1'
25 build_number = 123 30 build_number = 123
26 31
27 _, need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis( 32 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis(
28 master_name, builder_name, build_number, False) 33 master_name, builder_name, build_number, False)
29 34
30 self.assertTrue(need_analysis) 35 self.assertTrue(need_analysis)
31 36
32 def testNewAnalysisIsNotNeededWhenNotForced(self): 37 def testNewAnalysisIsNotNeededWhenNotForced(self):
33 master_name = 'm' 38 master_name = 'm'
34 builder_name = 'b 1' 39 builder_name = 'b 1'
35 build_number = 123 40 build_number = 123
36 self._CreateAndSaveBuild(master_name, builder_name, build_number, 41 self._CreateAndSaveBuildAnanlysis(master_name, builder_name, build_number,
37 BuildAnalysisStatus.ANALYZED) 42 BuildAnalysisStatus.ANALYZED)
38 43
39 build, need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis( 44 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis(
40 master_name, builder_name, build_number, False) 45 master_name, builder_name, build_number, False)
41 46
42 self.assertFalse(need_analysis) 47 self.assertFalse(need_analysis)
43 self.assertEqual(BuildAnalysisStatus.ANALYZED, build.analysis_status)
44 48
45 def testNewAnanlysIsNeededWhenForced(self): 49 def testNewAnanlysIsNeededWhenForced(self):
46 master_name = 'm' 50 master_name = 'm'
47 builder_name = 'b 1' 51 builder_name = 'b 1'
48 build_number = 123 52 build_number = 123
49 self._CreateAndSaveBuild(master_name, builder_name, build_number, 53 self._CreateAndSaveBuildAnanlysis(master_name, builder_name, build_number,
50 BuildAnalysisStatus.ANALYZED) 54 BuildAnalysisStatus.ANALYZED)
51 55
52 _, need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis( 56 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis(
53 master_name, builder_name, build_number, True) 57 master_name, builder_name, build_number, True)
54 58
55 self.assertTrue(need_analysis) 59 self.assertTrue(need_analysis)
56 60
57 def testAnalysisScheduled(self): 61 def testSuccessfulAnalysisOfBuildFailure(self):
58 master_name = 'm' 62 master_name = 'm'
59 builder_name = 'b 1' 63 builder_name = 'b'
60 build_number = 123 64 build_number = 123
61 65
66 def _WaitUntilDownloadAllowed(*_):
67 return True
68
69 self.mock(lock_util, 'WaitUntilDownloadAllowed', _WaitUntilDownloadAllowed)
70
71 # Mock build data in urlfetch.
72 with self.mock_urlfetch() as urlfetch:
73 for i in range(3):
74 build_url = buildbot.CreateBuildUrl(
75 master_name, builder_name, build_number - i, json_api=True)
76 file_name = os.path.join(os.path.dirname(__file__), 'data',
77 'm_b_%s.json' % (build_number - i))
78 with open(file_name, 'r') as f:
79 urlfetch.register_handler(build_url, f.read())
80
62 build_failure_analysis_pipelines.ScheduleAnalysisIfNeeded( 81 build_failure_analysis_pipelines.ScheduleAnalysisIfNeeded(
63 master_name, builder_name, build_number, False, 'default') 82 master_name, builder_name, build_number, False, 'default')
64 83
65 self.execute_queued_tasks() 84 self.execute_queued_tasks()
66 85
67 build = Build.GetBuild(master_name, builder_name, build_number) 86 analysis = BuildAnalysis.GetBuildAnalysis(
68 self.assertIsNotNone(build) 87 master_name, builder_name, build_number)
69 self.assertEqual(BuildAnalysisStatus.ANALYZED, build.analysis_status) 88 self.assertIsNotNone(analysis)
89 self.assertEqual(BuildAnalysisStatus.ANALYZED, analysis.status)
OLDNEW
« no previous file with comments | « appengine/findit/waterfall/lock_util.py ('k') | appengine/findit/waterfall/test/data/m_b_121.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698