def test_run_task_runs_fork_task(self): t = Task.objects.create( worker=self._worker.worker, arch=self._arch, channel=self._channel, owner=self._user, method='DummyForkTask', state=TASK_STATES['OPEN'], ) self.assertEqual(t.state, TASK_STATES['OPEN']) tm = TaskManager(conf={'worker': self._worker}) task_info = t.export(False) tm.run_task(task_info) t = Task.objects.get(id=t.id) self.assertEqual(t.state, TASK_STATES['CLOSED'])
def test_run_task_mark_task_as_failed_if_generic_exception(self): t = Task.objects.create( worker=self._worker.worker, arch=self._arch, channel=self._channel, owner=self._user, method='DummyExceptionTask', state=TASK_STATES['OPEN'], ) self.assertEqual(t.state, TASK_STATES['OPEN']) tm = TaskManager(conf={'worker': self._worker}) task_info = t.export(False) tm.run_task(task_info) t = Task.objects.get(id=t.id) self.assertEqual(t.state, TASK_STATES['FAILED'])
def test_update_tasks_cleanup_finished_tasks(self): t = Task.objects.create( worker=self._worker.worker, arch=self._arch, channel=self._channel, owner=self._user, method='DummyForkTask', state=TASK_STATES['FREE'], ) self.assertEqual(t.state, TASK_STATES['FREE']) tm = TaskManager(conf={'worker': self._worker}) task_info = t.export(False) with patch('kobo.worker.taskmanager.os', fork=Mock(return_value=9999)) as os_mock: tm.take_task(task_info) os_mock.fork.assert_called_once() # reload task info t = Task.objects.get(id=t.id) self.assertEqual(t.state, TASK_STATES['OPEN']) tm.run_task(task_info) # reload task info t = Task.objects.get(id=t.id) self.assertEqual(t.state, TASK_STATES['CLOSED']) with patch('kobo.worker.taskmanager.os', waitpid=Mock(return_value=(123, 0))) as os_mock: self.assertTrue(t.id in tm.pid_dict) tm.update_tasks() self.assertFalse(t.id in tm.pid_dict) os_mock.waitpid.assert_called_once() # reload task info t = Task.objects.get(id=t.id) self.assertEqual(t.state, TASK_STATES['CLOSED'])