2019-12-06 16:59:35 +00:00
|
|
|
"""Unit tests for the evergreen_task_timeout script."""
|
2020-04-29 19:00:37 +01:00
|
|
|
import itertools
|
2019-12-06 16:59:35 +00:00
|
|
|
import unittest
|
2021-07-13 15:55:44 -04:00
|
|
|
from typing import List
|
2020-04-28 20:46:00 -04:00
|
|
|
from mock import MagicMock, patch
|
2019-12-06 16:59:35 +00:00
|
|
|
|
2021-07-13 15:55:44 -04:00
|
|
|
import evergreen
|
|
|
|
|
|
|
|
|
|
from buildscripts.validate_commit_message import main, STATUS_OK, STATUS_ERROR
|
2019-12-06 16:59:35 +00:00
|
|
|
|
|
|
|
|
# pylint: disable=missing-docstring,no-self-use
|
|
|
|
|
|
|
|
|
|
INVALID_MESSAGES = [
|
2020-04-29 19:00:37 +01:00
|
|
|
"", # You must provide a message
|
|
|
|
|
"RevertEVG-1", # revert and ticket must be formatted
|
|
|
|
|
"revert EVG-1", # revert must be capitalized
|
|
|
|
|
"This is not a valid message", # message must be valid
|
|
|
|
|
"Fix Lint", # Fix lint is strict in terms of caps
|
2019-12-06 16:59:35 +00:00
|
|
|
]
|
|
|
|
|
|
2019-12-09 11:45:50 +00:00
|
|
|
NS = "buildscripts.validate_commit_message"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def ns(relative_name): # pylint: disable=invalid-name
|
2020-04-28 20:46:00 -04:00
|
|
|
"""Return a full name from a name relative to the test module"s name space."""
|
2019-12-09 11:45:50 +00:00
|
|
|
return NS + "." + relative_name
|
|
|
|
|
|
2019-12-06 16:59:35 +00:00
|
|
|
|
2021-07-13 15:55:44 -04:00
|
|
|
def create_mock_evg_client(code_change_messages: List[str]) -> MagicMock:
|
|
|
|
|
mock_code_change = MagicMock()
|
|
|
|
|
mock_code_change.commit_messages = code_change_messages
|
|
|
|
|
|
|
|
|
|
mock_patch = MagicMock()
|
|
|
|
|
mock_patch.module_code_changes = [mock_code_change]
|
|
|
|
|
|
|
|
|
|
mock_evg_client = MagicMock()
|
|
|
|
|
mock_evg_client.patch_by_id.return_value = mock_patch
|
|
|
|
|
return mock_evg_client
|
|
|
|
|
|
|
|
|
|
|
2020-04-29 19:00:37 +01:00
|
|
|
def interleave_new_format(older):
|
|
|
|
|
"""Create a new list containing a new and old format copy of each string."""
|
|
|
|
|
newer = [
|
|
|
|
|
f"Commit Queue Merge: '{old}' into 'mongodb/mongo:SERVER-45949-validate-message-format'"
|
|
|
|
|
for old in older
|
|
|
|
|
]
|
|
|
|
|
return list(itertools.chain(*zip(older, newer)))
|
|
|
|
|
|
|
|
|
|
|
2020-04-28 20:46:00 -04:00
|
|
|
class ValidateCommitMessageTest(unittest.TestCase):
|
2021-07-13 15:55:44 -04:00
|
|
|
@patch.object(evergreen.RetryingEvergreenApi, "get_api")
|
|
|
|
|
def test_valid_commits(self, get_api_mock):
|
2019-12-06 16:59:35 +00:00
|
|
|
messages = [
|
2020-04-29 19:00:37 +01:00
|
|
|
"Fix lint",
|
|
|
|
|
"EVG-1", # Test valid projects with various number lengths
|
|
|
|
|
"SERVER-20",
|
|
|
|
|
"WT-300",
|
|
|
|
|
"SERVER-44338",
|
|
|
|
|
"Revert EVG-5",
|
|
|
|
|
"Revert SERVER-60",
|
|
|
|
|
"Revert WT-700",
|
|
|
|
|
"Revert 'SERVER-8000",
|
|
|
|
|
'Revert "SERVER-90000',
|
|
|
|
|
"Import wiredtiger: 58115abb6fbb3c1cc7bfd087d41a47347bce9a69 from branch mongodb-4.4",
|
|
|
|
|
"Import tools: 58115abb6fbb3c1cc7bfd087d41a47347bce9a69 from branch mongodb-4.4"
|
2020-01-23 17:52:51 +00:00
|
|
|
]
|
2021-07-13 15:55:44 -04:00
|
|
|
api_mock = create_mock_evg_client(interleave_new_format(messages))
|
|
|
|
|
|
|
|
|
|
get_api_mock.return_value = api_mock
|
|
|
|
|
self.assertTrue(main(["fake_version"]) == STATUS_OK)
|
2020-03-02 14:48:15 +00:00
|
|
|
|
2021-07-13 15:55:44 -04:00
|
|
|
@patch.object(evergreen.RetryingEvergreenApi, "get_api")
|
|
|
|
|
def test_private(self, get_api_mock):
|
|
|
|
|
messages = ["XYZ-1"]
|
|
|
|
|
api_mock = create_mock_evg_client(interleave_new_format(messages))
|
2020-03-02 14:48:15 +00:00
|
|
|
|
2021-07-13 15:55:44 -04:00
|
|
|
get_api_mock.return_value = api_mock
|
|
|
|
|
self.assertTrue(main(["fake_version"]) == STATUS_ERROR)
|
2020-03-02 14:48:15 +00:00
|
|
|
|
2021-07-13 15:55:44 -04:00
|
|
|
@patch.object(evergreen.RetryingEvergreenApi, "get_api")
|
|
|
|
|
def test_private_with_public(self, get_api_mock):
|
|
|
|
|
messages = [
|
|
|
|
|
"Fix lint",
|
|
|
|
|
"EVG-1", # Test valid projects with various number lengths
|
|
|
|
|
"SERVER-20",
|
|
|
|
|
"XYZ-1"
|
|
|
|
|
]
|
|
|
|
|
api_mock = create_mock_evg_client(interleave_new_format(messages))
|
2020-03-02 14:48:15 +00:00
|
|
|
|
2021-07-13 15:55:44 -04:00
|
|
|
get_api_mock.return_value = api_mock
|
|
|
|
|
self.assertTrue(main(["fake_version"]) == STATUS_ERROR)
|