예제 #1
0
    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")
예제 #2
0
    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"
        ])
예제 #3
0
    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)
예제 #4
0
    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)
예제 #5
0
    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)
예제 #6
0
    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"})
예제 #7
0
    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"])
예제 #8
0
    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"], "{}")
예제 #9
0
    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"
        ])