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

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

Issue 1836293002: [Findit] Adding central config test class for unit tests (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Addressing comments 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 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 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 5 import os
6 6
7 from testing_utils import testing
8
9 from model.wf_analysis import WfAnalysis 7 from model.wf_analysis import WfAnalysis
10 from model.wf_step import WfStep 8 from model.wf_step import WfStep
11 from pipeline_wrapper import pipeline_handlers 9 from pipeline_wrapper import pipeline_handlers
12 from waterfall import buildbot 10 from waterfall import buildbot
13 from waterfall import try_job_util 11 from waterfall import try_job_util
14 from waterfall import waterfall_config
15 from waterfall.extract_signal_pipeline import ExtractSignalPipeline 12 from waterfall.extract_signal_pipeline import ExtractSignalPipeline
13 from waterfall.test import wf_configured_test_case
16 14
17 15
18 class ExtractSignalPipelineTest(testing.AppengineTestCase): 16 class ExtractSignalPipelineTest(
17 wf_configured_test_case.WaterfallConfiguredTestCase):
19 app_module = pipeline_handlers._APP 18 app_module = pipeline_handlers._APP
20 19
21 def setUp(self): 20 def setUp(self):
22 super(ExtractSignalPipelineTest, self).setUp() 21 super(ExtractSignalPipelineTest, self).setUp()
23 22
24 def Mocked_ScheduleTryJobIfNeeded(*_, **__): 23 def Mocked_ScheduleTryJobIfNeeded(*_, **__):
25 pass 24 pass
26 self.mock( 25 self.mock(
27 try_job_util, 'ScheduleTryJobIfNeeded', Mocked_ScheduleTryJobIfNeeded) 26 try_job_util, 'ScheduleTryJobIfNeeded', Mocked_ScheduleTryJobIfNeeded)
28 27
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 step_name = 'abc_test' 83 step_name = 'abc_test'
85 step = WfStep.Create(master_name, builder_name, build_number, step_name) 84 step = WfStep.Create(master_name, builder_name, build_number, step_name)
86 step.log_data = self.ABC_TEST_FAILURE_LOG 85 step.log_data = self.ABC_TEST_FAILURE_LOG
87 step.put() 86 step.put()
88 87
89 step_log_url = buildbot.CreateStdioLogUrl( 88 step_log_url = buildbot.CreateStdioLogUrl(
90 master_name, builder_name, build_number, step_name) 89 master_name, builder_name, build_number, step_name)
91 with self.mock_urlfetch() as urlfetch: 90 with self.mock_urlfetch() as urlfetch:
92 urlfetch.register_handler(step_log_url, 'If used, test should fail!') 91 urlfetch.register_handler(step_log_url, 'If used, test should fail!')
93 92
94 def MockStepIsSupportedForMaster(*_):
95 return True
96 self.mock(waterfall_config, 'StepIsSupportedForMaster',
97 MockStepIsSupportedForMaster)
98 self._CreateAndSaveWfAnanlysis( 93 self._CreateAndSaveWfAnanlysis(
99 master_name, builder_name, build_number) 94 master_name, builder_name, build_number)
100 95
101 pipeline = ExtractSignalPipeline(self.FAILURE_INFO) 96 pipeline = ExtractSignalPipeline(self.FAILURE_INFO)
102 signals = pipeline.run(self.FAILURE_INFO, False) 97 signals = pipeline.run(self.FAILURE_INFO, False)
103 98
104 self.assertEqual(self.FAILURE_SIGNALS, signals) 99 self.assertEqual(self.FAILURE_SIGNALS, signals)
105 100
106 def MockGetStdiolog(self, master_name, builder_name, build_number, step_name): 101 def MockGetStdiolog(self, master_name, builder_name, build_number, step_name):
107 step_log_url = buildbot.CreateStdioLogUrl( 102 step_log_url = buildbot.CreateStdioLogUrl(
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 build_number = 123 189 build_number = 123
195 step_name = 'abc_test' 190 step_name = 'abc_test'
196 191
197 # Mock both stdiolog and gtest json results to test whether Findit will 192 # Mock both stdiolog and gtest json results to test whether Findit will
198 # go to step log first when both logs exist. 193 # go to step log first when both logs exist.
199 self.MockGetStdiolog(master_name, builder_name, build_number, step_name) 194 self.MockGetStdiolog(master_name, builder_name, build_number, step_name)
200 self.MockGetGtestJsonResult() 195 self.MockGetGtestJsonResult()
201 self._CreateAndSaveWfAnanlysis( 196 self._CreateAndSaveWfAnanlysis(
202 master_name, builder_name, build_number) 197 master_name, builder_name, build_number)
203 198
204 def MockStepIsSupportedForMaster(*_):
205 return True
206 self.mock(waterfall_config, 'StepIsSupportedForMaster',
207 MockStepIsSupportedForMaster)
208
209 pipeline = ExtractSignalPipeline(self.FAILURE_INFO) 199 pipeline = ExtractSignalPipeline(self.FAILURE_INFO)
210 signals = pipeline.run(self.FAILURE_INFO, False) 200 signals = pipeline.run(self.FAILURE_INFO, False)
211 201
212 step = WfStep.Get(master_name, builder_name, build_number, step_name) 202 step = WfStep.Get(master_name, builder_name, build_number, step_name)
213 203
214 expected_files = { 204 expected_files = {
215 'a/b/u2s1.cc': [567], 205 'a/b/u2s1.cc': [567],
216 'a/b/u3s2.cc': [110] 206 'a/b/u3s2.cc': [110]
217 } 207 }
218 208
219 self.assertIsNotNone(step) 209 self.assertIsNotNone(step)
220 self.assertIsNotNone(step.log_data) 210 self.assertIsNotNone(step.log_data)
221 self.assertEqual(expected_files, signals['abc_test']['files']) 211 self.assertEqual(expected_files, signals['abc_test']['files'])
222 212
223 def testGetSignalFromStepLogFlaky(self): 213 def testGetSignalFromStepLogFlaky(self):
224 master_name = 'm' 214 master_name = 'm'
225 builder_name = 'b' 215 builder_name = 'b'
226 build_number = 124 216 build_number = 124
227 step_name = 'abc_test' 217 step_name = 'abc_test'
228 218
229 failure_info = { 219 failure_info = {
230 'master_name': 'm', 220 'master_name': master_name,
231 'builder_name': 'b', 221 'builder_name': builder_name,
232 'build_number': 124, 222 'build_number': build_number,
233 'failed': True, 223 'failed': True,
234 'chromium_revision': 'a_git_hash', 224 'chromium_revision': 'a_git_hash',
235 'failed_steps': { 225 'failed_steps': {
236 'abc_test': { 226 'abc_test': {
237 'last_pass': 123, 227 'last_pass': 123,
238 'current_failure': 124, 228 'current_failure': 124,
239 'first_failure': 124, 229 'first_failure': 124,
240 } 230 }
241 } 231 }
242 } 232 }
243 233
244 self.MockGetStdiolog(master_name, builder_name, build_number, step_name) 234 self.MockGetStdiolog(master_name, builder_name, build_number, step_name)
245 self.MockGetGtestJsonResult() 235 self.MockGetGtestJsonResult()
246 self._CreateAndSaveWfAnanlysis( 236 self._CreateAndSaveWfAnanlysis(
247 master_name, builder_name, build_number) 237 master_name, builder_name, build_number)
248 238
249 def MockStepIsSupportedForMaster(*_):
250 return True
251 self.mock(waterfall_config, 'StepIsSupportedForMaster',
252 MockStepIsSupportedForMaster)
253
254 pipeline = ExtractSignalPipeline() 239 pipeline = ExtractSignalPipeline()
255 signals = pipeline.run(failure_info, False) 240 signals = pipeline.run(failure_info, False)
256 241
257 step = WfStep.Get(master_name, builder_name, build_number, step_name) 242 step = WfStep.Get(master_name, builder_name, build_number, step_name)
258 243
259 self.assertIsNotNone(step) 244 self.assertIsNotNone(step)
260 self.assertIsNotNone(step.log_data) 245 self.assertIsNotNone(step.log_data)
261 self.assertEqual('flaky', step.log_data) 246 self.assertEqual('flaky', step.log_data)
262 self.assertEqual({}, signals['abc_test']['files']) 247 self.assertEqual({}, signals['abc_test']['files'])
263 248
264 def testGetSignalFromStepLogInvalid(self): 249 def testGetSignalFromStepLogInvalid(self):
265 master_name = 'm' 250 master_name = 'm'
266 builder_name = 'b' 251 builder_name = 'b'
267 build_number = 125 252 build_number = 125
268 step_name = 'abc_test' 253 step_name = 'abc_test'
269 254
270 failure_info = { 255 failure_info = {
271 'master_name': 'm', 256 'master_name': master_name,
272 'builder_name': 'b', 257 'builder_name': builder_name,
273 'build_number': 125, 258 'build_number': build_number,
274 'failed': True, 259 'failed': True,
275 'chromium_revision': 'a_git_hash', 260 'chromium_revision': 'a_git_hash',
276 'failed_steps': { 261 'failed_steps': {
277 'abc_test': { 262 step_name: {
278 'last_pass': 124, 263 'last_pass': 124,
279 'current_failure': 125, 264 'current_failure': 125,
280 'first_failure': 125, 265 'first_failure': 125,
281 } 266 }
282 } 267 }
283 } 268 }
284 269
285 self.MockGetStdiolog(master_name, builder_name, build_number, step_name) 270 self.MockGetStdiolog(master_name, builder_name, build_number, step_name)
286 self.MockGetGtestJsonResult() 271 self.MockGetGtestJsonResult()
287 self._CreateAndSaveWfAnanlysis( 272 self._CreateAndSaveWfAnanlysis(
288 master_name, builder_name, build_number) 273 master_name, builder_name, build_number)
289 274
290 def MockStepIsSupportedForMaster(*_):
291 return True
292 self.mock(waterfall_config, 'StepIsSupportedForMaster',
293 MockStepIsSupportedForMaster)
294
295 pipeline = ExtractSignalPipeline() 275 pipeline = ExtractSignalPipeline()
296 signals = pipeline.run(failure_info, False) 276 signals = pipeline.run(failure_info, False)
297 277
298 step = WfStep.Get(master_name, builder_name, build_number, step_name) 278 step = WfStep.Get(master_name, builder_name, build_number, step_name)
299 279
300 expected_files = { 280 expected_files = {
301 'content/common/gpu/media/v4l2_video_encode_accelerator.cc': [306] 281 'content/common/gpu/media/v4l2_video_encode_accelerator.cc': [306]
302 } 282 }
303 283
304 self.assertIsNotNone(step) 284 self.assertIsNotNone(step)
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 'Unittest3.Subtest2': { 366 'Unittest3.Subtest2': {
387 'files': { 367 'files': {
388 'a/b/u3s2.cc': [110, 123] 368 'a/b/u3s2.cc': [110, 123]
389 }, 369 },
390 'keywords': {} 370 'keywords': {}
391 } 371 }
392 } 372 }
393 } 373 }
394 } 374 }
395 375
396 def MockStepIsSupportedForMaster(*_):
397 return True
398 self.mock(waterfall_config, 'StepIsSupportedForMaster',
399 MockStepIsSupportedForMaster)
400
401 self._CreateAndSaveWfAnanlysis( 376 self._CreateAndSaveWfAnanlysis(
402 master_name, builder_name, build_number) 377 master_name, builder_name, build_number)
403 378
404 pipeline = ExtractSignalPipeline() 379 pipeline = ExtractSignalPipeline()
405 signals = pipeline.run(failure_info, False) 380 signals = pipeline.run(failure_info, False)
406 self.assertEqual(expected_signals, signals) 381 self.assertEqual(expected_signals, signals)
407 382
408 def testExtractSignalsForTestsFlaky(self): 383 def testExtractSignalsForTestsFlaky(self):
409 master_name = 'm' 384 master_name = 'm'
410 builder_name = 'b' 385 builder_name = 'b'
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 step.put() 418 step.put()
444 419
445 expected_signals = { 420 expected_signals = {
446 'abc_test': { 421 'abc_test': {
447 'files': {}, 422 'files': {},
448 'keywords': {}, 423 'keywords': {},
449 'tests': {} 424 'tests': {}
450 } 425 }
451 } 426 }
452 427
453 def MockStepIsSupportedForMaster(*_):
454 return True
455 self.mock(waterfall_config, 'StepIsSupportedForMaster',
456 MockStepIsSupportedForMaster)
457 self._CreateAndSaveWfAnanlysis( 428 self._CreateAndSaveWfAnanlysis(
458 master_name, builder_name, build_number) 429 master_name, builder_name, build_number)
459 430
460 pipeline = ExtractSignalPipeline() 431 pipeline = ExtractSignalPipeline()
461 signals = pipeline.run(failure_info, False) 432 signals = pipeline.run(failure_info, False)
462 self.assertEqual(expected_signals, signals) 433 self.assertEqual(expected_signals, signals)
463 434
464 def testBailOutForUnsupportedStep(self): 435 def testBailOutForUnsupportedStep(self):
465 master_name = 'm' 436 master_name = 'm'
466 builder_name = 'b' 437 builder_name = 'b'
467 build_number = 123 438 build_number = 123
468 supported_step_name = 'abc_test' 439 supported_step_name = 'abc_test'
440 unsupported_step_name = 'step6'
stgao 2016/03/31 18:07:13 We'd better to add 'unsupported_' to the step name
lijeffrey 2016/03/31 22:50:20 Done.
469 failure_info = { 441 failure_info = {
470 'master_name': master_name, 442 'master_name': master_name,
471 'builder_name': 'b', 443 'builder_name': 'b',
472 'build_number': 123, 444 'build_number': 123,
473 'failed': True, 445 'failed': True,
474 'chromium_revision': 'a_git_hash', 446 'chromium_revision': 'a_git_hash',
475 'failed_steps': { 447 'failed_steps': {
476 supported_step_name: { 448 supported_step_name: {
477 'last_pass': 122, 449 'last_pass': 122,
478 'current_failure': 123, 450 'current_failure': 123,
479 'first_failure': 123, 451 'first_failure': 123,
480 }, 452 },
481 'not_supported': { 453 unsupported_step_name: {
482 } 454 }
483 } 455 }
484 } 456 }
485 457
486 def MockStepIsSupportedForMaster(step_name, _):
487 return step_name == supported_step_name
488
489 def MockGetGtestResultLog(*_): 458 def MockGetGtestResultLog(*_):
490 return None 459 return None
491 460
492 self.mock(waterfall_config, 'StepIsSupportedForMaster',
493 MockStepIsSupportedForMaster)
494 self.MockGetStdiolog(master_name, builder_name, build_number, 461 self.MockGetStdiolog(master_name, builder_name, build_number,
495 supported_step_name) 462 supported_step_name)
496 self.mock(buildbot, 'GetGtestResultLog', MockGetGtestResultLog) 463 self.mock(buildbot, 'GetGtestResultLog', MockGetGtestResultLog)
497 self._CreateAndSaveWfAnanlysis( 464 self._CreateAndSaveWfAnanlysis(
498 master_name, builder_name, build_number) 465 master_name, builder_name, build_number)
499 466
500 pipeline = ExtractSignalPipeline() 467 pipeline = ExtractSignalPipeline()
501 signals = pipeline.run(failure_info, False) 468 signals = pipeline.run(failure_info, False)
502 self.assertEqual(self.FAILURE_SIGNALS, signals) 469 self.assertEqual(self.FAILURE_SIGNALS, signals)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698