def setUp(self): from tinymail.async import SimpleWorkerManager self.create_worker = Mock() self.destroy_worker = Mock() self.wm = SimpleWorkerManager(self.create_worker, self.destroy_worker)
class SimpleWorkerManagerTest(unittest.TestCase): def setUp(self): from tinymail.async import SimpleWorkerManager self.create_worker = Mock() self.destroy_worker = Mock() self.wm = SimpleWorkerManager(self.create_worker, self.destroy_worker) def test_get_one_worker(self): worker = object() self.create_worker.return_value = monocle.callback.defer(worker) results = [] self.wm.get_worker().add(results.append) self.assertEqual(results, [worker]) def test_worker_factory_delayed(self): self.create_worker.return_value = monocle.callback.Callback() worker_cb = self.wm.get_worker() results = [] worker_cb.add(results.append) # worker not ready, we should have received nothing self.assertEqual(results, []) worker = object() create_worker_cb = self.create_worker.return_value create_worker_cb(worker) # worker ready, we should have received it self.assertEqual(results, [worker]) def test_worker_done(self): self.create_worker.return_value = monocle.callback.defer(object()) results = [] self.wm.get_worker().add(results.append) worker = results[0] self.wm.hand_back_worker(worker) self.destroy_worker.assert_called_once_with(worker) def test_request_sequence(self): self.create_worker.return_value = monocle.callback.defer(object()) results = [] self.wm.get_worker().add(results.append) worker = results[0] self.wm.hand_back_worker(worker) worker2 = object() self.create_worker.return_value = monocle.callback.defer(worker2) results2 = [] self.wm.get_worker().add(results2.append) self.assertIs(results2[0], worker2) def test_request_queue(self): results1 = []; worker1 = object() results2 = []; worker2 = object() self.create_worker.return_value = monocle.callback.defer(worker1) self.wm.get_worker().add(results1.append) self.wm.get_worker().add(results2.append) self.assertEqual(results1, [worker1]) self.assertEqual(results2, []) self.create_worker.return_value = monocle.callback.defer(worker2) self.wm.hand_back_worker(worker1) self.assertEqual(results1, [worker1]) self.assertEqual(results2, [worker2])