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

Side by Side Diff: appengine/findit/waterfall/test/detect_first_failure_pipeline_test.py

Issue 1866883002: [Findit] A huge refactoring and some bug fixing. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Fix nit. Created 4 years, 8 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 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 datetime 5 import datetime
6 import json 6 import json
7 import os 7 import os
8 import urllib 8 import urllib
9 import zlib 9 import zlib
10 10
11 from common.http_client_appengine import HttpClientAppengine as HttpClient 11 from common.http_client_appengine import HttpClientAppengine as HttpClient
12 from model import wf_analysis_status 12 from model import analysis_status
13 from model.wf_analysis import WfAnalysis 13 from model.wf_analysis import WfAnalysis
14 from model.wf_build import WfBuild 14 from model.wf_build import WfBuild
15 from model.wf_step import WfStep 15 from model.wf_step import WfStep
16 from pipeline_wrapper import pipeline_handlers 16 from pipeline_wrapper import pipeline_handlers
17 from waterfall import buildbot 17 from waterfall import buildbot
18 from waterfall import lock_util 18 from waterfall import lock_util
19 from waterfall import swarming_util 19 from waterfall import swarming_util
20 from waterfall.detect_first_failure_pipeline import DetectFirstFailurePipeline 20 from waterfall.detect_first_failure_pipeline import DetectFirstFailurePipeline
21 from waterfall.test import wf_testcase 21 from waterfall.test import wf_testcase
22 22
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 build_url = buildbot.CreateBuildUrl( 60 build_url = buildbot.CreateBuildUrl(
61 master_name, builder_name, build_number, json_api=True) 61 master_name, builder_name, build_number, json_api=True)
62 self.mocked_urlfetch.register_handler(build_url, build_data) 62 self.mocked_urlfetch.register_handler(build_url, build_data)
63 63
64 def testLookBackUntilGreenBuild(self): 64 def testLookBackUntilGreenBuild(self):
65 master_name = 'm' 65 master_name = 'm'
66 builder_name = 'b' 66 builder_name = 'b'
67 build_number = 123 67 build_number = 123
68 68
69 self._CreateAndSaveWfAnanlysis( 69 self._CreateAndSaveWfAnanlysis(
70 master_name, builder_name, build_number, wf_analysis_status.ANALYZING) 70 master_name, builder_name, build_number, analysis_status.RUNNING)
71 71
72 # Setup build data for builds: 72 # Setup build data for builds:
73 # 123: mock urlfetch to ensure it is fetched. 73 # 123: mock urlfetch to ensure it is fetched.
74 self._MockUrlfetchWithBuildData(master_name, builder_name, 123) 74 self._MockUrlfetchWithBuildData(master_name, builder_name, 123)
75 # 122: mock a build in datastore to ensure it is not fetched again. 75 # 122: mock a build in datastore to ensure it is not fetched again.
76 build = WfBuild.Create(master_name, builder_name, 122) 76 build = WfBuild.Create(master_name, builder_name, 122)
77 build.data = self._GetBuildData(master_name, builder_name, 122) 77 build.data = self._GetBuildData(master_name, builder_name, 122)
78 build.completed = True 78 build.completed = True
79 build.put() 79 build.put()
80 self._MockUrlfetchWithBuildData( 80 self._MockUrlfetchWithBuildData(
(...skipping 24 matching lines...) Expand all
105 105
106 self.assertEqual(expected_failed_steps, failure_info['failed_steps']) 106 self.assertEqual(expected_failed_steps, failure_info['failed_steps'])
107 107
108 def testFirstFailureLastPassUpdating(self): 108 def testFirstFailureLastPassUpdating(self):
109 """last pass always should just be updated once.""" 109 """last pass always should just be updated once."""
110 master_name = 'm' 110 master_name = 'm'
111 builder_name = 'b' 111 builder_name = 'b'
112 build_number = 100 112 build_number = 100
113 113
114 self._CreateAndSaveWfAnanlysis( 114 self._CreateAndSaveWfAnanlysis(
115 master_name, builder_name, build_number, wf_analysis_status.ANALYZING) 115 master_name, builder_name, build_number, analysis_status.RUNNING)
116 116
117 # Setup build data for builds: 117 # Setup build data for builds:
118 # 100: net_unitests failed, unit_tests failed. 118 # 100: net_unitests failed, unit_tests failed.
119 # 99: net_unitests passed, unit_tests failed. 119 # 99: net_unitests passed, unit_tests failed.
120 # 98: net_unitests passed, unit_tests failed. 120 # 98: net_unitests passed, unit_tests failed.
121 # 97: net_unitests failed, unit_tests failed. 121 # 97: net_unitests failed, unit_tests failed.
122 # 96: net_unitests passed, unit_tests passed. 122 # 96: net_unitests passed, unit_tests passed.
123 for i in range(5): 123 for i in range(5):
124 self._MockUrlfetchWithBuildData(master_name, builder_name, 100 - i) 124 self._MockUrlfetchWithBuildData(master_name, builder_name, 100 - i)
125 125
(...skipping 14 matching lines...) Expand all
140 } 140 }
141 141
142 self.assertEqual(expected_failed_steps, failure_info['failed_steps']) 142 self.assertEqual(expected_failed_steps, failure_info['failed_steps'])
143 143
144 def testStopLookingBackIfAllFailedStepsPassedInLastBuild(self): 144 def testStopLookingBackIfAllFailedStepsPassedInLastBuild(self):
145 master_name = 'm' 145 master_name = 'm'
146 builder_name = 'b' 146 builder_name = 'b'
147 build_number = 124 147 build_number = 124
148 148
149 self._CreateAndSaveWfAnanlysis( 149 self._CreateAndSaveWfAnanlysis(
150 master_name, builder_name, build_number, wf_analysis_status.ANALYZING) 150 master_name, builder_name, build_number, analysis_status.RUNNING)
151 151
152 # Setup build data for builds: 152 # Setup build data for builds:
153 self._MockUrlfetchWithBuildData(master_name, builder_name, 124) 153 self._MockUrlfetchWithBuildData(master_name, builder_name, 124)
154 self._MockUrlfetchWithBuildData(master_name, builder_name, 123, 154 self._MockUrlfetchWithBuildData(master_name, builder_name, 123,
155 build_data=None) 155 build_data=None)
156 self._MockUrlfetchWithBuildData( 156 self._MockUrlfetchWithBuildData(
157 master_name, builder_name, 122, build_data='Blow up if used!') 157 master_name, builder_name, 122, build_data='Blow up if used!')
158 158
159 pipeline = DetectFirstFailurePipeline() 159 pipeline = DetectFirstFailurePipeline()
160 failure_info = pipeline.run(master_name, builder_name, build_number) 160 failure_info = pipeline.run(master_name, builder_name, build_number)
161 161
162 expected_failed_steps = { 162 expected_failed_steps = {
163 'a': { 163 'a': {
164 'last_pass': 123, 164 'last_pass': 123,
165 'current_failure': 124, 165 'current_failure': 124,
166 'first_failure': 124 166 'first_failure': 124
167 } 167 }
168 } 168 }
169 169
170 self.assertEqual(expected_failed_steps, failure_info['failed_steps']) 170 self.assertEqual(expected_failed_steps, failure_info['failed_steps'])
171 171
172 def testAnalyzeSuccessfulBuild(self): 172 def testAnalyzeSuccessfulBuild(self):
173 master_name = 'm' 173 master_name = 'm'
174 builder_name = 'b' 174 builder_name = 'b'
175 build_number = 121 175 build_number = 121
176 176
177 self._CreateAndSaveWfAnanlysis( 177 self._CreateAndSaveWfAnanlysis(
178 master_name, builder_name, build_number, wf_analysis_status.ANALYZING) 178 master_name, builder_name, build_number, analysis_status.RUNNING)
179 179
180 # Setup build data for builds: 180 # Setup build data for builds:
181 self._MockUrlfetchWithBuildData(master_name, builder_name, 121) 181 self._MockUrlfetchWithBuildData(master_name, builder_name, 121)
182 self._MockUrlfetchWithBuildData( 182 self._MockUrlfetchWithBuildData(
183 master_name, builder_name, 120, build_data='Blow up if used!') 183 master_name, builder_name, 120, build_data='Blow up if used!')
184 184
185 pipeline = DetectFirstFailurePipeline() 185 pipeline = DetectFirstFailurePipeline()
186 failure_info = pipeline.run(master_name, builder_name, build_number) 186 failure_info = pipeline.run(master_name, builder_name, build_number)
187 187
188 self.assertFalse(failure_info['failed']) 188 self.assertFalse(failure_info['failed'])
189 189
190 def testStopLookingBackIfFindTheFirstBuild(self): 190 def testStopLookingBackIfFindTheFirstBuild(self):
191 master_name = 'm' 191 master_name = 'm'
192 builder_name = 'b' 192 builder_name = 'b'
193 build_number = 2 193 build_number = 2
194 194
195 self._CreateAndSaveWfAnanlysis( 195 self._CreateAndSaveWfAnanlysis(
196 master_name, builder_name, build_number, wf_analysis_status.ANALYZING) 196 master_name, builder_name, build_number, analysis_status.RUNNING)
197 197
198 # Setup build data for builds: 198 # Setup build data for builds:
199 self._MockUrlfetchWithBuildData(master_name, builder_name, 2) 199 self._MockUrlfetchWithBuildData(master_name, builder_name, 2)
200 self._MockUrlfetchWithBuildData(master_name, builder_name, 1) 200 self._MockUrlfetchWithBuildData(master_name, builder_name, 1)
201 self._MockUrlfetchWithBuildData(master_name, builder_name, 0) 201 self._MockUrlfetchWithBuildData(master_name, builder_name, 0)
202 202
203 pipeline = DetectFirstFailurePipeline() 203 pipeline = DetectFirstFailurePipeline()
204 failure_info = pipeline.run(master_name, builder_name, build_number) 204 failure_info = pipeline.run(master_name, builder_name, build_number)
205 205
206 expected_failed_steps = { 206 expected_failed_steps = {
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 } 560 }
561 } 561 }
562 self.assertEqual(builds, expected_builds) 562 self.assertEqual(builds, expected_builds)
563 563
564 def testTestLevelFailedInfo(self): 564 def testTestLevelFailedInfo(self):
565 master_name = 'm' 565 master_name = 'm'
566 builder_name = 'b' 566 builder_name = 'b'
567 build_number = 223 567 build_number = 223
568 568
569 self._CreateAndSaveWfAnanlysis( 569 self._CreateAndSaveWfAnanlysis(
570 master_name, builder_name, build_number, wf_analysis_status.ANALYZING) 570 master_name, builder_name, build_number, analysis_status.RUNNING)
571 571
572 # Mock data for retrieving data from swarming server for a build. 572 # Mock data for retrieving data from swarming server for a build.
573 self._MockUrlFetchWithSwarmingData(master_name, builder_name, 223) 573 self._MockUrlFetchWithSwarmingData(master_name, builder_name, 223)
574 574
575 for n in xrange(223, 219, -1): # pragma: no cover 575 for n in xrange(223, 219, -1): # pragma: no cover
576 # Setup build data for builds: 576 # Setup build data for builds:
577 self._MockUrlfetchWithBuildData(master_name, builder_name, n) 577 self._MockUrlfetchWithBuildData(master_name, builder_name, n)
578 if n == 220: 578 if n == 220:
579 break 579 break
580 580
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 221: '{"Unittest3.Subtest3": "YS9iL3UzczIuY2M6MTEwOiBGYWlsdXJlCg=="}' 665 221: '{"Unittest3.Subtest3": "YS9iL3UzczIuY2M6MTEwOiBGYWlsdXJlCg=="}'
666 } 666 }
667 667
668 for n in xrange(223, 220, -1): 668 for n in xrange(223, 220, -1):
669 step = WfStep.Get(master_name, builder_name, n, 'abc_test') 669 step = WfStep.Get(master_name, builder_name, n, 'abc_test')
670 self.assertIsNotNone(step) 670 self.assertIsNotNone(step)
671 self.assertTrue(step.isolated) 671 self.assertTrue(step.isolated)
672 self.assertEqual(expected_step_log_data[n], step.log_data) 672 self.assertEqual(expected_step_log_data[n], step.log_data)
673 673
674 self.assertEqual(expected_failed_steps, failure_info['failed_steps']) 674 self.assertEqual(expected_failed_steps, failure_info['failed_steps'])
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698