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

Side by Side Diff: appengine/findit/waterfall/test/extractors_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: Rebase 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 textwrap 5 import textwrap
6 6
7 from testing_utils import testing
8 from waterfall import extractors 7 from waterfall import extractors
9 from waterfall import waterfall_config
10 from waterfall.extractor import Extractor 8 from waterfall.extractor import Extractor
9 from waterfall.test import wf_testcase
11 10
12 11
13 class ExtractorsTest(testing.AppengineTestCase): 12 class ExtractorsTest(wf_testcase.WaterfallTestCase):
14 13
15 def _RunTest(self, failure_log, extractor_class, expected_signal_json, 14 def _RunTest(self, failure_log, extractor_class, expected_signal_json,
16 bot='bot', master='master'): 15 bot='builder1', master='master1'):
17 signal = extractor_class().Extract( 16 signal = extractor_class().Extract(
18 failure_log, 'suite.test', 'step', bot, master) 17 failure_log, 'suite.test', 'step', bot, master)
19 self.assertEqual(expected_signal_json, signal.ToDict()) 18 self.assertEqual(expected_signal_json, signal.ToDict())
20 19
21 def testGeneralExtractor(self): 20 def testGeneralExtractor(self):
22 failure_log = textwrap.dedent(""" 21 failure_log = textwrap.dedent("""
23 blabla WARNING: bla bla a/b/c.cc:20 22 blabla WARNING: bla bla a/b/c.cc:20
24 23
25 blabla d/e/f.cc:30 24 blabla d/e/f.cc:30
26 blabla""") 25 blabla""")
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 'source': '../../a/b/x.cc', 348 'source': '../../a/b/x.cc',
350 'target': 'obj/a/b/x.o', 349 'target': 'obj/a/b/x.o',
351 }, 350 },
352 { 351 {
353 'target': 'target.exe' 352 'target': 'target.exe'
354 } 353 }
355 ] 354 ]
356 } 355 }
357 356
358 self._RunTest( 357 self._RunTest(
359 failure_log, extractors.CompileStepExtractor, expected_signal_json) 358 failure_log, extractors.CompileStepExtractor, expected_signal_json,
359 'builder2', 'master2')
360 360
361 def testCompileStepExtractorExtractFailedTargetsLinuxOutsideFailure(self): 361 def testCompileStepExtractorExtractFailedTargetsLinuxOutsideFailure(self):
362 failure_log = textwrap.dedent(""" 362 failure_log = textwrap.dedent("""
363 [1780/30023] blabla 363 [1780/30023] blabla
364 FAILED: blabla 364 FAILED: blabla
365 blabla 365 blabla
366 1 error generated. 366 1 error generated.
367 FAILED with 1: blabla gomacc -c a/b.cc -o c/d.o blabla 367 FAILED with 1: blabla gomacc -c a/b.cc -o c/d.o blabla
368 blabla 368 blabla
369 Error: FAILED with 1: blabla 369 Error: FAILED with 1: blabla
370 ninja: build stopped: subcommand failed. 370 ninja: build stopped: subcommand failed.
371 blabla.""") 371 blabla.""")
372 expected_signal_json = { 372 expected_signal_json = {
373 'files': {}, 373 'files': {},
374 'keywords': {}, 374 'keywords': {},
375 'failed_targets': [ 375 'failed_targets': [
376 { 376 {
377 'source': 'a/b.cc', 377 'source': 'a/b.cc',
378 'target': 'c/d.o' 378 'target': 'c/d.o'
379 } 379 }
380 ] 380 ]
381 } 381 }
382 382
383 self._RunTest( 383 self._RunTest(
384 failure_log, extractors.CompileStepExtractor, expected_signal_json) 384 failure_log, extractors.CompileStepExtractor, expected_signal_json,
385 'builder2', 'master2')
385 386
386 def testCompileStepExtractorExtractFailedLinkTargetsLinux(self): 387 def testCompileStepExtractorExtractFailedLinkTargetsLinux(self):
387 failure_log = textwrap.dedent(""" 388 failure_log = textwrap.dedent("""
388 [5430/5600] blabla 389 [5430/5600] blabla
389 FAILED: python blabla clang++ -o a/b.nexe blabla 390 FAILED: python blabla clang++ -o a/b.nexe blabla
390 blabla 391 blabla
391 blabla.Error: FAILED with blabla 392 blabla.Error: FAILED with blabla
392 FAILED: blabla gomacc -o "target with spaces and quotes" blabla 393 FAILED: blabla gomacc -o "target with spaces and quotes" blabla
393 ninja: build stopped: subcommand failed.""") 394 ninja: build stopped: subcommand failed.""")
394 expected_signal_json = { 395 expected_signal_json = {
395 'files': {}, 396 'files': {},
396 'keywords': {}, 397 'keywords': {},
397 'failed_targets': [ 398 'failed_targets': [
398 { 399 {
399 'target': 'a/b.nexe' 400 'target': 'a/b.nexe'
400 }, 401 },
401 { 402 {
402 'target': '"target with spaces and quotes"' 403 'target': '"target with spaces and quotes"'
403 } 404 }
404 ] 405 ]
405 } 406 }
406 407
407 self._RunTest( 408 self._RunTest(
408 failure_log, extractors.CompileStepExtractor, expected_signal_json) 409 failure_log, extractors.CompileStepExtractor, expected_signal_json,
410 'builder2', 'master2')
409 411
410 def testCompileStepExtractorExtractFailedCompileTargetsWindows(self): 412 def testCompileStepExtractorExtractFailedCompileTargetsWindows(self):
411 failure_log = textwrap.dedent(""" 413 failure_log = textwrap.dedent("""
412 [4576/31353] blabla 414 [4576/31353] blabla
413 FAILED: ninja blabla /c ..\\..\\a\\b\\c.cc /Foa\\b.c.obj blabla 415 FAILED: ninja blabla /c ..\\..\\a\\b\\c.cc /Foa\\b.c.obj blabla
414 blabla 416 blabla
415 FAILED: ninja blabla /c ..\\..\\d\\e\\f.cc /Fod\\e\\f\\a.b.obj blabla 417 FAILED: ninja blabla /c ..\\..\\d\\e\\f.cc /Fod\\e\\f\\a.b.obj blabla
416 blabla 418 blabla
417 ninja: build stopped: subcommand failed.""") 419 ninja: build stopped: subcommand failed.""")
418 expected_signal_json = { 420 expected_signal_json = {
419 'files': {}, 421 'files': {},
420 'keywords': {}, 422 'keywords': {},
421 'failed_targets': [ 423 'failed_targets': [
422 { 424 {
423 'source': '..\\..\\a\\b\\c.cc', 425 'source': '..\\..\\a\\b\\c.cc',
424 'target': 'a\\b.c.obj', 426 'target': 'a\\b.c.obj',
425 }, 427 },
426 { 428 {
427 'source': '..\\..\\d\\e\\f.cc', 429 'source': '..\\..\\d\\e\\f.cc',
428 'target': 'd\\e\\f\\a.b.obj' 430 'target': 'd\\e\\f\\a.b.obj'
429 }, 431 },
430 ] 432 ]
431 } 433 }
432 434
433 self._RunTest(failure_log, extractors.CompileStepExtractor, 435 self._RunTest(failure_log, extractors.CompileStepExtractor,
434 expected_signal_json) 436 expected_signal_json, 'win_builder', 'win_master')
435 437
436 def testCompileStepExtractorExtractFailedLinkTargetsWindows(self): 438 def testCompileStepExtractorExtractFailedLinkTargetsWindows(self):
437 failure_log = textwrap.dedent(""" 439 failure_log = textwrap.dedent("""
438 [11428/27088] blabla 440 [11428/27088] blabla
439 FAILED: blabla link.exe /OUT:test.exe @test.exe.rsp blabla 441 FAILED: blabla link.exe /OUT:test.exe @test.exe.rsp blabla
440 ninja: build stopped: subcommand failed.""") 442 ninja: build stopped: subcommand failed.""")
441 expected_signal_json = { 443 expected_signal_json = {
442 'files': {}, 444 'files': {},
443 'keywords': {}, 445 'keywords': {},
444 'failed_targets': [ 446 'failed_targets': [
445 { 447 {
446 'target': 'test.exe' 448 'target': 'test.exe'
447 } 449 }
448 ] 450 ]
449 } 451 }
450 452
451 self._RunTest( 453 self._RunTest(
452 failure_log, extractors.CompileStepExtractor, expected_signal_json) 454 failure_log, extractors.CompileStepExtractor, expected_signal_json,
455 'builder2', 'master2')
453 456
454 def testCompileStepNinjaErrorExtractor(self): 457 def testCompileStepNinjaErrorExtractor(self):
455 """Test ninja error extraction in compile step.""" 458 """Test ninja error extraction in compile step."""
456 failure_log = textwrap.dedent(""" 459 failure_log = textwrap.dedent("""
457 ninja -C /a/b/c/ all -j50 460 ninja -C /a/b/c/ all -j50
458 ninja: Entering directory `../da/b/build/sl/M/' 461 ninja: Entering directory `../da/b/build/sl/M/'
459 ninja: error: '../../r/w/c/sess.js', needed by 'ob/r/w/h.stamp', 462 ninja: error: '../../r/w/c/sess.js', needed by 'ob/r/w/h.stamp',
460 missing and no known rule to make it""") 463 missing and no known rule to make it""")
461 expected_signal_json = { 464 expected_signal_json = {
462 'files': { 465 'files': {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 'a/c/in_signal_5.cc': [], 505 'a/c/in_signal_5.cc': [],
503 'a/c/in_signal_6.cc': [] 506 'a/c/in_signal_6.cc': []
504 }, 507 },
505 'keywords': {} 508 'keywords': {}
506 } 509 }
507 510
508 self._RunTest( 511 self._RunTest(
509 failure_log, extractors.CompileStepExtractor, expected_signal_json, 512 failure_log, extractors.CompileStepExtractor, expected_signal_json,
510 'iOS_Simulator_(dbg)', 'chromium.mac') 513 'iOS_Simulator_(dbg)', 'chromium.mac')
511 514
512 def _MockEnableStrictRegexForCompileLinkFailures(self, enabled):
513 def Mocked_EnableStrictRegexForCompileLinkFailures(*_):
514 return enabled
515 self.mock(waterfall_config, 'EnableStrictRegexForCompileLinkFailures',
516 Mocked_EnableStrictRegexForCompileLinkFailures)
517
518 def testCompileStepStrictRegexForCompileFailures(self): 515 def testCompileStepStrictRegexForCompileFailures(self):
519 self._MockEnableStrictRegexForCompileLinkFailures(True)
520 516
521 goma_clang_prefix = ( 517 goma_clang_prefix = (
522 '/b/build/goma/gomacc ' 518 '/b/build/goma/gomacc '
523 '../../third_party/llvm-build/Release+Asserts/bin/clang++ ' 519 '../../third_party/llvm-build/Release+Asserts/bin/clang++ '
524 '-MMD -MF') 520 '-MMD -MF')
525 failure_log = textwrap.dedent(""" 521 failure_log = textwrap.dedent("""
526 [1832/2467 | 117.498] CXX obj/a/b/test.file.o 522 [1832/2467 | 117.498] CXX obj/a/b/test.file.o
527 blabla... 523 blabla...
528 FAILED: %s obj/a.o.d ... -c a.c -o obj/a.o 524 FAILED: %s obj/a.o.d ... -c a.c -o obj/a.o
529 blalba... 525 blalba...
(...skipping 15 matching lines...) Expand all
545 { 541 {
546 'source': 'a.c', 542 'source': 'a.c',
547 'target': 'obj/a.o', 543 'target': 'obj/a.o',
548 }, 544 },
549 ] 545 ]
550 } 546 }
551 547
552 self._RunTest( 548 self._RunTest(
553 failure_log, extractors.CompileStepExtractor, expected_signal_json) 549 failure_log, extractors.CompileStepExtractor, expected_signal_json)
554 550
555
556 def testCompileStepStrictRegexForLinkFailures(self): 551 def testCompileStepStrictRegexForLinkFailures(self):
557 self._MockEnableStrictRegexForCompileLinkFailures(True)
558 552
559 goma_gcc_prefix = ( 553 goma_gcc_prefix = (
560 '/b/build/slave/Linux/build/src/build/goma/client/gomacc ' 554 '/b/build/slave/Linux/build/src/build/goma/client/gomacc '
561 '/bla/bla/.../bin/arm-linux-androideabi-gcc') 555 '/bla/bla/.../bin/arm-linux-androideabi-gcc')
562 failure_log = textwrap.dedent(""" 556 failure_log = textwrap.dedent("""
563 [1832/2467 | 117.498] CXX obj/a/b/test.file.o 557 [1832/2467 | 117.498] CXX obj/a/b/test.file.o
564 blabla... 558 blabla...
565 FAILED: %s -Wl,-z,now ... -o exe -Wl,--start-group obj/a.o ... 559 FAILED: %s -Wl,-z,now ... -o exe -Wl,--start-group obj/a.o ...
566 blalba... 560 blalba...
567 FAILED: cd a/b/c; python script.py a b c blabla.... 561 FAILED: cd a/b/c; python script.py a b c blabla....
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
824 # step_name: result 818 # step_name: result
825 '1': '1', 819 '1': '1',
826 '2': '2', 820 '2': '2',
827 '32434': '0' 821 '32434': '0'
828 } 822 }
829 823
830 for step_name, expected_result in cases.iteritems(): 824 for step_name, expected_result in cases.iteritems():
831 result = extractors.ExtractSignal( 825 result = extractors.ExtractSignal(
832 'master', 'bot', step_name, 'test', '') 826 'master', 'bot', step_name, 'test', '')
833 self.assertEqual(expected_result, result) 827 self.assertEqual(expected_result, result)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698