| 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 |