169 строки
5.7 KiB
Python
169 строки
5.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import json
|
|
|
|
import markdown2
|
|
import pytest
|
|
|
|
from mozci.console.commands.push import ClassifyCommand
|
|
from mozci.push import PushStatus, Regressions
|
|
from mozci.task import TestTask
|
|
|
|
EMAIL_EMPTY_TO_BAD = """
|
|
# Push 1 evolved from no classification to BAD
|
|
|
|
Rev: [rev1](https://treeherder.mozilla.org/jobs?repo=unittest&revision=rev1)\n
|
|
Author: Bob Bob bbob@mozilla.com\n
|
|
Time: 09:45:02
|
|
|
|
## Real failures
|
|
|
|
- Group [group1](https://treeherder.mozilla.org/#/jobs?repo=unittest&tochange=rev1&test_paths=group1) - Tasks:
|
|
- [random-test-task](https://treeherder.mozilla.org/#/jobs?repo=unittest&revision=rev1&selectedTaskRun=taskIdXXX-0)
|
|
- Group [group2](https://treeherder.mozilla.org/#/jobs?repo=unittest&tochange=rev1&test_paths=group2) - No tasks available
|
|
|
|
"""
|
|
|
|
EMAIL_UNKNOWN_TO_BAD = """
|
|
# Push 1 evolved from UNKNOWN to BAD
|
|
|
|
Rev: [rev1](https://treeherder.mozilla.org/jobs?repo=unittest&revision=rev1)\n
|
|
Author: Bob Bob bbob@mozilla.com\n
|
|
Time: 09:45:02
|
|
|
|
## Real failures
|
|
|
|
- Group [group1](https://treeherder.mozilla.org/#/jobs?repo=unittest&tochange=rev1&test_paths=group1) - Tasks:
|
|
- [random-test-task](https://treeherder.mozilla.org/#/jobs?repo=unittest&revision=rev1&selectedTaskRun=taskIdXXX-0)
|
|
- Group [group2](https://treeherder.mozilla.org/#/jobs?repo=unittest&tochange=rev1&test_paths=group2) - No tasks available
|
|
|
|
"""
|
|
|
|
EMAIL_BAD_TO_UNKNOWN = """
|
|
# Push 1 evolved from BAD to UNKNOWN
|
|
|
|
Rev: [rev1](https://treeherder.mozilla.org/jobs?repo=unittest&revision=rev1)\n
|
|
Author: Bob Bob bbob@mozilla.com\n
|
|
Time: 09:45:02
|
|
|
|
## Real failures
|
|
|
|
- Group [group1](https://treeherder.mozilla.org/#/jobs?repo=unittest&tochange=rev1&test_paths=group1) - Tasks:
|
|
- [random-test-task](https://treeherder.mozilla.org/#/jobs?repo=unittest&revision=rev1&selectedTaskRun=taskIdXXX-0)
|
|
- Group [group2](https://treeherder.mozilla.org/#/jobs?repo=unittest&tochange=rev1&test_paths=group2) - No tasks available
|
|
|
|
"""
|
|
|
|
EMAIL_BAD_TO_GOOD = """
|
|
# Push 1 evolved from BAD to GOOD
|
|
|
|
Rev: [rev1](https://treeherder.mozilla.org/jobs?repo=unittest&revision=rev1)\n
|
|
Author: Bob Bob bbob@mozilla.com\n
|
|
Time: 09:45:02
|
|
|
|
## Real failures
|
|
|
|
- Group [group1](https://treeherder.mozilla.org/#/jobs?repo=unittest&tochange=rev1&test_paths=group1) - Tasks:
|
|
- [random-test-task](https://treeherder.mozilla.org/#/jobs?repo=unittest&revision=rev1&selectedTaskRun=taskIdXXX-0)
|
|
- Group [group2](https://treeherder.mozilla.org/#/jobs?repo=unittest&tochange=rev1&test_paths=group2) - No tasks available
|
|
|
|
"""
|
|
|
|
EMAIL_GOOD_TO_BAD = """
|
|
# Push 1 evolved from GOOD to BAD
|
|
|
|
Rev: [rev1](https://treeherder.mozilla.org/jobs?repo=unittest&revision=rev1)\n
|
|
Author: Bob Bob bbob@mozilla.com\n
|
|
Time: 09:45:02
|
|
|
|
## Real failures
|
|
|
|
- Group [group1](https://treeherder.mozilla.org/#/jobs?repo=unittest&tochange=rev1&test_paths=group1) - Tasks:
|
|
- [random-test-task](https://treeherder.mozilla.org/#/jobs?repo=unittest&revision=rev1&selectedTaskRun=taskIdXXX-0)
|
|
- Group [group2](https://treeherder.mozilla.org/#/jobs?repo=unittest&tochange=rev1&test_paths=group2) - No tasks available
|
|
|
|
"""
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"previous, current, email_content",
|
|
(
|
|
(None, PushStatus.GOOD, None),
|
|
(None, PushStatus.UNKNOWN, None),
|
|
(None, PushStatus.BAD, EMAIL_EMPTY_TO_BAD),
|
|
(PushStatus.GOOD, PushStatus.GOOD, None),
|
|
(PushStatus.GOOD, PushStatus.UNKNOWN, None),
|
|
(PushStatus.GOOD, PushStatus.BAD, EMAIL_GOOD_TO_BAD),
|
|
(PushStatus.BAD, PushStatus.GOOD, EMAIL_BAD_TO_GOOD),
|
|
(PushStatus.BAD, PushStatus.UNKNOWN, EMAIL_BAD_TO_UNKNOWN),
|
|
(PushStatus.BAD, PushStatus.BAD, None),
|
|
(PushStatus.UNKNOWN, PushStatus.GOOD, None),
|
|
(PushStatus.UNKNOWN, PushStatus.UNKNOWN, None),
|
|
(PushStatus.UNKNOWN, PushStatus.BAD, EMAIL_UNKNOWN_TO_BAD),
|
|
),
|
|
)
|
|
def test_classification_evolution(
|
|
create_push, responses, previous, current, email_content
|
|
):
|
|
# Setup dummy regressions with real failures
|
|
regressions = Regressions(
|
|
real={
|
|
"group1": [TestTask(id="taskIdXXX", label="random-test-task")],
|
|
"group2": [],
|
|
},
|
|
intermittent={},
|
|
unknown={},
|
|
)
|
|
|
|
# Create a random push
|
|
push = create_push()
|
|
|
|
# Mock Taskcluster email notification service
|
|
responses.add(
|
|
responses.POST,
|
|
"https://community-tc.services.mozilla.com/api/notify/v1/email",
|
|
json={},
|
|
status=200,
|
|
)
|
|
# Mock Taskcluster Matrix notification service
|
|
responses.add(
|
|
responses.POST,
|
|
"https://community-tc.services.mozilla.com/api/notify/v1/matrix",
|
|
json={},
|
|
status=200,
|
|
)
|
|
|
|
# Run the notification code from mozci push classify
|
|
cmd = ClassifyCommand()
|
|
cmd.name = "classify"
|
|
cmd.branch = "unittest"
|
|
cmd.send_notifications(
|
|
emails=["test@mozilla.com"],
|
|
matrix_room="!tEsTmAtRIxRooM:mozilla.org",
|
|
push=push,
|
|
previous=previous,
|
|
current=current,
|
|
regressions=regressions,
|
|
)
|
|
|
|
if email_content:
|
|
# Check an email and a matrix notification were correctly sent
|
|
assert len(responses.calls) == 2
|
|
email_call = responses.calls[0]
|
|
assert json.loads(email_call.request.body) == {
|
|
"address": "test@mozilla.com",
|
|
"subject": "Mozci | Push status evolution 1 rev1",
|
|
"content": email_content,
|
|
}
|
|
matrix_call = responses.calls[1]
|
|
assert json.loads(matrix_call.request.body) == {
|
|
"roomId": "!tEsTmAtRIxRooM:mozilla.org",
|
|
"body": email_content,
|
|
"formattedBody": markdown2.markdown(email_content),
|
|
"format": "org.matrix.custom.html",
|
|
"msgtype": "m.text",
|
|
}
|
|
else:
|
|
# Check no email was sent
|
|
assert len(responses.calls) == 0
|