OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright 2013 The Chromium Authors. All rights reserved. | 2 # Copyright 2013 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Unit tests for gatekeeper_ng.py. | 6 """Unit tests for gatekeeper_ng.py. |
7 | 7 |
8 This is a basic check that gatekeeper_ng.py can properly interpret builds and | 8 This is a basic check that gatekeeper_ng.py can properly interpret builds and |
9 close the tree. | 9 close the tree. |
10 | 10 |
(...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
537 self.masters[0].builders[0].builds[0].steps[1].results = [2, None] | 537 self.masters[0].builders[0].builds[0].steps[1].results = [2, None] |
538 self.add_gatekeeper_section(self.masters[0].url, | 538 self.add_gatekeeper_section(self.masters[0].url, |
539 self.masters[0].builders[0].name, | 539 self.masters[0].builders[0].name, |
540 {'closing_steps': ['step2']}) | 540 {'closing_steps': ['step2']}) |
541 | 541 |
542 self.handle_url_str(self.status_url, 'the status') | 542 self.handle_url_str(self.status_url, 'the status') |
543 | 543 |
544 urls = self.call_gatekeeper() | 544 urls = self.call_gatekeeper() |
545 self.assertNotIn(self.status_url, urls) | 545 self.assertNotIn(self.status_url, urls) |
546 | 546 |
| 547 def testDefaultSubjectTemplate(self): |
| 548 """Test that the subject template is set by default.""" |
| 549 sys.argv.extend([m.url for m in self.masters]) |
| 550 sys.argv.extend(['--skip-build-db-update', |
| 551 '--json', self.gatekeeper_file, |
| 552 '--email-app-secret-file=%s' % self.email_secret_file]) |
| 553 |
| 554 self.add_gatekeeper_section(self.masters[0].url, |
| 555 self.masters[0].builders[0].name, |
| 556 {'closing_steps': ['step4']}) |
| 557 |
| 558 self.call_gatekeeper() |
| 559 |
| 560 # Check that gatekeeper indeed sent an email. |
| 561 self.assertEquals(self.url_calls[-1]['url'], self.mailer_url) |
| 562 mailer_data = GatekeeperTest.decode_param_json(self.url_calls[-1]['params']) |
| 563 self.assertEquals(mailer_data['subject_template'], unicode( |
| 564 'buildbot %(result)s in %(projectName)s on %(builder)s, ' |
| 565 'revision %(revision)s')) |
| 566 |
| 567 |
547 def testEmailJson(self): | 568 def testEmailJson(self): |
548 """Test that the email json is formatted correctly.""" | 569 """Test that the email json is formatted correctly.""" |
549 sys.argv.extend([m.url for m in self.masters]) | 570 sys.argv.extend([m.url for m in self.masters]) |
550 sys.argv.extend(['--skip-build-db-update', | 571 sys.argv.extend(['--skip-build-db-update', |
551 '--json', self.gatekeeper_file, | 572 '--json', self.gatekeeper_file, |
552 '--email-app-secret-file=%s' % self.email_secret_file]) | 573 '--email-app-secret-file=%s' % self.email_secret_file]) |
553 | 574 |
| 575 subject_template = 'build %(result)s, oh no!' |
554 self.masters[0].builders[0].builds[0].results = 3 | 576 self.masters[0].builders[0].builds[0].results = 3 |
555 self.add_gatekeeper_master_config(self.masters[0].url, | 577 self.add_gatekeeper_master_config(self.masters[0].url, |
556 {'respect_build_status': True}) | 578 {'respect_build_status': True}) |
557 self.add_gatekeeper_section(self.masters[0].url, | 579 self.add_gatekeeper_section(self.masters[0].url, |
558 self.masters[0].builders[0].name, | 580 self.masters[0].builders[0].name, |
559 {}, | 581 {'subject_template': subject_template}, |
560 idx=0) | 582 idx=0) |
561 | 583 |
562 self.call_gatekeeper() | 584 self.call_gatekeeper() |
563 | 585 |
564 self.assertEquals(self.url_calls[-1]['url'], self.mailer_url) | 586 self.assertEquals(self.url_calls[-1]['url'], self.mailer_url) |
565 mailer_data = GatekeeperTest.decode_param_json( | 587 mailer_data = GatekeeperTest.decode_param_json( |
566 self.url_calls[-1]['params']) | 588 self.url_calls[-1]['params']) |
567 self.assertEquals(mailer_data['recipients'], ['a_committer@chromium.org']) | 589 self.assertEquals(mailer_data['recipients'], ['a_committer@chromium.org']) |
568 | 590 |
569 build_url = self.masters[0].url + '/builders/%s/builds/%d' % ( | 591 build_url = self.masters[0].url + '/builders/%s/builds/%d' % ( |
(...skipping 20 matching lines...) Expand all Loading... |
590 self.assertEquals(mailer_data['result'], 3) | 612 self.assertEquals(mailer_data['result'], 3) |
591 self.assertEquals(mailer_data['blamelist'], ['a_committer@chromium.org']) | 613 self.assertEquals(mailer_data['blamelist'], ['a_committer@chromium.org']) |
592 self.assertEquals(mailer_data['changes'], | 614 self.assertEquals(mailer_data['changes'], |
593 self.masters[0].builders[0].builds[0].sourcestamp['changes']) | 615 self.masters[0].builders[0].builds[0].sourcestamp['changes']) |
594 self.assertEquals(mailer_data['waterfall_url'], unicode( | 616 self.assertEquals(mailer_data['waterfall_url'], unicode( |
595 self.masters[0].url + '/waterfall')) | 617 self.masters[0].url + '/waterfall')) |
596 | 618 |
597 self.assertEquals(mailer_data['build_url'], unicode(build_url)) | 619 self.assertEquals(mailer_data['build_url'], unicode(build_url)) |
598 self.assertEquals(mailer_data['project_name'], unicode('Chromium FYI')) | 620 self.assertEquals(mailer_data['project_name'], unicode('Chromium FYI')) |
599 self.assertEquals(mailer_data['from_addr'], 'buildbot@chromium.org') | 621 self.assertEquals(mailer_data['from_addr'], 'buildbot@chromium.org') |
| 622 self.assertEquals(mailer_data['subject_template'], |
| 623 unicode(subject_template)) |
600 | 624 |
601 | 625 |
602 #### BuildDB operation. | 626 #### BuildDB operation. |
603 | 627 |
604 def testIncrementalScanning(self): | 628 def testIncrementalScanning(self): |
605 """Test that builds in the build DB are skipped.""" | 629 """Test that builds in the build DB are skipped.""" |
606 fd, dbfilename = tempfile.mkstemp() | 630 fd, dbfilename = tempfile.mkstemp() |
607 build_db = {self.masters[0].url: { 'mybuilder': 1 }} | 631 build_db = {self.masters[0].url: { 'mybuilder': 1 }} |
608 os.write(fd, json.dumps(build_db)) | 632 os.write(fd, json.dumps(build_db)) |
609 os.close(fd) | 633 os.close(fd) |
(...skipping 814 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1424 def testCheckedInConfigIsValid(self): | 1448 def testCheckedInConfigIsValid(self): |
1425 sys.argv.extend(['--verify', | 1449 sys.argv.extend(['--verify', |
1426 '--json', | 1450 '--json', |
1427 os.path.join(SCRIPT_DIR, os.pardir, 'gatekeeper.json')]) | 1451 os.path.join(SCRIPT_DIR, os.pardir, 'gatekeeper.json')]) |
1428 self.call_gatekeeper() | 1452 self.call_gatekeeper() |
1429 | 1453 |
1430 | 1454 |
1431 if __name__ == '__main__': | 1455 if __name__ == '__main__': |
1432 with utils.print_coverage(include=[__file__]): | 1456 with utils.print_coverage(include=[__file__]): |
1433 unittest.main() | 1457 unittest.main() |
OLD | NEW |