Beispiel #1
0
    def test_schedules(self):
        storage = self.huey.storage
        dt1 = datetime.datetime(2013, 1, 1, 0, 0)
        dt2 = datetime.datetime(2013, 1, 2, 0, 0)
        dt3 = datetime.datetime(2013, 1, 3, 0, 0)
        dt4 = datetime.datetime(2013, 1, 4, 0, 0)

        # Add to schedule out-of-order to ensure sorting is performed by
        # the schedule.
        storage.add_to_schedule('s2', dt2)
        storage.add_to_schedule('s1', dt1)
        storage.add_to_schedule('s4', dt4)
        storage.add_to_schedule('s3', dt3)

        # Ensure that asking for a timestamp previous to any item in the
        # schedule returns empty list.
        self.assertEqual(
            storage.read_schedule(dt1 - datetime.timedelta(days=1)),
            [])

        # Ensure the upper boundary is inclusive of whatever timestamp
        # is passed in.
        self.assertEqual(
            storage.read_schedule(dt3),
            [b('s1'), b('s2'), b('s3')])
        self.assertEqual(storage.read_schedule(dt3), [])

        # Ensure the schedule is flushed and an empty schedule returns an
        # empty list.
        self.assertEqual(storage.read_schedule(dt4), [b('s4')])
        self.assertEqual(storage.read_schedule(dt4), [])
Beispiel #2
0
    def test_metadata(self):
        s = self.huey.storage
        s.write_metadata('k1', 'v1')
        self.assertEqual(s.read_metadata('k1'), b('v1'))
        self.assertEqual(s.read_metadata('kx'), None)

        s.write_metadata('k2', 'v2')
        vals = s.metadata_values()
        self.assertEqual(vals, {b('k1'): b('v1'), b('k2'): b('v2')})
Beispiel #3
0
    def test_results_metadata(self):
        add_values(1, 2)
        add_values(3, 4)
        t1 = huey_results.dequeue()
        t2 = huey_results.dequeue()
        self.assertEqual(huey_results.all_results(), {})

        huey_results.execute(t1)
        self.assertEqual(list(huey_results.all_results()), [b(t1.task_id)])

        huey_results.execute(t2)
        self.assertEqual(sorted(huey_results.all_results().keys()), sorted([b(t1.task_id), b(t2.task_id)]))
Beispiel #4
0
    def test_results_metadata(self):
        add_values(1, 2)
        add_values(3, 4)
        t1 = huey_results.dequeue()
        t2 = huey_results.dequeue()
        self.assertEqual(huey_results.all_results(), {})

        huey_results.execute(t1)
        self.assertEqual(list(huey_results.all_results()), [b(t1.task_id)])

        huey_results.execute(t2)
        self.assertEqual(sorted(huey_results.all_results().keys()),
                         sorted([b(t1.task_id), b(t2.task_id)]))
Beispiel #5
0
    def test_events(self):
        storage = self.huey.storage
        ps = storage.listener()

        messages = ['a', 'b', 'c']
        for message in messages:
            storage.emit(message)

        g = ps.listen()
        next(g)
        self.assertEqual(next(g)['data'], b('a'))
        self.assertEqual(next(g)['data'], b('b'))
        self.assertEqual(next(g)['data'], b('c'))
Beispiel #6
0
    def test_data_stores(self):
        storage = self.huey.storage
        storage.put_data('k1', 'v1')
        storage.put_data('k2', 'v2')
        storage.put_data('k3', 'v3')
        self.assertEqual(storage.peek_data('k2'), b('v2'))
        self.assertEqual(storage.pop_data('k2'), b('v2'))
        self.assertEqual(storage.peek_data('k2'), EmptyData)
        self.assertEqual(storage.pop_data('k2'), EmptyData)

        self.assertEqual(storage.peek_data('k3'), b('v3'))
        storage.put_data('k3', 'v3-2')
        self.assertEqual(storage.peek_data('k3'), b('v3-2'))
Beispiel #7
0
    def test_data_stores(self):
        data_store = self.huey.result_store
        data_store.put('k1', 'v1')
        data_store.put('k2', 'v2')
        data_store.put('k3', 'v3')
        self.assertEqual(data_store.peek('k2'), b('v2'))
        self.assertEqual(data_store.get('k2'), b('v2'))
        self.assertEqual(data_store.peek('k2'), EmptyData)
        self.assertEqual(data_store.get('k2'), EmptyData)

        self.assertEqual(data_store.peek('k3'), b('v3'))
        data_store.put('k3', 'v3-2')
        self.assertEqual(data_store.peek('k3'), b('v3-2'))
Beispiel #8
0
    def test_data_stores(self):
        data_store = self.huey.result_store
        data_store.put('k1', 'v1')
        data_store.put('k2', 'v2')
        data_store.put('k3', 'v3')
        self.assertEqual(data_store.peek('k2'), b('v2'))
        self.assertEqual(data_store.get('k2'), b('v2'))
        self.assertEqual(data_store.peek('k2'), EmptyData)
        self.assertEqual(data_store.get('k2'), EmptyData)

        self.assertEqual(data_store.peek('k3'), b('v3'))
        data_store.put('k3', 'v3-2')
        self.assertEqual(data_store.peek('k3'), b('v3-2'))
Beispiel #9
0
    def test_metadata(self):
        def run_task(fn, a=()):
            fn(*a)
            self.worker(test_huey.dequeue())
            return test_huey.metadata()

        metadata = run_task(modify_state, ('k1', 'v1'))
        self.assertEqual(int(metadata[b('queuecmd_modify_state_executed')]), 1)
        self.assertEqual(int(metadata[b('tasks_executed')]), 1)
        self.assertEqual(metadata[b('queuecmd_modify_state_duration')],
                         metadata[b('tasks_duration')])

        metadata = run_task(modify_state, ('k1', 'v2'))
        self.assertEqual(int(metadata[b('queuecmd_modify_state_executed')]), 2)
        self.assertEqual(int(metadata[b('tasks_executed')]), 2)

        metadata = run_task(blow_up)
        self.assertEqual(int(metadata[b('queuecmd_blow_up_errors')]), 1)
        self.assertFalse(b('queuecmd_blow_up_executed') in metadata)
        self.assertEqual(int(metadata[b('tasks_executed')]), 2)
        self.assertEqual(int(metadata[b('tasks_errors')]), 1)

        metadata = run_task(retry_task, ('test', False))
        self.assertEqual(int(metadata[b('queuecmd_retry_task_errors')]), 1)
        self.assertFalse(b('queuecmd_retry_task_executed') in metadata)
        self.assertEqual(int(metadata[b('tasks_executed')]), 2)
        self.assertEqual(int(metadata[b('tasks_errors')]), 2)
        # Duration is recorded for errors.
        duration = metadata[b('queuecmd_retry_task_duration')]

        self.worker(test_huey.dequeue())
        metadata = test_huey.metadata()
        self.assertEqual(int(metadata[b('queuecmd_retry_task_errors')]), 1)
        self.assertEqual(int(metadata[b('queuecmd_retry_task_executed')]), 1)
        self.assertEqual(int(metadata[b('tasks_executed')]), 3)
        self.assertEqual(int(metadata[b('tasks_errors')]), 2)
        self.assertNotEqual(metadata[b('queuecmd_retry_task_duration')],
                            duration)

        # Scheduled, ready to run when dequeued -- runs like normal.
        modify_state.schedule(args=('k1', 'v3'), eta=datetime.date(2015, 1, 1))
        self.worker(test_huey.dequeue())
        metadata = test_huey.metadata()
        self.assertEqual(int(metadata[b('queuecmd_modify_state_executed')]), 3)
        self.assertEqual(int(metadata[b('tasks_executed')]), 4)

        # When task is put on schedule and not executed immediately, then
        # the `scheduled` metadata count is incremented.
        modify_state.schedule(args=('k1', 'v3'), eta=datetime.date(2030, 1, 1))
        self.worker(test_huey.dequeue())
        metadata = test_huey.metadata()
        self.assertEqual(int(metadata[b('queuecmd_modify_state_executed')]), 3)
        self.assertEqual(int(metadata[b('queuecmd_modify_state_scheduled')]),
                         1)
        self.assertEqual(int(metadata[b('tasks_executed')]), 4)
Beispiel #10
0
    def test_metadata(self):
        def run_task(fn, a=()):
            fn(*a)
            self.worker(test_huey.dequeue())
            return test_huey.metadata()

        metadata = run_task(modify_state, ('k1', 'v1'))
        self.assertEqual(int(metadata[b('queuecmd_modify_state_executed')]), 1)
        self.assertEqual(int(metadata[b('tasks_executed')]), 1)
        self.assertEqual(metadata[b('queuecmd_modify_state_duration')],
                         metadata[b('tasks_duration')])

        metadata = run_task(modify_state, ('k1', 'v2'))
        self.assertEqual(int(metadata[b('queuecmd_modify_state_executed')]), 2)
        self.assertEqual(int(metadata[b('tasks_executed')]), 2)

        metadata = run_task(blow_up)
        self.assertEqual(int(metadata[b('queuecmd_blow_up_errors')]), 1)
        self.assertFalse(b('queuecmd_blow_up_executed') in metadata)
        self.assertEqual(int(metadata[b('tasks_executed')]), 2)
        self.assertEqual(int(metadata[b('tasks_errors')]), 1)

        metadata = run_task(retry_task, ('test', False))
        self.assertEqual(int(metadata[b('queuecmd_retry_task_errors')]), 1)
        self.assertFalse(b('queuecmd_retry_task_executed') in metadata)
        self.assertEqual(int(metadata[b('tasks_executed')]), 2)
        self.assertEqual(int(metadata[b('tasks_errors')]), 2)
        # Duration is recorded for errors.
        duration = metadata[b('queuecmd_retry_task_duration')]

        self.worker(test_huey.dequeue())
        metadata = test_huey.metadata()
        self.assertEqual(int(metadata[b('queuecmd_retry_task_errors')]), 1)
        self.assertEqual(int(metadata[b('queuecmd_retry_task_executed')]), 1)
        self.assertEqual(int(metadata[b('tasks_executed')]), 3)
        self.assertEqual(int(metadata[b('tasks_errors')]), 2)
        self.assertNotEqual(metadata[b('queuecmd_retry_task_duration')], duration)

        # Scheduled, ready to run when dequeued -- runs like normal.
        modify_state.schedule(args=('k1', 'v3'), eta=datetime.date(2015, 1, 1))
        self.worker(test_huey.dequeue())
        metadata = test_huey.metadata()
        self.assertEqual(int(metadata[b('queuecmd_modify_state_executed')]), 3)
        self.assertEqual(int(metadata[b('tasks_executed')]), 4)

        # When task is put on schedule and not executed immediately, then
        # the `scheduled` metadata count is incremented.
        modify_state.schedule(args=('k1', 'v3'), eta=datetime.date(2030, 1, 1))
        self.worker(test_huey.dequeue())
        metadata = test_huey.metadata()
        self.assertEqual(int(metadata[b('queuecmd_modify_state_executed')]), 3)
        self.assertEqual(int(metadata[b('queuecmd_modify_state_scheduled')]), 1)
        self.assertEqual(int(metadata[b('tasks_executed')]), 4)