Пример #1
0
    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)
Пример #2
0
    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)
Пример #5
0
    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)
Пример #6
0
    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)
Пример #8
0
    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)
Пример #9
0
    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')
Пример #10
0
    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, [])
Пример #11
0
    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')
Пример #12
0
    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)
Пример #13
0
    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
                         })])
Пример #15
0
    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'
        ])
Пример #16
0
    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)
Пример #19
0
    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
                         })])
Пример #20
0
    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
                         })])
Пример #21
0
    def test_get_gerrit_sha_from_comment_fail(self):
        gerrit_comment = 'ABC'

        actual = PRStatusInfo.get_gerrit_sha_from_comment(gerrit_comment)

        self.assertIsNone(actual)