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

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: 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 unified diff | Download patch
OLDNEW
1 # Copyright (c) 2014 The Chromium Authors. All rights reserved. 1 # Copyright (c) 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
11 14
12 15
13 class BuildFailureAnalysisPipelinesTest(testing.AppengineTestCase): 16 class BuildFailureAnalysisPipelinesTest(testing.AppengineTestCase):
14 app_module = handlers._APP 17 app_module = handlers._APP
15 18
16 def _CreateAndSaveBuild(self, master_name, builder_name, build_number, 19 def _CreateAndSaveBuildAnanlysis(
17 analysis_status): 20 self, master_name, builder_name, build_number, status):
18 build = Build.CreateBuild(master_name, builder_name, build_number) 21 analysis = BuildAnalysis.CreateBuildAnalysis(
19 build.analysis_status = analysis_status 22 master_name, builder_name, build_number)
20 build.put() 23 analysis.status = status
24 analysis.put()
21 25
22 def testAnanlysIsNeededWhenBuildWasNeverAnalyzed(self): 26 def testAnanlysIsNeededWhenBuildWasNeverAnalyzed(self):
23 master_name = 'm' 27 master_name = 'm'
24 builder_name = 'b 1' 28 builder_name = 'b 1'
25 build_number = 123 29 build_number = 123
26 30
27 _, need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis( 31 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis(
28 master_name, builder_name, build_number, False) 32 master_name, builder_name, build_number, False)
29 33
30 self.assertTrue(need_analysis) 34 self.assertTrue(need_analysis)
31 35
32 def testNewAnalysisIsNotNeededWhenNotForced(self): 36 def testNewAnalysisIsNotNeededWhenNotForced(self):
33 master_name = 'm' 37 master_name = 'm'
34 builder_name = 'b 1' 38 builder_name = 'b 1'
35 build_number = 123 39 build_number = 123
36 self._CreateAndSaveBuild(master_name, builder_name, build_number, 40 self._CreateAndSaveBuildAnanlysis(master_name, builder_name, build_number,
37 BuildAnalysisStatus.ANALYZED) 41 BuildAnalysisStatus.ANALYZED)
38 42
39 build, need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis( 43 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis(
40 master_name, builder_name, build_number, False) 44 master_name, builder_name, build_number, False)
41 45
42 self.assertFalse(need_analysis) 46 self.assertFalse(need_analysis)
43 self.assertEqual(BuildAnalysisStatus.ANALYZED, build.analysis_status)
44 47
45 def testNewAnanlysIsNeededWhenForced(self): 48 def testNewAnanlysIsNeededWhenForced(self):
46 master_name = 'm' 49 master_name = 'm'
47 builder_name = 'b 1' 50 builder_name = 'b 1'
48 build_number = 123 51 build_number = 123
49 self._CreateAndSaveBuild(master_name, builder_name, build_number, 52 self._CreateAndSaveBuildAnanlysis(master_name, builder_name, build_number,
50 BuildAnalysisStatus.ANALYZED) 53 BuildAnalysisStatus.ANALYZED)
51 54
52 _, need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis( 55 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis(
53 master_name, builder_name, build_number, True) 56 master_name, builder_name, build_number, True)
54 57
55 self.assertTrue(need_analysis) 58 self.assertTrue(need_analysis)
56 59
57 def testAnalysisScheduled(self): 60 def testSuccessfulAnalysisOfBuildFailure(self):
58 master_name = 'm' 61 master_name = 'm'
59 builder_name = 'b 1' 62 builder_name = 'b'
60 build_number = 123 63 build_number = 123
61 64
62 build_failure_analysis_pipelines.ScheduleAnalysisIfNeeded( 65 def _MockFunc(*_):
63 master_name, builder_name, build_number, False, 'default') 66 return True
64 67
65 self.execute_queued_tasks() 68 original_func = build_failure_analysis_pipelines._WaitUntilDownloadAllowed
69 try:
70 build_failure_analysis_pipelines._WaitUntilDownloadAllowed = _MockFunc
66 71
67 build = Build.GetBuild(master_name, builder_name, build_number) 72 with self.mock_urlfetch() as urlfetch:
68 self.assertIsNotNone(build) 73 for i in range(3):
69 self.assertEqual(BuildAnalysisStatus.ANALYZED, build.analysis_status) 74 file_name = os.path.join(os.path.dirname(__file__), 'data',
75 'm_b_%s.json' % (build_number - i))
76 with open(file_name, 'r') as f:
77 urlfetch.register_handler(
78 buildbot.CreateBuildUrl(
79 master_name, builder_name, build_number - i, json_api=True),
80 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
81
82 build_failure_analysis_pipelines.ScheduleAnalysisIfNeeded(
83 master_name, builder_name, build_number, False, 'default')
84
85 self.execute_queued_tasks()
86
87 analysis = BuildAnalysis.GetBuildAnalysis(
88 master_name, builder_name, build_number)
89 self.assertIsNotNone(analysis)
90 self.assertEqual(BuildAnalysisStatus.ANALYZED, analysis.status)
91 finally:
92 build_failure_analysis_pipelines._WaitUntilDownloadAllowed = original_func
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698