def test_run_with_related_tests_but_no_related_tasks( self, update_config_with_task_mock, find_selected_tasks_mock, get_task_configs_for_test_mappings_mock, create_task_list_for_tests_mock, find_selected_test_files_mock, selected_tests_config_options): find_selected_test_files_mock.return_value = { "jstests/file-1.js", "jstests/file-3.js" } get_task_configs_for_test_mappings_mock.return_value = { "task_config_key": "task_config_value_1" } find_selected_tasks_mock.return_value = set() def update_config_with_task(evg_api, shrub_config, config_options, config_dict_of_suites_and_tasks): config_dict_of_suites_and_tasks[ "new_config_key"] = "new_config_values" update_config_with_task_mock.side_effect = update_config_with_task changed_files = {"src/file1.cpp", "src/file2.js"} config_dict_of_suites_and_tasks = under_test.run( MagicMock(), MagicMock(), MagicMock(), MagicMock(), changed_files, "variant") self.assertEqual(config_dict_of_suites_and_tasks["new_config_key"], "new_config_values")
def test_when_task_mappings_are_found_for_changed_files(self): evg_api_mock = self._mock_evg_api() evg_config = get_evergreen_config("etc/evergreen.yml") selected_tests_service_mock = MagicMock() selected_tests_service_mock.get_task_mappings.return_value = [ { "source_file": "src/file1.cpp", "tasks": [{ "name": "auth" }], }, ] selected_tests_variant_expansions = { "task_name": "selected_tests_gen", "build_variant": "selected-tests", "build_id": "my_build_id", "project": "mongodb-mongo-master" } repos = [mock_changed_git_files(["src/file1.cpp"])] origin_build_variants = ["enterprise-rhel-62-64-bit"] config_dict = under_test.run(evg_api_mock, evg_config, selected_tests_service_mock, selected_tests_variant_expansions, repos, origin_build_variants) self.assertIn("selected_tests_config.json", config_dict) # the auth task's generator task, auth_gen, has fallback_num_sub_suites = 4 in # its resmoke args, resulting in 4 subtasks being generated, plus a _misc task self.assertEqual(len(config_dict), 6) self.assertEqual(sorted(config_dict.keys()), [ "auth_0.yml", "auth_1.yml", "auth_2.yml", "auth_3.yml", "auth_misc.yml", "selected_tests_config.json" ])
def test_when_test_mappings_are_found_for_changed_files(self): evg_api_mock = self._mock_evg_api() evg_config = get_evergreen_config("etc/evergreen.yml") selected_tests_service_mock = MagicMock() selected_tests_service_mock.get_test_mappings.return_value = [ { "source_file": "src/file1.cpp", "test_files": [{"name": "jstests/auth/auth1.js"}], }, ] selected_tests_variant_expansions = { "task_name": "selected_tests_gen", "build_variant": "selected-tests", "build_id": "my_build_id", "project": "mongodb-mongo-master" } repos = [mock_changed_git_files(["src/file1.cpp"])] config_dict = under_test.run(evg_api_mock, evg_config, selected_tests_service_mock, selected_tests_variant_expansions, repos) self.assertIn("selected_tests_config.json", config_dict) # assert that tasks are generated on all required build variants build_variants_with_generated_tasks = json.loads( config_dict["selected_tests_config.json"])["buildvariants"] self.assertEqual( len(build_variants_with_generated_tasks), len(evg_config.get_required_variants())) # jstests/auth/auth1.js belongs to two suites, auth and auth_audit, each of which has # fallback_num_sub_suites = 4 in their resmoke args, resulting in 4 subtasks being generated # for each, hence 8 tasks total rhel_62_with_generated_tasks = next( (variant for variant in build_variants_with_generated_tasks if variant["name"] == "enterprise-rhel-62-64-bit-dynamic-required"), None) self.assertEqual(len(rhel_62_with_generated_tasks["tasks"]), 8)
def test_when_task_mappings_are_found_for_changed_files(self): evg_api_mock = self._mock_evg_api() evg_config = get_evergreen_config("etc/evergreen.yml") selected_tests_service_mock = MagicMock() selected_tests_service_mock.get_task_mappings.return_value = [ { "source_file": "src/file1.cpp", "tasks": [{"name": "auth"}], }, ] selected_tests_variant_expansions = { "task_name": "selected_tests_gen", "build_variant": "selected-tests", "build_id": "my_build_id", "project": "mongodb-mongo-master" } repos = [mock_changed_git_files(["src/file1.cpp"])] config_dict = under_test.run(evg_api_mock, evg_config, selected_tests_service_mock, selected_tests_variant_expansions, repos) self.assertIn("selected_tests_config.json", config_dict) # the auth task's generator task, auth_gen, has fallback_num_sub_suites = 4 in # its resmoke args, resulting in 4 subtasks being generated, plus a _misc task, hence 5 # tasks total build_variants_with_generated_tasks = json.loads( config_dict["selected_tests_config.json"])["buildvariants"] rhel_62_with_generated_tasks = next( (variant for variant in build_variants_with_generated_tasks if variant["name"] == "enterprise-rhel-62-64-bit-dynamic-required"), None) self.assertEqual(len(rhel_62_with_generated_tasks["tasks"]), 5)
def test_when_test_mappings_are_found_for_changed_files(self): evg_api_mock = self._mock_evg_api() evg_config = get_evergreen_config("etc/evergreen.yml") selected_tests_service_mock = MagicMock() selected_tests_service_mock.get_test_mappings.return_value = [ { "source_file": "src/file1.cpp", "test_files": [{ "name": "jstests/auth/auth1.js" }], }, ] selected_tests_variant_expansions = { "task_name": "selected_tests_gen", "build_variant": "selected-tests", "build_id": "my_build_id", "project": "mongodb-mongo-master", "version_id": "my_version", "task_id": "task_id", "max_sub_suites": 3, } repos = [mock_changed_git_files(["src/file1.cpp"])] config_dict = under_test.run(evg_api_mock, evg_config, selected_tests_service_mock, selected_tests_variant_expansions, repos) self.assertIn("selected_tests_config.json", config_dict) # assert that generated suite files have the suite name and the variant name in the # filename, to prevent tasks on different variants from using the same suite file self.assertIn("auth_enterprise-rhel-80-64-bit-dynamic-required_0.yml", config_dict) # assert that tasks are generated on all required build variants build_variants_with_generated_tasks = json.loads( config_dict["selected_tests_config.json"])["buildvariants"] self.assertEqual(len(build_variants_with_generated_tasks), len(evg_config.get_required_variants())) # jstests/auth/auth1.js belongs to two suites, auth and auth_audit, # max_sub_suites = 3, resulting in 3 subtasks being generated # for each, hence 6 tasks total rhel_80_with_generated_tasks = next( (variant for variant in build_variants_with_generated_tasks if variant["name"] == "enterprise-rhel-80-64-bit-dynamic-required" ), None) self.assertEqual(len(rhel_80_with_generated_tasks["tasks"]), 6)
def test_when_no_mappings_are_found_for_changed_files(self): evg_api_mock = self._mock_evg_api() evg_config = get_evergreen_config("etc/evergreen.yml") selected_tests_service_mock = MagicMock() selected_tests_service_mock.get_test_mappings.return_value = [] selected_tests_variant_expansions = { "task_name": "selected_tests_gen", "build_variant": "selected-tests", "build_id": "my_build_id", "project": "mongodb-mongo-master" } repos = [mock_changed_git_files([])] config_dict = under_test.run(evg_api_mock, evg_config, selected_tests_service_mock, selected_tests_variant_expansions, repos) # assert that config_dict does not contain keys for any generated task configs self.assertEqual(config_dict.keys(), {"selected_tests_config.json"})
def test_run(self, update_config_with_task_mock, get_task_configs_mock, selected_tests_config_options): get_task_configs_mock.return_value = {"task_config_key": "task_config_value_1"} def update_config_with_task(evg_api, shrub_config, config_options, config_dict_of_suites_and_tasks): config_dict_of_suites_and_tasks["new_config_key"] = "new_config_values" shrub_config.task("my_fake_task") update_config_with_task_mock.side_effect = update_config_with_task changed_files = {"src/file1.cpp", "src/file2.js"} config_dict_of_suites_and_tasks = under_test.run(MagicMock(), MagicMock(), MagicMock(), {}, changed_files, ["variant_1", "variant_2"]) self.assertEqual(config_dict_of_suites_and_tasks["new_config_key"], "new_config_values") self.assertIn("my_fake_task", config_dict_of_suites_and_tasks["selected_tests_config.json"])
def test_when_no_mappings_are_found_for_changed_files(self): evg_api_mock = self._mock_evg_api() evg_config = get_evergreen_config("etc/evergreen.yml") selected_tests_service_mock = MagicMock() selected_tests_service_mock.get_test_mappings.return_value = [] selected_tests_variant_expansions = { "task_name": "selected_tests_gen", "build_variant": "selected-tests", "build_id": "my_build_id", "project": "mongodb-mongo-master" } repos = [mock_changed_git_files([])] origin_build_variants = ["enterprise-rhel-62-64-bit"] config_dict = under_test.run(evg_api_mock, evg_config, selected_tests_service_mock, selected_tests_variant_expansions, repos, origin_build_variants) self.assertEqual(config_dict["selected_tests_config.json"], "{}")
def test_when_test_mappings_are_found_for_changed_files(self): evg_api_mock = self._mock_evg_api() evg_config = get_evergreen_config("etc/evergreen.yml") selected_tests_service_mock = MagicMock() selected_tests_service_mock.get_test_mappings.return_value = [ { "source_file": "src/file1.cpp", "test_files": [{ "name": "jstests/auth/auth1.js" }], }, ] selected_tests_variant_expansions = { "task_name": "selected_tests_gen", "build_variant": "selected-tests", "build_id": "my_build_id", "project": "mongodb-mongo-master", "version_id": "my_version", "task_id": "task_id" } repos = [mock_changed_git_files(["src/file1.cpp"])] origin_build_variants = ["enterprise-rhel-62-64-bit"] config_dict = under_test.run(evg_api_mock, evg_config, selected_tests_service_mock, selected_tests_variant_expansions, repos, origin_build_variants) self.assertIn("selected_tests_config.json", config_dict) # jstests/auth/auth1.js belongs to two suites, auth and auth_audit, each of which has # fallback_num_sub_suites = 4 in their resmoke args, resulting in 4 subtasks being generated # for each self.assertEqual(len(config_dict), 9) self.assertEqual(sorted(config_dict.keys()), [ "auth_0.yml", "auth_1.yml", "auth_2.yml", "auth_3.yml", "auth_audit_4.yml", "auth_audit_5.yml", "auth_audit_6.yml", "auth_audit_7.yml", "selected_tests_config.json" ])