Example #1
0
    def setUp(self):
        super(GatorTestCase, self).setUp()
        self.conn_string = os.environ.get('ALLIGATOR_CONN')
        self.gator = Gator(self.conn_string)

        # Just reach in & clear things out.
        self.gator.backend.drop_all(ALL)
Example #2
0
class WorkerTestCase(unittest.TestCase):
    def setUp(self):
        super(WorkerTestCase, self).setUp()
        self.gator = Gator('locmem://')
        self.worker = Worker(self.gator, max_tasks=2, nap_time=0)

        self.gator.backend.drop_all('all')
        rm_file()
        touch_file()

    def test_init(self):
        self.assertEqual(self.worker.gator, self.gator)
        self.assertEqual(self.worker.max_tasks, 2)
        self.assertEqual(self.worker.to_consume, 'all')
        self.assertEqual(self.worker.nap_time, 0)
        self.assertEqual(self.worker.tasks_complete, 0)

    def test_ident(self):
        ident = self.worker.ident()
        self.assertTrue(ident.startswith('Alligator Worker (#'))

    def test_run_forever(self):
        self.assertEqual(read_file(), 0)

        self.gator.task(incr_file, 2)
        self.gator.task(incr_file, 3)
        self.gator.task(incr_file, 4)

        self.assertEqual(self.gator.backend.len('all'), 3)

        # Should actually only run for two of the three tasks.
        self.worker.run_forever()

        self.assertEqual(self.gator.backend.len('all'), 1)
        self.assertEqual(read_file(), 5)
class WorkerTestCase(unittest.TestCase):
    def setUp(self):
        super(WorkerTestCase, self).setUp()
        self.gator = Gator('locmem://')
        self.worker = Worker(self.gator, max_tasks=2, nap_time=0)

        self.gator.backend.drop_all('all')
        rm_file()
        touch_file()

    def test_init(self):
        self.assertEqual(self.worker.gator, self.gator)
        self.assertEqual(self.worker.max_tasks, 2)
        self.assertEqual(self.worker.to_consume, 'all')
        self.assertEqual(self.worker.nap_time, 0)
        self.assertEqual(self.worker.tasks_complete, 0)

    def test_ident(self):
        ident = self.worker.ident()
        self.assertTrue(ident.startswith('Alligator Worker (#'))

    def test_run_forever(self):
        self.assertEqual(read_file(), 0)

        self.gator.task(incr_file, 2)
        self.gator.task(incr_file, 3)
        self.gator.task(incr_file, 4)

        self.assertEqual(self.gator.backend.len('all'), 3)

        # Should actually only run for two of the three tasks.
        self.worker.run_forever()

        self.assertEqual(self.gator.backend.len('all'), 1)
        self.assertEqual(read_file(), 5)
Example #4
0
    def setUp(self):
        super(WorkerTestCase, self).setUp()
        self.gator = Gator('locmem://')
        self.worker = Worker(self.gator, max_tasks=2, nap_time=0)

        self.gator.backend.drop_all('all')
        rm_file()
        touch_file()
    def setUp(self):
        super(CustomBackendTestCase, self).setUp()
        self.conn_string = 'sqlite:///tmp/alligator_test.db'

        try:
            os.unlink('/tmp/alligator_test.db')
        except OSError:
            pass

        self.gator = Gator(self.conn_string, backend_class=SQLiteClient)
        self._setup_tables()
Example #6
0
    def test_init(self):
        gator = Gator('whatever://', backend_class=CustomClient)
        self.assertEqual(gator.conn_string, 'whatever://')
        self.assertEqual(gator.queue_name, ALL)
        self.assertEqual(gator.task_class, Task)
        self.assertEqual(gator.backend_class, CustomClient)
        self.assertTrue(isinstance(gator.backend, CustomClient))

        gator = Gator('locmem://',
                      queue_name='hard_things',
                      task_class=CustomTask)
        self.assertEqual(gator.conn_string, 'locmem://')
        self.assertEqual(gator.queue_name, 'hard_things')
        self.assertEqual(gator.task_class, CustomTask)
        self.assertEqual(gator.backend_class, None)
        self.assertTrue(isinstance(gator.backend, LocmemClient))
    def setUp(self):
        super(WorkerTestCase, self).setUp()
        self.gator = Gator('locmem://')
        self.worker = Worker(self.gator, max_tasks=2, nap_time=0)

        self.gator.backend.drop_all('all')
        rm_file()
        touch_file()
class CustomBackendTestCase(unittest.TestCase):
    def setUp(self):
        super(CustomBackendTestCase, self).setUp()
        self.conn_string = 'sqlite:///tmp/alligator_test.db'

        try:
            os.unlink('/tmp/alligator_test.db')
        except OSError:
            pass

        self.gator = Gator(self.conn_string, backend_class=SQLiteClient)
        self._setup_tables()

    def _setup_tables(self):
        # We're just going to assume ``ALL``.
        query = 'CREATE TABLE `all` (task_id text, data text)'
        self.gator.backend._run_query(query, None)

    def test_everything(self):
        self.assertEqual(self.gator.backend.len(ALL), 0)

        t1 = self.gator.task(add, 1, 3)
        t2 = self.gator.task(add, 5, 7)
        t3 = self.gator.task(add, 3, 13)
        t4 = self.gator.task(add, 9, 4)

        self.assertEqual(self.gator.backend.len(ALL), 4)

        task_1 = self.gator.pop()
        self.assertEqual(task_1, 4)

        task_3 = self.gator.get(t3.task_id)
        self.assertEqual(task_3, 16)

        task_2 = self.gator.pop()
        self.assertEqual(task_2, 12)

        self.assertEqual(self.gator.backend.len(ALL), 1)

        self.gator.backend.drop_all(ALL)
        self.assertEqual(self.gator.backend.len(ALL), 0)
Example #9
0
class GatorTestCase(unittest.TestCase):
    def setUp(self):
        super(GatorTestCase, self).setUp()
        self.conn_string = os.environ.get('ALLIGATOR_CONN')
        self.gator = Gator(self.conn_string)

        # Just reach in & clear things out.
        self.gator.backend.drop_all(ALL)

    def test_init(self):
        gator = Gator('whatever://', backend_class=CustomClient)
        self.assertEqual(gator.conn_string, 'whatever://')
        self.assertEqual(gator.queue_name, ALL)
        self.assertEqual(gator.task_class, Task)
        self.assertEqual(gator.backend_class, CustomClient)
        self.assertTrue(isinstance(gator.backend, CustomClient))

        gator = Gator('locmem://',
                      queue_name='hard_things',
                      task_class=CustomTask)
        self.assertEqual(gator.conn_string, 'locmem://')
        self.assertEqual(gator.queue_name, 'hard_things')
        self.assertEqual(gator.task_class, CustomTask)
        self.assertEqual(gator.backend_class, None)
        self.assertTrue(isinstance(gator.backend, LocmemClient))

    def test_build_backend(self):
        backend = self.gator.build_backend('locmem://')
        self.assertTrue(isinstance(backend, LocmemClient))

        backend = self.gator.build_backend('redis://localhost:6379/0')
        self.assertTrue(isinstance(backend, RedisClient))

    def test_push_async(self):
        self.assertEqual(self.gator.backend.len(ALL), 0)

        task = Task(async=True)
        self.gator.push(task, so_computationally_expensive, 1, 1)
        self.assertEqual(self.gator.backend.len(ALL), 1)

    def test_push_sync(self):
        self.assertEqual(self.gator.backend.len(ALL), 0)

        def success(t, result):
            t.result = result

        task = Task(async=False, on_success=success)
        res = self.gator.push(task, so_computationally_expensive, 1, 1)
        self.assertEqual(self.gator.backend.len(ALL), 0)
        self.assertEqual(res.result, 2)

    def test_pop(self):
        self.assertEqual(self.gator.backend.len(ALL), 0)

        task = Task(async=True)
        self.gator.push(task, so_computationally_expensive, 1, 1)
        self.assertEqual(self.gator.backend.len(ALL), 1)

        res = self.gator.pop()
        self.assertEqual(res, 2)

    def test_get(self):
        self.assertEqual(self.gator.backend.len(ALL), 0)

        task_1 = Task(async=True)
        task_2 = Task(task_id='hello', async=True)
        self.gator.push(task_1, so_computationally_expensive, 1, 1)
        self.gator.push(task_2, so_computationally_expensive, 3, 5)
        self.assertEqual(self.gator.backend.len(ALL), 2)

        res = self.gator.get(task_2.task_id)
        self.assertEqual(res, 8)

        res = self.gator.get(task_1.task_id)
        self.assertEqual(res, 2)

    def test_cancel(self):
        self.assertEqual(self.gator.backend.len(ALL), 0)

        task_1 = Task(async=True)
        task_2 = Task(task_id='hello', async=True)
        self.gator.push(task_1, so_computationally_expensive, 1, 1)
        self.gator.push(task_2, so_computationally_expensive, 3, 5)
        self.assertEqual(self.gator.backend.len(ALL), 2)

        task = self.gator.cancel(task_2.task_id)
        self.assertEqual(task.status, CANCELED)
        self.assertEqual(self.gator.backend.len(ALL), 1)

    def test_execute_success(self):
        task = Task(retries=3, async=True)
        task.to_call(so_computationally_expensive, 2, 7)

        res = self.gator.execute(task)
        self.assertEqual(res, 9)
        self.assertEqual(task.retries, 3)
        self.assertEqual(task.status, SUCCESS)

    def test_execute_failed(self):
        task = Task(retries=3, async=True)
        task.to_call(fail_task, 2, 7)
        self.assertEqual(task.status, WAITING)

        try:
            self.gator.execute(task)
            self.assertEqual(task.status, RETRYING)
            self.gator.execute(task)
            self.gator.execute(task)
            self.gator.execute(task)
            self.fail()
        except IOError:
            self.assertEqual(task.retries, 0)
            self.assertEqual(task.status, FAILED)

    def test_execute_retries(self):
        task = Task(retries=3, async=True)
        task.to_call(eventual_success(), 2, 7)

        try:
            self.gator.execute(task)
        except IOError:
            pass

        try:
            self.gator.execute(task)
        except IOError:
            pass

        res = self.gator.execute(task)
        self.assertEqual(res, 9)
        self.assertEqual(task.retries, 1)

    def test_task(self):
        self.assertEqual(self.gator.backend.len(ALL), 0)

        self.gator.task(so_computationally_expensive, 1, 1)
        self.assertEqual(self.gator.backend.len(ALL), 1)

    def test_options(self):
        self.assertEqual(self.gator.backend.len(ALL), 0)

        def success(t, result):
            t.result = result

        with self.gator.options(retries=4, async=False,
                                on_success=success) as opts:
            res = opts.task(eventual_success(), 3, 9)

        self.assertEqual(res.retries, 2)
        self.assertEqual(res.result, 12)