def test_already_completed_task(self): self._reset_task() execute(self.project.id, self.step.slug) with self.assertRaises(MachineExecutionError): execute(self.project.id, self.step.slug) self._assert_correct_machine_task_state( TaskAssignment.Status.SUBMITTED, Task.Status.COMPLETE)
def test_marking_failed_task_assignment(self, mock_logger): self.machine_function_mock.side_effect = Exception('Function failed.') self._reset_task() execute(self.project.id, self.step.slug) self._assert_correct_machine_task_state( TaskAssignment.Status.FAILED, Task.Status.PROCESSING) mock_logger.exception.assert_called_with('Machine task has failed') self.machine_function_mock.side_effect = None
def test_aborted_project(self): self._reset_task() self.project.status = Project.Status.ABORTED self.project.save() self.task.status = Task.Status.PROCESSING self.task.save() execute(self.project.id, self.step.slug) self._assert_correct_machine_task_state( TaskAssignment.Status.SUBMITTED, Task.Status.ABORTED)
def test_reassigning_failed_task_assignment(self): self._reset_task() execute(self.project.id, self.step.slug) # Pretend that the machine task failed self.task.status = Task.Status.PROCESSING self.task.save() assignment = self.task.assignments.first() assignment.status = TaskAssignment.Status.FAILED assignment.save() self.assertEquals(self.machine_function_mock.call_count, 1) self.machine_function_mock.call_count = 0 # New machine picks up the failed task execute(self.project.id, self.step.slug) self._assert_correct_machine_task_state( TaskAssignment.Status.SUBMITTED, Task.Status.COMPLETE)
def test_already_processing_task(self): self._reset_task() execute(self.project.id, self.step.slug) # Pretend that the task is still processing self.task.status = Task.Status.PROCESSING self.task.save() assignment = self.task.assignments.first() assignment.status = TaskAssignment.Status.PROCESSING assignment.save() # Reset iteration for assignment assignment.iterations.all().delete() Iteration.objects.create(assignment=assignment, start_datetime=assignment.start_datetime) # Another machine attempts to perform task with self.assertRaises(MachineExecutionError): execute(self.project.id, self.step.slug) self._assert_correct_machine_task_state( TaskAssignment.Status.PROCESSING, Task.Status.PROCESSING)
def test_already_processing_task(self): self._reset_task() execute(self.project.id, self.step.slug) # Pretend that the task is still processing self.task.status = Task.Status.PROCESSING self.task.save() assignment = self.task.assignments.first() assignment.status = TaskAssignment.Status.PROCESSING assignment.save() # Reset iteration for assignment assignment.iterations.all().delete() Iteration.objects.create( assignment=assignment, start_datetime=assignment.start_datetime) # Another machine attempts to perform task with self.assertRaises(MachineExecutionError): execute(self.project.id, self.step.slug) self._assert_correct_machine_task_state( TaskAssignment.Status.PROCESSING, Task.Status.PROCESSING)
def test_new_task(self): self._reset_task() execute(self.project.id, self.step.slug) self._assert_correct_machine_task_state( TaskAssignment.Status.SUBMITTED, Task.Status.COMPLETE)
def schedule(self, project_id, step_slug): execute(project_id, step_slug)