def test_restart_workers(self): worker1 = MagicMock(queues="testqueues", pid="testpid1") worker2 = MagicMock(queues="testqueues", pid=None) master = WorkerMaster() master._start_worker = MagicMock(return_value="testpid2") master.workers = [worker1, worker2] master._restart_workers() master._start_worker.assert_called_once_with(worker2)
def test_check_workers_other_oserror(self, waitpid_mock): worker = MagicMock(queues='testqueues', pid='testpid') master = WorkerMaster() master.workers = [worker] waitpid_mock.side_effect = OSError(99, 'Something else') self.assertRaises(OSError, master._check_workers) waitpid_mock.assert_called_with(0, 0) self.assertEqual('testpid', worker.pid)
def test_check_workers_other_oserror(self, waitpid_mock): worker = MagicMock(queues="testqueues", pid="testpid") master = WorkerMaster() master.workers = [worker] waitpid_mock.side_effect = OSError(99, "Something else") self.assertRaises(OSError, master._check_workers) waitpid_mock.assert_called_with(0, 0) self.assertEqual("testpid", worker.pid)
def test_check_workers_no_children(self, waitpid_mock): worker = MagicMock(queues="testqueues", pid="testpid") master = WorkerMaster() master.workers = [worker] waitpid_mock.side_effect = OSError(errno.ECHILD, "No child processes") self.assertFalse(master._check_workers()) waitpid_mock.assert_called_with(0, 0) self.assertEqual(None, worker.pid)
def test_check_workers_no_children(self, waitpid_mock): worker = MagicMock(queues='testqueues', pid='testpid') master = WorkerMaster() master.workers = [worker] waitpid_mock.side_effect = OSError(errno.ECHILD, 'No child processes') self.assertFalse(master._check_workers()) waitpid_mock.assert_called_with(0, 0) self.assertEqual(None, worker.pid)
def test_check_workers(self, waitpid_mock): worker = MagicMock(queues='testqueues', pid='testpid') master = WorkerMaster() master.workers = [worker] waitpid_mock.return_value = ('testpid', 0) self.assertTrue(master._check_workers()) waitpid_mock.assert_called_with(0, 0) self.assertEqual(None, worker.pid)
def test_check_workers(self, waitpid_mock): worker = MagicMock(queues="testqueues", pid="testpid") master = WorkerMaster() master.workers = [worker] waitpid_mock.return_value = ("testpid", 0) self.assertTrue(master._check_workers()) waitpid_mock.assert_called_with(0, 0) self.assertEqual(None, worker.pid)
def test_check_workers_other_oserror(self, waitpid_mock): exit_cb = MagicMock() worker = MagicMock(queues='testqueues', pid='testpid') master = WorkerMaster('testapp', exit_callback=exit_cb) master.workers = [worker] waitpid_mock.side_effect = OSError(99, 'Something else') self.assertRaises(OSError, master._check_workers) waitpid_mock.assert_called_with(0, 0) self.assertEqual('testpid', worker.pid)
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_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_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_restart_workers(self): start_cb = MagicMock() worker1 = MagicMock(queues='testqueues', pid='testpid1') worker2 = MagicMock(queues='testqueues', pid=None) master = WorkerMaster('testapp', start_callback=start_cb) master._start_worker = MagicMock(return_value='testpid2') master.workers = [worker1, worker2] master._restart_workers() master._start_worker.assert_called_once_with(worker2) start_cb.assert_called_with('testqueues', 'testpid2')
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_check_workers_no_children(self, waitpid_mock): exit_cb = MagicMock() worker = MagicMock(queues='testqueues', pid='testpid') master = WorkerMaster('testapp', exit_callback=exit_cb) master.workers = [worker] waitpid_mock.side_effect = OSError(errno.ECHILD, 'No child processes') self.assertFalse(master._check_workers()) waitpid_mock.assert_called_with(0, 0) exit_cb.assert_called_with('testqueues', 'testpid', None) self.assertEqual(None, worker.pid)
def test_check_workers(self, waitpid_mock): exit_cb = MagicMock() worker = MagicMock(queues='testqueues', pid='testpid') master = WorkerMaster('testapp', exit_callback=exit_cb) master.workers = [worker] waitpid_mock.return_value = ('testpid', 0) self.assertTrue(master._check_workers()) waitpid_mock.assert_called_with(0, 0) exit_cb.assert_called_with('testqueues', 'testpid', 0) self.assertEqual(None, worker.pid)
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_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_get_worker_data(self, exit_mock, fork_mock): app = MagicMock() worker = _WorkerProcess(app, ['testqueue'], None, None, None, False) worker._run = MagicMock() master = WorkerMaster('testapp', worker_data={'test': 'data'}) fork_mock.return_value = 0 self.assertRaises(RuntimeError, get_worker_data, 'test') master._start_worker(worker) self.assertEquals('data', get_worker_data('test')) fork_mock.assert_called_with() worker._run.assert_called_with() exit_mock.assert_called_with(os.EX_OK)
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('testapp') 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_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_wait(self, waitpid_mock): exit_cb = MagicMock() 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('testapp', exit_callback=exit_cb) 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) exit_cb.assert_any_call(None, 'testpid1', 0) exit_cb.assert_any_call(None, 'testpid2', None)
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_restart_workers(self): worker1 = MagicMock(queues='testqueues', pid='testpid1') worker2 = MagicMock(queues='testqueues', pid=None) master = WorkerMaster() master._start_worker = MagicMock(return_value='testpid2') master.workers = [worker1, worker2] master._restart_workers() master._start_worker.assert_called_once_with(worker2)
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()
def test_exit_callback(self): cb = MagicMock(side_effect=Exception) worker = MagicMock(queues='testqueues', pid='testpid') master = WorkerMaster('testapp', exit_callback=cb) master.exit_callback(worker, 'teststatus') cb.assert_called_with('testqueues', 'testpid', 'teststatus')