def test_run(self): master = WorkerMaster() master._restart_workers = MagicMock(side_effect=[None, ValueError]) master._check_workers = MagicMock() master._stop_workers = MagicMock() self.assertRaises(ValueError, master.run) master._restart_workers.assert_any_call() master._restart_workers.assert_called_with() master._check_workers.assert_called_with() master._stop_workers.assert_called_with()
def test_start_worker_child(self, exit_mock, fork_mock): app = MagicMock() worker = WorkerProcess(app, ['testqueue']) worker._run = MagicMock() master = WorkerMaster() fork_mock.return_value = 0 master._start_worker(worker) fork_mock.assert_called_with() worker._run.assert_called_with() exit_mock.assert_called_with(os.EX_OK)
def test_add_local_worker(self): master = WorkerMaster() self.assertEqual([], master.workers) func = MagicMock(return_value='retval') master.add_local_worker(func, 2) self.assertEqual(2, len(master.workers)) self.assert_(isinstance(master.workers[0], _LocalProcess)) self.assert_(isinstance(master.workers[1], _LocalProcess)) self.assertEqual('retval', master.workers[0]._func()) self.assertEqual('retval', master.workers[1]._func())
def test_get_worker_app(self, exit_mock, fork_mock): app = MagicMock() worker = WorkerProcess(app, ['testqueue']) worker._run = MagicMock() master = WorkerMaster() fork_mock.return_value = 0 self.assertRaises(RuntimeError, get_worker_app) master._start_worker(worker) self.assertEquals(app, get_worker_app()) fork_mock.assert_called_with() worker._run.assert_called_with() exit_mock.assert_called_with(os.EX_OK)
def test_wait(self, waitpid_mock): waitpid_mock.side_effect = [('testpid1', 0), OSError(errno.ESRCH, 'No such pid'), OSError(99, 'Something else')] worker1 = MagicMock(queues=None, pid='testpid1') worker2 = MagicMock(queues=None, pid='testpid2') worker3 = MagicMock(queues=None, pid='testpid3') master = WorkerMaster() master.workers = [worker1, worker2, worker3] self.assertRaises(OSError, master.wait) waitpid_mock.assert_any_call('testpid1', 0) waitpid_mock.assert_any_call('testpid2', 0) waitpid_mock.assert_any_call('testpid3', 0)
def test_stop_workers(self, kill_mock): kill_mock.side_effect = [ None, OSError(errno.ESRCH, 'No such pid'), OSError(99, 'Something else') ] worker1 = MagicMock(pid='testpid1') worker2 = MagicMock(pid='testpid2') worker3 = MagicMock(pid='testpid3') master = WorkerMaster() master.workers = [worker1, worker2, worker3] self.assertRaises(OSError, master._stop_workers) kill_mock.assert_any_call('testpid1', signal.SIGTERM) kill_mock.assert_any_call('testpid2', signal.SIGTERM) kill_mock.assert_any_call('testpid3', signal.SIGTERM)
def test_add_worker(self): master = WorkerMaster() self.assertEqual([], master.workers) master.add_worker('testapp', ['queue1'], exclusive=True) self.assertEqual(1, len(master.workers)) self.assertEqual('testapp', master.workers[0].app) self.assertEqual(['queue1'], master.workers[0].queues) self.assertEqual(None, master.workers[0].pid) master.add_worker('testapp', ['queue2'], num_processes=2) self.assertEqual(3, len(master.workers)) self.assertEqual('testapp', master.workers[0].app) self.assertEqual(['queue1'], master.workers[0].queues) self.assertTrue(master.workers[0].exclusive) self.assertEqual('testapp', master.workers[1].app) self.assertEqual(['queue2'], master.workers[1].queues) self.assertFalse(master.workers[1].exclusive) self.assertEqual('testapp', master.workers[2].app) self.assertEqual(['queue2'], master.workers[2].queues) self.assertFalse(master.workers[2].exclusive)
def test_start_worker_parent(self, fork_mock): worker = MagicMock() master = WorkerMaster() fork_mock.return_value = 13 self.assertEqual(13, master._start_worker(worker)) fork_mock.assert_called_with()