diff options
Diffstat (limited to 'buildscripts/tests/test_evergreen_activate_gen_tasks.py')
| -rw-r--r-- | buildscripts/tests/test_evergreen_activate_gen_tasks.py | 116 |
1 files changed, 100 insertions, 16 deletions
diff --git a/buildscripts/tests/test_evergreen_activate_gen_tasks.py b/buildscripts/tests/test_evergreen_activate_gen_tasks.py index dbb64380838..5470828c6c3 100644 --- a/buildscripts/tests/test_evergreen_activate_gen_tasks.py +++ b/buildscripts/tests/test_evergreen_activate_gen_tasks.py @@ -1,42 +1,126 @@ """Unit tests for the generate_resmoke_suite script.""" +# pylint: disable=invalid-name import unittest -from mock import MagicMock +from mock import MagicMock, mock from buildscripts import evergreen_activate_gen_tasks as under_test +from evergreen import Build, EvergreenApi, Task, Version # pylint: disable=missing-docstring,invalid-name,unused-argument,no-self-use,protected-access # pylint: disable=too-many-locals,too-many-lines,too-many-public-methods,no-value-for-parameter -def build_mock_task(name, task_id): - mock_task = MagicMock(display_name=name, task_id=task_id) +def build_mock_task(display_name, task_id): + mock_task = MagicMock(spec_set=Task, display_name=display_name, task_id=task_id) return mock_task -def build_mock_evg_api(mock_task_list): - mock_build = MagicMock() - mock_build.get_tasks.return_value = mock_task_list - mock_evg_api = MagicMock() - mock_evg_api.build_by_id.return_value = mock_build +def build_mock_task_list(num_tasks): + return [build_mock_task(f"task_{i}", f"id_{i}") for i in range(num_tasks)] + + +class MockVariantData(): + """An object to help create a mock evg api.""" + + def __init__(self, build_id, variant_name, task_list): + self.build_id = build_id + self.variant_name = variant_name + self.task_list = task_list + + +def build_mock_evg_api(variant_data_list): + class VersionPatchedSpec(Version): + """A patched `Version` with instance properties included for magic mock spec.""" + build_variants_map = MagicMock() + + mock_version = MagicMock(spec_set=VersionPatchedSpec) + mock_version.build_variants_map = { + variant_data.variant_name: variant_data.build_id + for variant_data in variant_data_list + } + + mock_evg_api = MagicMock(spec_set=EvergreenApi) + mock_evg_api.version_by_id.return_value = mock_version + + build_id_mapping = { + variant_data.build_id: variant_data.task_list + for variant_data in variant_data_list + } + + def tasks_by_build_side_effect(build_id): + return build_id_mapping[build_id] + + mock_evg_api.tasks_by_build.side_effect = tasks_by_build_side_effect return mock_evg_api class TestActivateTask(unittest.TestCase): def test_task_with_display_name_is_activated(self): - n_tasks = 5 - mock_task_list = [build_mock_task(f"task_{i}", f"id_{i}") for i in range(n_tasks)] - mock_evg_api = build_mock_evg_api(mock_task_list) + expansions = under_test.EvgExpansions(**{ + "build_id": "build_id", + "version_id": "version_id", + "task_name": "task_3_gen", + }) + mock_task_list = build_mock_task_list(5) + mock_evg_api = build_mock_evg_api( + [MockVariantData("build_id", "non-burn-in-bv", mock_task_list)]) - under_test.activate_task("build_id", "task_3", mock_evg_api) + under_test.activate_task(expansions, mock_evg_api) mock_evg_api.configure_task.assert_called_with("id_3", activated=True) def test_task_with_no_matching_name(self): - n_tasks = 5 - mock_task_list = [build_mock_task(f"task_{i}", f"id_{i}") for i in range(n_tasks)] - mock_evg_api = build_mock_evg_api(mock_task_list) + expansions = under_test.EvgExpansions(**{ + "build_id": "build_id", + "version_id": "version_id", + "task_name": "not_an_existing_task", + }) + mock_task_list = build_mock_task_list(5) + mock_evg_api = build_mock_evg_api( + [MockVariantData("build_id", "non-burn-in-bv", mock_task_list)]) - under_test.activate_task("build_id", "not_an_existing_task", mock_evg_api) + under_test.activate_task(expansions, mock_evg_api) mock_evg_api.configure_task.assert_not_called() + + def test_burn_in_tags_tasks_are_activated(self): + expansions = under_test.EvgExpansions(**{ + "build_id": "build_id", + "version_id": "version_id", + "task_name": "burn_in_tags_gen", + }) + mock_task_list_2 = build_mock_task_list(5) + mock_task_list_2.append(build_mock_task("burn_in_tests", "burn_in_tests_id_2")) + mock_task_list_3 = build_mock_task_list(5) + mock_task_list_3.append(build_mock_task("burn_in_tests", "burn_in_tests_id_3")) + mock_evg_api = build_mock_evg_api([ + MockVariantData("1", "variant1-generated-by-burn-in-tags", mock_task_list_2), + MockVariantData("2", "variant2-generated-by-burn-in-tags", mock_task_list_3) + ]) + + under_test.activate_task(expansions, mock_evg_api) + + mock_evg_api.configure_task.assert_has_calls([ + mock.call("burn_in_tests_id_2", activated=True), + mock.call("burn_in_tests_id_3", activated=True) + ]) + + def test_burn_in_tags_task_skips_non_existing_build_variant(self): + expansions = under_test.EvgExpansions(**{ + "build_id": "build_id", + "version_id": "version_id", + "task_name": "burn_in_tags_gen", + }) + mock_task_list_1 = build_mock_task_list(5) + mock_task_list_1.append(build_mock_task("burn_in_tags_gen", "burn_in_tags_gen_id_1")) + mock_task_list_2 = build_mock_task_list(5) + mock_task_list_2.append(build_mock_task("burn_in_tests", "burn_in_tests_id_2")) + mock_evg_api = build_mock_evg_api([ + MockVariantData("1", "variant1-non-burn-in", mock_task_list_1), + MockVariantData("2", "variant2-generated-by-burn-in-tags", mock_task_list_2) + ]) + + under_test.activate_task(expansions, mock_evg_api) + + mock_evg_api.configure_task.assert_called_once_with("burn_in_tests_id_2", activated=True) |
