SERVER-55279: Commit queue message validation got tricked by merging multiple commits

This commit is contained in:
Jeff Zambory
2021-07-13 15:55:44 -04:00
committed by Evergreen Agent
parent 987dfecbce
commit ab08cdc4f2
5 changed files with 62 additions and 49 deletions

View File

@@ -1,9 +1,12 @@
"""Unit tests for the evergreen_task_timeout script."""
import itertools
import unittest
from typing import List
from mock import MagicMock, patch
from buildscripts.validate_commit_message import main, STATUS_OK, STATUS_ERROR, GIT_SHOW_COMMAND
import evergreen
from buildscripts.validate_commit_message import main, STATUS_OK, STATUS_ERROR
# pylint: disable=missing-docstring,no-self-use
@@ -23,6 +26,18 @@ def ns(relative_name): # pylint: disable=invalid-name
return NS + "." + relative_name
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
def interleave_new_format(older):
"""Create a new list containing a new and old format copy of each string."""
newer = [
@@ -33,7 +48,8 @@ def interleave_new_format(older):
class ValidateCommitMessageTest(unittest.TestCase):
def test_valid(self):
@patch.object(evergreen.RetryingEvergreenApi, "get_api")
def test_valid_commits(self, get_api_mock):
messages = [
"Fix lint",
"EVG-1", # Test valid projects with various number lengths
@@ -48,22 +64,28 @@ class ValidateCommitMessageTest(unittest.TestCase):
"Import wiredtiger: 58115abb6fbb3c1cc7bfd087d41a47347bce9a69 from branch mongodb-4.4",
"Import tools: 58115abb6fbb3c1cc7bfd087d41a47347bce9a69 from branch mongodb-4.4"
]
api_mock = create_mock_evg_client(interleave_new_format(messages))
self.assertTrue(
all(main([message]) == STATUS_OK for message in interleave_new_format(messages)))
get_api_mock.return_value = api_mock
self.assertTrue(main(["fake_version"]) == STATUS_OK)
def test_private(self):
self.assertEqual(main(["XYZ-1"]), STATUS_ERROR)
@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))
def test_catch_all(self):
self.assertTrue(
all(
main([message]) == STATUS_ERROR
for message in interleave_new_format(INVALID_MESSAGES)))
get_api_mock.return_value = api_mock
self.assertTrue(main(["fake_version"]) == STATUS_ERROR)
def test_last_git_commit_success(self):
with patch(
ns("subprocess.check_output"),
return_value=bytearray('SERVER-1111 this is a test', 'utf-8')) as check_output_mock:
self.assertEqual(main([]), 0)
check_output_mock.assert_called_with(GIT_SHOW_COMMAND)
@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))
get_api_mock.return_value = api_mock
self.assertTrue(main(["fake_version"]) == STATUS_ERROR)