コード例 #1
0
 def test_retrieve_log_with_raw(self, sample_task):
     mock_api = MagicMock()
     task = Task(sample_task, mock_api)
     log = task.retrieve_log('task_log', raw=True)
     assert log == mock_api.retrieve_task_log.return_value
     mock_api.retrieve_task_log.assert_called_with(task.log_map['task_log'],
                                                   True)
コード例 #2
0
    def test_generate_by_system_undispatched_priority(self, sample_task_list):
        sample_task_list[0]["status"] = "undispatched"
        sample_task_list[1]["status"] = "failure"
        sample_task_list[1]["status_details"]["type"] = "system"
        sample_task_list[1]["status_details"]["timed_out"] = True
        sample_task_list[2]["status"] = "failure"

        sample_task_list[0]["generated_by"] = "foo"
        sample_task_list[1]["generated_by"] = "foo"
        sample_task_list[2]["generated_by"] = "foo"

        mock_build = create_mock_build([
            Task(sample_task_list[0], None),
            Task(sample_task_list[1], None),
            Task(sample_task_list[2], None),
        ])

        build_metrics = under_test.BuildMetrics(mock_build).calculate()
        assert build_metrics.undispatched_count == 1
        assert build_metrics.failure_count == 2
        assert build_metrics.system_failure_count == 1
        assert build_metrics.timed_out_count == 1

        assert build_metrics.display_success_count == 0
        assert build_metrics.display_failure_count == 0
        assert build_metrics.display_system_failure_count == 0
        assert build_metrics.display_timed_out_count == 0
        assert build_metrics.display_undispatched_count == 1
コード例 #3
0
ファイル: test_task.py プロジェクト: threebee/evergreen.py
    def test_detailed_task_is_scored_correctly(self, sample_task,
                                               status_string, status_score):
        sample_task["status_details"]["type"] = "system"
        sample_task["status"] = "failed"
        sample_task["status_details"]["timed_out"] = status_string
        task = Task(sample_task, None)

        assert task.get_status_score() == status_score
コード例 #4
0
ファイル: test_task.py プロジェクト: threebee/evergreen.py
    def test_get_manifest(self, sample_task):
        mock_api = MagicMock()
        task = Task(sample_task, mock_api)

        manifest = task.get_manifest()

        assert manifest == mock_api.manifest_for_task.return_value
        mock_api.manifest_for_task.assert_called_with(task.task_id)
コード例 #5
0
ファイル: test_task.py プロジェクト: threebee/evergreen.py
 def test_bad_status_attributes(self, sample_task):
     sample_task["status_details"]["type"] = "system"
     sample_task["status"] = "failed"
     sample_task["status_details"]["timed_out"] = True
     task = Task(sample_task, None)
     assert not task.is_success()
     assert task.is_system_failure()
     assert task.is_timeout()
コード例 #6
0
    def test_get_tests(self, sample_task):
        mock_api = MagicMock()
        task = Task(sample_task, mock_api)

        tests = task.get_tests()

        mock_api.tests_by_task.assert_called_once()
        assert tests == mock_api.tests_by_task.return_value
コード例 #7
0
 def test_bad_status_attributes(self, sample_task):
     sample_task['status_details']['type'] = 'system'
     sample_task['status'] = 'failed'
     sample_task['status_details']['timed_out'] = True
     task = Task(sample_task, None)
     assert not task.is_success()
     assert task.is_system_failure()
     assert task.is_timeout()
コード例 #8
0
ファイル: test_task.py プロジェクト: threebee/evergreen.py
    def test_get_execution_tasks(self, sample_task, sample_display_task):
        mock_api = MagicMock()
        mock_api.task_by_id.return_value = Task(sample_task, mock_api)

        display_task = Task(sample_display_task, mock_api)
        execution_tasks = display_task.get_execution_tasks()

        assert len(execution_tasks) == len(
            sample_display_task["execution_tasks"])
コード例 #9
0
    def test_get_execution(self, sample_task):
        task = Task(sample_task, None)
        execution1 = task.get_execution(1)
        assert execution1.display_name == 'aggregation_auth'

        execution0 = task.get_execution(0)
        assert execution0.display_name == 'sharding_auth_gen'

        assert not task.get_execution(999)
コード例 #10
0
    def test_task_filter(self, sample_task):
        n_tasks = 5
        task_list = [Task(sample_task, None) for _ in range(n_tasks)]
        sample_task_2 = sample_task.copy()
        filter_task_name = 'filter me'
        sample_task_2['display_name'] = filter_task_name
        task_list_2 = [Task(sample_task_2, None) for _ in range(n_tasks)]
        mock_build = create_mock_build(task_list + task_list_2)

        build_metrics = under_test.BuildMetrics(mock_build)
        build_metrics.calculate(lambda t: filter_task_name not in t.display_name)
        assert build_metrics.total_tasks == n_tasks
コード例 #11
0
ファイル: test_task.py プロジェクト: threebee/evergreen.py
    def test_get_tests(self, sample_task, execution, expected):
        mock_api = MagicMock()
        task = Task(sample_task, mock_api)

        if execution is None:
            tests = task.get_tests()
        else:
            tests = task.get_tests(execution=execution)

        mock_api.tests_by_task.assert_called_once()

        kwargs = mock_api.tests_by_task.call_args[1]
        assert "execution" in kwargs and kwargs["execution"] == expected
        assert tests == mock_api.tests_by_task.return_value
コード例 #12
0
    def test_adding_successful_task(self, sample_task):
        sample_task["status"] = "success"
        task = Task(sample_task, None)
        mock_build = create_mock_build()

        build_metrics = under_test.BuildMetrics(mock_build)
        build_metrics._count_task(task)
        build_metrics._count_display_tasks()

        assert build_metrics.undispatched_count == 0
        assert build_metrics.total_tasks == 1
        assert len(build_metrics._start_times) == 1
        assert build_metrics.failure_count == 0
        assert build_metrics.success_count == 1
        assert build_metrics.pct_tasks_success == 1
        assert build_metrics.system_failure_count == 0
        assert build_metrics.timed_out_count == 0

        assert build_metrics.display_undispatched_count == 0
        assert build_metrics.total_display_tasks == 1
        assert build_metrics.display_failure_count == 0
        assert build_metrics.display_success_count == 1
        assert build_metrics.pct_display_tasks_success == 1
        assert build_metrics.display_system_failure_count == 0
        assert build_metrics.display_timed_out_count == 0
コード例 #13
0
ファイル: test_task.py プロジェクト: threebee/evergreen.py
 def test_oom_tracker_info_object_has_oom(self, sample_task):
     task = Task(sample_task, None)
     assert task.status_details.oom_tracker_info == OomTrackerInfo(
         task.json["status_details"]["oom_tracker_info"], None)
     assert (task.status_details.oom_tracker_info.detected ==
             task.status_details.json["oom_tracker_info"]["detected"])
     assert (task.status_details.oom_tracker_info.pids ==
             task.status_details.json["oom_tracker_info"]["pids"])
コード例 #14
0
    def test_in_progress_task(self, sample_task):
        sample_task["finish_time"] = None
        task = Task(sample_task, None)
        mock_build = create_mock_build()

        build_metrics = under_test.BuildMetrics(mock_build)
        with pytest.raises(ActiveTaskMetricsException):
            build_metrics._count_task(task)
コード例 #15
0
    def test_string_format(self, sample_task):
        task = Task(sample_task, None)
        mock_build = create_mock_build([task])

        build_metrics = under_test.BuildMetrics(mock_build)
        build_metrics._count_task(task)

        assert mock_build.id in str(build_metrics)
コード例 #16
0
ファイル: test_task.py プロジェクト: threebee/evergreen.py
    def test_get_execution_tasks_with_filters(self, sample_task,
                                              sample_display_task):
        mock_api = MagicMock()
        mock_api.task_by_id.return_value = Task(sample_task, mock_api)
        max_return = 2
        seen = 0

        def cap_seen(t):
            nonlocal seen
            if seen >= max_return:
                return False
            seen += 1
            return True

        display_task = Task(sample_display_task, mock_api)
        execution_tasks = display_task.get_execution_tasks(filter_fn=cap_seen)

        assert len(execution_tasks) == max_return
コード例 #17
0
    def test_display_tasks_are_filtered(self, sample_task):
        sample_task["display_only"] = True
        task = Task(sample_task, None)
        mock_build = create_mock_build([task])

        build_metrics = under_test.BuildMetrics(mock_build)
        build_metrics.calculate()

        assert len(build_metrics.task_list) == 1
        assert build_metrics.total_tasks == 0
コード例 #18
0
    def test_dict_format(self, sample_task):
        task = Task(sample_task, None)
        mock_build = create_mock_build()

        build_metrics = under_test.BuildMetrics(mock_build)
        build_metrics._count_task(task)

        bm_dict = build_metrics.as_dict()
        assert bm_dict['build'] == mock_build.id
        assert 'tasks' not in bm_dict
コード例 #19
0
    def test_dict_format_with_children(self, sample_task):
        task = Task(sample_task, None)
        mock_build = create_mock_build([task])

        build_metrics = under_test.BuildMetrics(mock_build)
        build_metrics.calculate()

        bm_dict = build_metrics.as_dict(include_children=True)
        assert bm_dict["build"] == mock_build.id
        assert len(bm_dict["tasks"]) == 1
        assert bm_dict["tasks"][0]["task_id"] == task.task_id
コード例 #20
0
    def test_various_tasks(self, sample_task):
        n_tasks = 5
        task_list = [Task(sample_task, None) for _ in range(n_tasks)]
        mock_build = create_mock_build(task_list)

        build_metrics = under_test.BuildMetrics(mock_build).calculate()

        assert build_metrics.total_tasks == n_tasks
        assert build_metrics.pct_tasks_success == 1
        assert len(build_metrics._create_times) == n_tasks
        assert len(build_metrics._start_times) == n_tasks
        assert len(build_metrics._finish_times) == n_tasks
コード例 #21
0
    def test_adding_undispatched_task(self, sample_task):
        sample_task['status'] = 'undispatched'
        task = Task(sample_task, None)
        mock_build = create_mock_build()

        build_metrics = under_test.BuildMetrics(mock_build)
        build_metrics._count_task(task)

        assert build_metrics.undispatched_count == 1
        assert build_metrics.pct_tasks_undispatched == 1
        assert build_metrics.total_tasks == 1
        assert len(build_metrics._start_times) == 0
コード例 #22
0
ファイル: api.py プロジェクト: zamj/evergreen.py
    def tasks_by_project(self, project_id, statuses=None):
        """
        Get all the tasks for a project.

        :param project_id: The project's id.
        :param statuses: the types of statuses to get tasks for.
        :return: The list of matching tasks.
        """
        url = self._create_url("/projects/{project_id}/versions/tasks".format(
            project_id=project_id))
        params = {'status': statuses} if statuses else None
        return [Task(json, self) for json in self._paginate(url, params)]
コード例 #23
0
    def test_adding_undispatched_generated_task(self, sample_task):
        n_tasks = 2
        sample_task["status"] = "undispatched"
        sample_task["generated_by"] = "foobar"
        task_list = [Task(sample_task, None) for _ in range(n_tasks)]

        mock_build = create_mock_build(task_list)

        build_metrics = under_test.BuildMetrics(mock_build).calculate()
        assert build_metrics.display_undispatched_count == 1
        assert build_metrics.total_display_tasks == 1
        assert build_metrics.pct_display_tasks_undispatched == 1
コード例 #24
0
    def test_generate_by_failure_priority(self, sample_task_list):
        sample_task_list[0]["status"] = "failure"
        sample_task_list[1]["status"] = "success"
        sample_task_list[2]["status"] = "success"

        sample_task_list[0]["generated_by"] = "foo"
        sample_task_list[1]["generated_by"] = "foo"
        sample_task_list[2]["generated_by"] = "foo"

        mock_build = create_mock_build([
            Task(sample_task_list[0], None),
            Task(sample_task_list[1], None),
            Task(sample_task_list[2], None),
        ])

        build_metrics = under_test.BuildMetrics(mock_build).calculate()
        assert build_metrics.success_count == 2
        assert build_metrics.failure_count == 1
        assert build_metrics.display_success_count == 0
        assert build_metrics.display_failure_count == 1
        assert build_metrics.total_display_tasks == 1
コード例 #25
0
    def tasks_by_project(self, project_id: str, statuses: Optional[List[str]] = None) -> List[Task]:
        """
        Get all the tasks for a project.

        :param project_id: The project's id.
        :param statuses: the types of statuses to get tasks for.
        :return: The list of matching tasks.
        """
        url = self._create_url(
            "/projects/{project_id}/versions/tasks".format(project_id=project_id)
        )
        params = {"status": statuses} if statuses else None
        return [Task(json, self) for json in self._paginate(url, params)]  # type: ignore[arg-type]
コード例 #26
0
    def task_by_id(self, task_id: str, fetch_all_executions: Optional[bool] = None) -> Task:
        """
        Get a task by task_id.

        :param task_id: Id of task to query for.
        :param fetch_all_executions: Should all executions of the task be fetched.
        :return: Task queried for.
        """
        params = None
        if fetch_all_executions:
            params = {"fetch_all_executions": fetch_all_executions}
        url = self._create_url("/tasks/{task_id}".format(task_id=task_id))
        return Task(self._call_api(url, params).json(), self)  # type: ignore[arg-type]
コード例 #27
0
ファイル: api.py プロジェクト: jimoleary/evergreen.py
    def task_by_id(self, task_id, fetch_all_executions=None):
        """
        Get a task by task_id.

        :param task_id: Id of task to query for.
        :param fetch_all_executions: Should all executions of the task be fetched.
        :return: Task queried for.
        """
        params = None
        if fetch_all_executions:
            params = {'fetch_all_executions': fetch_all_executions}
        url = self._create_url('/tasks/{task_id}'.format(task_id=task_id))
        return Task(self._call_api(url, params).json(), self)
コード例 #28
0
ファイル: test_task.py プロジェクト: threebee/evergreen.py
 def test_task_is_test_failure(self, sample_task):
     sample_task["status_details"]["type"] = EVG_TEST_STATUS_TYPE
     sample_task["status"] = "failed"
     task = Task(sample_task, None)
     assert not task.is_success()
     assert not task.is_system_failure()
     assert not task.is_timeout()
     assert task.is_test_failure()
コード例 #29
0
    def test_adding_task_without_ingest_time(self, sample_task):
        del sample_task['ingest_time']
        task = Task(sample_task, None)
        mock_build = create_mock_build()

        build_metrics = under_test.BuildMetrics(mock_build)
        build_metrics._count_task(task)

        assert build_metrics.undispatched_count == 0
        assert build_metrics.total_tasks == 1
        assert len(build_metrics._start_times) == 1
        assert build_metrics.failure_count == 0
        assert build_metrics.success_count == 1
        assert build_metrics.system_failure_count == 0
        assert build_metrics.timed_out_count == 0
コード例 #30
0
ファイル: api.py プロジェクト: jimoleary/evergreen.py
    def tasks_by_build(self, build_id, fetch_all_executions=None):
        """
        Get all tasks for a given build.

        :param build_id: build_id to query.
        :param fetch_all_executions: Fetch all executions for a given task.
        :return: List of tasks for the specified build.
        """
        params = {}
        if fetch_all_executions:
            params['fetch_all_executions'] = 1

        url = self._create_url(
            '/builds/{build_id}/tasks'.format(build_id=build_id))
        task_list = self._paginate(url, params)
        return [Task(task, self) for task in task_list]