def test_to_gerrit_comment_with_patchset(self): pr_status_info = PRStatusInfo('bar', 123, 'num') expected = self.generate_notifier_comment(123, 'bar', 'num', 3) actual = pr_status_info.to_gerrit_comment(3) self.assertEqual(expected, actual)
def test_to_gerrit_comment_latest(self): pr_status_info = PRStatusInfo('bar', 123, None) expected = self.generate_notifier_comment(123, 'bar', 'Latest', None) actual = pr_status_info.to_gerrit_comment() self.assertEqual(expected, actual)
def test_to_gerrit_comment_with_patchset(self): checks_results = {'key1': 'val1', 'key2': 'val2'} pr_status_info = PRStatusInfo(checks_results, 123, 'SHA') expected = self.generate_notifier_comment(123, checks_results, 'SHA', 3) actual = pr_status_info.to_gerrit_comment(3) self.assertEqual(expected, actual)
def test_to_gerrit_comment_latest(self): checks_results = {'key1': 'val1', 'key2': 'val2'} pr_status_info = PRStatusInfo(checks_results, 123, None) expected = self.generate_notifier_comment(123, checks_results, 'Latest', None) actual = pr_status_info.to_gerrit_comment() self.assertEqual(expected, actual)
def test_to_gerrit_comment(self): checks_results = {'key1': 'val1', 'key2': 'val2'} result_comment = '\nkey2 (val2)\nkey1 (val1)' pr_status_info = PRStatusInfo(checks_results, 123, 'SHA') expected = self.generate_notifier_comment(123, result_comment, 'SHA', None) actual = pr_status_info.to_gerrit_comment() self.assertEqual(expected, actual)
def test_to_gerrit_comment_latest(self): pr_status_info = PRStatusInfo('bar', None) expected = ( 'The exported PR for the current patch failed Taskcluster check(s) ' 'on GitHub, which could indict cross-broswer failures on the ' 'exportable changes. Please contact ecosystem-infra@ team for ' 'more information.\n\n' 'Taskcluster Link: bar\n' 'Gerrit CL SHA: Latest') actual = pr_status_info.to_gerrit_comment() self.assertEqual(expected, actual)
def test_to_gerrit_comment_with_patchset(self): pr_status_info = PRStatusInfo('foo', 'bar', 'num') expected = ( 'The exported PR for the current patch failed Taskcluster check(s) ' 'on GitHub, which could indict cross-broswer failures on the ' 'exportable changes. Please contact ecosystem-infra@ team for ' 'more information.\n\n' 'Taskcluster Node ID: foo\n' 'Taskcluster Link: bar\n' 'Gerrit CL SHA: num\n' 'Patchset Number: 3') actual = pr_status_info.to_gerrit_comment(3) self.assertEqual(expected, actual)
def test_has_latest_taskcluster_status_commented_true(self): pr_status_info = PRStatusInfo('bar', 'num') messages = [ { "date": "2019-08-20 17:42:05.000000000", "message": "Uploaded patch set 1.\nInitial upload", "_revision_number": 1 }, { "date": "2019-08-21 17:41:05.000000000", "message": ('The exported PR for the current patch failed Taskcluster check(s) ' 'on GitHub, which could indict cross-broswer failures on the ' 'exportable changes. Please contact ecosystem-infra@ team for ' 'more information.\n\n' 'Taskcluster Link: bar\n' 'Gerrit CL SHA: num\n' 'Patchset Number: 3'), "_revision_number": 2 }, ] actual = self.notifier.has_latest_taskcluster_status_commented( messages, pr_status_info) self.assertTrue(actual) self.assertTrue(actual)
def test_get_gerrit_sha_from_comment_success(self): gerrit_comment = self.generate_notifier_comment( 123, 'checks', 'SHA', None) actual = PRStatusInfo.get_gerrit_sha_from_comment(gerrit_comment) self.assertEqual(actual, 'SHA')
def test_process_failing_prs_has_commented(self): self.notifier.dry_run = False self.notifier.gerrit = MockGerritAPI() self.notifier.gerrit.cl = MockGerritCL(data={ 'change_id': 'abc', 'messages': [ { "date": "2019-08-20 17:42:05.000000000", "message": "Uploaded patch set 1.\nInitial upload", "_revision_number": 1 }, { "date": "2019-08-21 17:41:05.000000000", "message": self.generate_notifier_comment(123, 'bar', 'SHA', 3), "_revision_number": 2 }, ], 'revisions': { 'SHA': { '_number': 1 } } }, api=self.notifier.gerrit) gerrit_dict = {'abc': PRStatusInfo('bar', 123, 'SHA')} self.notifier.process_failing_prs(gerrit_dict) self.assertEqual(self.notifier.gerrit.cls_queried, ['abc']) self.assertEqual(self.notifier.gerrit.request_posted, [])
def test_get_gerrit_sha_from_comment_success(self): gerrit_comment = self.generate_notifier_comment( 123, 'bar', 'num', None) actual = PRStatusInfo.get_gerrit_sha_from_comment(gerrit_comment, 123) self.assertEqual(actual, 'num')
def test_from_gerrit_comment_missing_info(self): gerrit_comment = ( 'The exported PR for the current patch failed Taskcluster check(s) ' 'on GitHub, which could indict cross-broswer failures on the ' 'exportable changes. Please contact ecosystem-infra@ team for ' 'more information.\n\n' 'Taskcluster Link: \n' 'Gerrit CL SHA: num') actual = PRStatusInfo.from_gerrit_comment(gerrit_comment) self.assertIsNone(actual)
def test_has_latest_taskcluster_status_commented_false(self): pr_status_info = PRStatusInfo('bar', 123, 'SHA') messages = [{ "date": "2019-08-20 17:42:05.000000000", "message": "Uploaded patch set 1.\nInitial upload", "_revision_number": 1 }] actual = self.notifier.has_latest_taskcluster_status_commented( messages, pr_status_info) self.assertFalse(actual)
def test_process_failing_prs_success(self): self.notifier.dry_run = False self.notifier.gerrit = MockGerritAPI() self.notifier.gerrit.cl = MockGerritCL(data={ 'change_id': 'abc', 'messages': [ { "date": "2019-08-20 17:42:05.000000000", "message": "Uploaded patch set 1.\nInitial upload", "_revision_number": 1 }, { "date": "2019-08-21 17:41:05.000000000", "message": ('The exported PR for the current patch failed Taskcluster check(s) ' 'on GitHub, which could indict cross-broswer failures on the ' 'exportable changes. Please contact ecosystem-infra@ team for ' 'more information.\n\n' 'Taskcluster Node ID: notfoo\n' 'Taskcluster Link: bar\n' 'Gerrit CL SHA: notnum\n' 'Patchset Number: 3'), "_revision_number": 2 }, ], 'revisions': { 'num': { '_number': 1 } } }, api=self.notifier.gerrit) gerrit_dict = {'abc': PRStatusInfo('foo', 'bar', 'num')} expected = ( 'The exported PR for the current patch failed Taskcluster check(s) ' 'on GitHub, which could indict cross-broswer failures on the ' 'exportable changes. Please contact ecosystem-infra@ team for ' 'more information.\n\n' 'Taskcluster Node ID: foo\n' 'Taskcluster Link: bar\n' 'Gerrit CL SHA: num\n' 'Patchset Number: 1') self.notifier.process_failing_prs(gerrit_dict) self.assertEqual(self.notifier.gerrit.cls_queried, ['abc']) self.assertEqual(self.notifier.gerrit.request_posted, [('/a/changes/abc/revisions/current/review', { 'message': expected })])
def test_process_failing_prs_raise_gerrit_error(self): self.notifier.dry_run = False self.notifier.gerrit = MockGerritAPI(raise_error=True) gerrit_dict = {'abc': PRStatusInfo('bar', 'SHA')} self.notifier.process_failing_prs(gerrit_dict) self.assertEqual(self.notifier.gerrit.cls_queried, ['abc']) self.assertEqual(self.notifier.gerrit.request_posted, []) self.assertLog([ 'INFO: Processing 1 CLs with failed Taskcluster checks.\n', 'ERROR: Could not process Gerrit CL abc: Error from query_cl\n' ])
def test_process_failing_prs_raise_gerrit_error(self): self.notifier.dry_run = False self.notifier.gerrit = MockGerritAPI(raise_error=True) gerrit_dict = {'abc': PRStatusInfo('bar', 'num')} self.notifier.process_failing_prs(gerrit_dict) self.assertEqual(self.notifier.gerrit.cls_queried, ['I4fd5039cd4ec991bb8f840eabe55574b37243ef2']) self.assertEqual(self.notifier.gerrit.request_posted, []) self.assertLog([ 'INFO: Processing 1 CLs with failed Taskcluster status.\n', 'ERROR: Could not process Dummy CL: Error from query_cl\n' ])
def test_from_gerrit_comment_success(self): gerrit_comment = ( 'The exported PR for the current patch failed Taskcluster check(s) ' 'on GitHub, which could indict cross-broswer failures on the ' 'exportable changes. Please contact ecosystem-infra@ team for ' 'more information.\n\n' 'Taskcluster Node ID: foo\n' 'Taskcluster Link: bar\n' 'Gerrit CL SHA: num') actual = PRStatusInfo.from_gerrit_comment(gerrit_comment) self.assertEqual(actual.node_id, 'foo') self.assertEqual(actual.link, 'bar') self.assertEqual(actual.gerrit_sha, 'num')
def test_has_latest_taskcluster_status_commented_true(self): pr_status_info = PRStatusInfo({'a': 'b'}, 123, 'SHA') messages = [ { "date": "2019-08-20 17:42:05.000000000", "message": "Uploaded patch set 1.\nInitial upload", "_revision_number": 1 }, { "date": "2019-08-21 17:41:05.000000000", "message": self.generate_notifier_comment(123, {}, 'SHA', 3), "_revision_number": 2 }, ] actual = self.notifier.has_latest_taskcluster_status_commented( messages, pr_status_info) self.assertTrue(actual)
def test_process_failing_prs_with_latest_sha(self): self.notifier.dry_run = False self.notifier.gerrit = MockGerritAPI() self.notifier.gerrit.cl = MockGerritCL(data={ 'change_id': 'abc', 'messages': [ { "date": "2019-08-20 17:42:05.000000000", "message": "Uploaded patch set 1.\nInitial upload", "_revision_number": 1 }, { "date": "2019-08-21 17:41:05.000000000", "message": self.generate_notifier_comment(123, 'notbar', 'notnum', 3), "_revision_number": 2 }, ], 'revisions': { 'SHA': { '_number': 1 } } }, api=self.notifier.gerrit) checks_results = {'key1': 'val1', 'key2': 'val2'} result_comment = '\nkey2 (val2)\nkey1 (val1)' expected = self.generate_notifier_comment(123, result_comment, 'Latest') gerrit_dict = {'abc': PRStatusInfo(checks_results, 123, None)} self.notifier.process_failing_prs(gerrit_dict) self.assertEqual(self.notifier.gerrit.cls_queried, ['abc']) self.assertEqual(self.notifier.gerrit.request_posted, [('/a/changes/abc/revisions/current/review', { 'message': expected })])
def test_process_failing_prs_with_latest_sha(self): self.notifier.dry_run = False self.notifier.gerrit = MockGerritAPI() self.notifier.gerrit.cl = MockGerritCL(data={ 'change_id': 'abc', 'messages': [ { "date": "2019-08-20 17:42:05.000000000", "message": "Uploaded patch set 1.\nInitial upload", "_revision_number": 1 }, { "date": "2019-08-21 17:41:05.000000000", "message": self.generate_notifier_comment(123, 'notbar', 'notnum', 3), "_revision_number": 2 }, ], 'revisions': { 'num': { '_number': 1 } } }, api=self.notifier.gerrit) expected = self.generate_notifier_comment(123, 'bar', 'Latest') gerrit_dict = {'abc': PRStatusInfo('bar', 123, None)} self.notifier.process_failing_prs(gerrit_dict) self.assertEqual(self.notifier.gerrit.cls_queried, ['I4fd5039cd4ec991bb8f840eabe55574b37243ef2', 'abc']) self.assertEqual(self.notifier.gerrit.request_posted, [('/a/changes/abc/revisions/current/review', { 'message': expected })])
def test_get_gerrit_sha_from_comment_fail(self): gerrit_comment = 'ABC' actual = PRStatusInfo.get_gerrit_sha_from_comment(gerrit_comment) self.assertIsNone(actual)