Esempio n. 1
0
 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)
Esempio n. 2
0
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])