def setUp(self):
     self.pool = get_sample_task_pool()
     self.worker = TaskConsumer(self.pool)
     self.task = TaskBase(None)
     self.task.drive = get_sample_drive_object()
     self.task.rel_parent_path = '/'
     self.task.item_name = 'foo'
     self.mock_handler = mock.Mock(return_value=None)
     self.task.handle = self.mock_handler
class TestTaskConsumer(unittest.TestCase):
    def setUp(self):
        self.pool = get_sample_task_pool()
        self.worker = TaskConsumer(self.pool)
        self.task = TaskBase(None)
        self.task.drive = get_sample_drive_object()
        self.task.rel_parent_path = '/'
        self.task.item_name = 'foo'
        self.mock_handler = mock.Mock(return_value=None)
        self.task.handle = self.mock_handler

    def test_exec(self):
        # Start worker.
        self.worker.start()
        # Worker should respond to task addition.
        self.pool.add_task(self.task)
        time.sleep(0.01)
        self.mock_handler.assert_called_once_with()
        self.assertFalse(self.pool.has_pending_task(self.task.local_path))
        # Worker should gracefully exit.
        self.worker.terminate_sign.set()
        self.pool.semaphore.release()
        self.worker.join(timeout=1)