示例#1
0
 def setUp(self):
     self.queue = IndexQueue()
示例#2
0
 def setUp(self):
     self.queue = IndexQueue()
示例#3
0
class QueueTests(CleanUp, TestCase):
    def setUp(self):
        self.queue = IndexQueue()

    def tearDown(self):
        self.queue.clear()

    def testInterface(self):
        self.failUnless(IIndexQueue.providedBy(self.queue))

    def testQueueHook(self):
        class CaptainHook:
            def __init__(self):
                self.hooked = 0

            def __call__(self):
                self.hooked += 1

        hook = CaptainHook()
        queue = self.queue
        queue.setHook(hook)
        self.assertEqual(hook.hooked, 0)
        queue.index("foo")
        queue.reindex("foo")
        queue.reindex("bar")
        self.assertEqual(len(queue.getState()), 3)
        self.assertEqual(hook.hooked, 3)
        self.assertEqual(queue.process(), 2)
        self.assertEqual(hook.hooked, 3)

    def testQueueState(self):
        queue = self.queue
        queue.index("foo")
        self.assertEqual(queue.getState(), [(INDEX, "foo", None)])
        state = queue.getState()
        queue.reindex("bar")
        self.assertEqual(queue.getState(), [(INDEX, "foo", None), (REINDEX, "bar", None)])
        queue.setState(state)
        self.assertEqual(queue.getState(), [(INDEX, "foo", None)])
        self.assertEqual(queue.process(), 1)

    def testQueueProcessor(self):
        queue = self.queue
        proc = utils.MockQueueProcessor()
        provideUtility(proc, IIndexQueueProcessor)
        queue.index("foo")
        self.assertEqual(queue.process(), 1)  # also do the processing...
        self.assertEqual(queue.getState(), [])
        self.assertEqual(proc.getState(), [(INDEX, "foo", None)])
        self.assertEqual(proc.state, "started")  # the real queue won't update the state...
        queue.commit()
        self.assertEqual(proc.state, "finished")

    def testMultipleQueueProcessors(self):
        queue = self.queue
        proc1 = utils.MockQueueProcessor()
        proc2 = utils.MockQueueProcessor()
        provideUtility(proc1, IIndexQueueProcessor, name="proc1")
        provideUtility(proc2, IIndexQueueProcessor, name="proc2")
        queue.index("foo")
        self.assertEqual(queue.process(), 1)  # also do the processing...
        self.assertEqual(queue.getState(), [])
        self.assertEqual(proc1.getState(), [(INDEX, "foo", None)])
        self.assertEqual(proc2.getState(), [(INDEX, "foo", None)])
        self.assertEqual(proc1.state, "started")  # the real queue won't...
        self.assertEqual(proc2.state, "started")  # update the state...
        queue.commit()
        self.assertEqual(proc1.state, "finished")
        self.assertEqual(proc2.state, "finished")

    def testQueueOperations(self):
        queue = self.queue
        proc = utils.MockQueueProcessor()
        provideUtility(proc, IIndexQueueProcessor)
        queue.index("foo")
        queue.reindex("foo")
        self.assertEqual(queue.process(), 1)
        self.assertEqual(queue.getState(), [])
        self.assertEqual(proc.getState(), [(INDEX, "foo", None)])
        # the real queue won't update the state
        self.assertEqual(proc.state, "started")
        queue.commit()
        self.assertEqual(proc.state, "finished")

    def testQueueOptimization(self):
        queue = self.queue
        queue.index("foo")
        queue.reindex("foo")
        queue.unindex("foo")
        queue.index("foo", "bar")
        queue.optimize()
        self.assertEqual(queue.getState(), [(INDEX, "foo", None)])

    def testCustomQueueOptimization(self):
        def optimize(self):
            self.setState([op for op in self.getState() if not op[0] == UNINDEX])

        queue = self.queue
        queue.index("foo")
        queue.reindex("foo")
        queue.unindex("foo")
        queue.index("foo", "bar")
        queue.optimize()
        self.assertEqual(queue.getState(), [(INDEX, "foo", None)])
        queue.clear()
        # hook up the custom optimize
        orig_optimize = queue.optimize
        try:
            queue.optimize = optimize
            queue.index("foo")
            queue.reindex("foo")
            queue.unindex("foo")
            queue.index("foo", "bar")
            queue.optimize(queue)
            self.assertEqual(queue.getState(), [(INDEX, "foo", None), (REINDEX, "foo", None), (INDEX, "foo", "bar")])
        finally:
            queue.optimize = orig_optimize

    def testQueueAbortBeforeProcessing(self):
        queue = self.queue
        proc = utils.MockQueueProcessor()
        provideUtility(proc, IIndexQueueProcessor)
        queue.index("foo")
        queue.reindex("foo")
        self.assertNotEqual(queue.getState(), [])
        queue.abort()
        self.assertEqual(queue.process(), 0)  # nothing left...
        self.assertEqual(queue.getState(), [])
        self.assertEqual(proc.getState(), [])
        self.assertEqual(proc.state, "aborted")

    def testQueueAbortAfterProcessing(self):
        queue = self.queue
        proc = utils.MockQueueProcessor()
        provideUtility(proc, IIndexQueueProcessor)
        queue.index("foo")
        queue.reindex("foo")
        self.assertEqual(queue.process(), 1)
        self.assertNotEqual(proc.getState(), [])
        queue.abort()
        self.assertEqual(queue.getState(), [])
        self.assertEqual(proc.getState(), [])
        self.assertEqual(proc.state, "aborted")

    def testOptimizeQueue(self):
        queue = self.queue
        queue.setState([(REINDEX, "A", None), (REINDEX, "A", None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(REINDEX, "A", None)])

        queue.setState([(INDEX, "A", None), (REINDEX, "A", None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(INDEX, "A", None)])

        queue.setState([(INDEX, "A", None), (UNINDEX, "A", None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [])

        queue.setState([(UNINDEX, "A", None), (INDEX, "A", None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(REINDEX, "A", None)])

    def testOptimizeQueueWithAttributes(self):
        queue = self.queue

        queue.setState([(REINDEX, "A", None), (REINDEX, "A", ("a", "b"))])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(REINDEX, "A", None)])

        queue.setState([(REINDEX, "A", ("a", "b")), (REINDEX, "A", None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(REINDEX, "A", None)])

        queue.setState([(REINDEX, "A", ("a", "b")), (REINDEX, "A", ("b", "c"))])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(REINDEX, "A", ("a", "c", "b"))])

        queue.setState([(INDEX, "A", None), (REINDEX, "A", None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(INDEX, "A", None)])

        queue.setState([(REINDEX, "A", ("a", "b")), (UNINDEX, "A", None), (INDEX, "A", None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(REINDEX, "A", None)])

    def testOptimizeQueueSortsByOpcode(self):
        queue = self.queue

        queue.setState([(INDEX, "C", None), (UNINDEX, "B", None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(UNINDEX, "B", None), (INDEX, "C", None)])

        queue.setState([(REINDEX, "A", None), (UNINDEX, "B", None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(UNINDEX, "B", None), (REINDEX, "A", None)])

        queue.setState([(REINDEX, "A", None), (UNINDEX, "B", None), (INDEX, "C", None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(UNINDEX, "B", None), (REINDEX, "A", None), (INDEX, "C", None)])
示例#4
0
class QueueTests(CleanUp, TestCase):
    def setUp(self):
        self.queue = IndexQueue()

    def tearDown(self):
        self.queue.clear()

    def testInterface(self):
        self.failUnless(IIndexQueue.providedBy(self.queue))

    def testQueueHook(self):
        class CaptainHook:
            def __init__(self):
                self.hooked = 0

            def __call__(self):
                self.hooked += 1

        hook = CaptainHook()
        queue = self.queue
        queue.setHook(hook)
        self.assertEqual(hook.hooked, 0)
        queue.index('foo')
        queue.reindex('foo')
        queue.reindex('bar')
        self.assertEqual(len(queue.getState()), 3)
        self.assertEqual(hook.hooked, 3)
        self.assertEqual(queue.process(), 2)
        self.assertEqual(hook.hooked, 3)

    def testQueueState(self):
        queue = self.queue
        queue.index('foo')
        self.assertEqual(queue.getState(), [(INDEX, 'foo', None)])
        state = queue.getState()
        queue.reindex('bar')
        self.assertEqual(queue.getState(), [(INDEX, 'foo', None),
                                            (REINDEX, 'bar', None)])
        queue.setState(state)
        self.assertEqual(queue.getState(), [(INDEX, 'foo', None)])
        self.assertEqual(queue.process(), 1)

    def testQueueProcessor(self):
        queue = self.queue
        proc = utils.MockQueueProcessor()
        provideUtility(proc, IIndexQueueProcessor)
        queue.index('foo')
        self.assertEqual(queue.process(), 1)  # also do the processing...
        self.assertEqual(queue.getState(), [])
        self.assertEqual(proc.getState(), [(INDEX, 'foo', None)])
        self.assertEqual(proc.state,
                         'started')  # the real queue won't update the state...
        queue.commit()
        self.assertEqual(proc.state, 'finished')

    def testMultipleQueueProcessors(self):
        queue = self.queue
        proc1 = utils.MockQueueProcessor()
        proc2 = utils.MockQueueProcessor()
        provideUtility(proc1, IIndexQueueProcessor, name='proc1')
        provideUtility(proc2, IIndexQueueProcessor, name='proc2')
        queue.index('foo')
        self.assertEqual(queue.process(), 1)  # also do the processing...
        self.assertEqual(queue.getState(), [])
        self.assertEqual(proc1.getState(), [(INDEX, 'foo', None)])
        self.assertEqual(proc2.getState(), [(INDEX, 'foo', None)])
        self.assertEqual(proc1.state, 'started')  # the real queue won't...
        self.assertEqual(proc2.state, 'started')  # update the state...
        queue.commit()
        self.assertEqual(proc1.state, 'finished')
        self.assertEqual(proc2.state, 'finished')

    def testQueueOperations(self):
        queue = self.queue
        proc = utils.MockQueueProcessor()
        provideUtility(proc, IIndexQueueProcessor)
        queue.index('foo')
        queue.reindex('foo')
        self.assertEqual(queue.process(), 1)
        self.assertEqual(queue.getState(), [])
        self.assertEqual(proc.getState(), [(INDEX, 'foo', None)])
        # the real queue won't update the state
        self.assertEqual(proc.state, 'started')
        queue.commit()
        self.assertEqual(proc.state, 'finished')

    def testQueueOptimization(self):
        queue = self.queue
        queue.index('foo')
        queue.reindex('foo')
        queue.unindex('foo')
        queue.index('foo', 'bar')
        queue.optimize()
        self.assertEqual(queue.getState(), [(INDEX, 'foo', None)])

    def testCustomQueueOptimization(self):
        def optimize(self):
            self.setState(
                [op for op in self.getState() if not op[0] == UNINDEX])

        queue = self.queue
        queue.index('foo')
        queue.reindex('foo')
        queue.unindex('foo')
        queue.index('foo', 'bar')
        queue.optimize()
        self.assertEqual(queue.getState(), [(INDEX, 'foo', None)])
        queue.clear()
        # hook up the custom optimize
        orig_optimize = queue.optimize
        try:
            queue.optimize = optimize
            queue.index('foo')
            queue.reindex('foo')
            queue.unindex('foo')
            queue.index('foo', 'bar')
            queue.optimize(queue)
            self.assertEqual(queue.getState(), [(INDEX, 'foo', None),
                                                (REINDEX, 'foo', None),
                                                (INDEX, 'foo', 'bar')])
        finally:
            queue.optimize = orig_optimize

    def testQueueAbortBeforeProcessing(self):
        queue = self.queue
        proc = utils.MockQueueProcessor()
        provideUtility(proc, IIndexQueueProcessor)
        queue.index('foo')
        queue.reindex('foo')
        self.assertNotEqual(queue.getState(), [])
        queue.abort()
        self.assertEqual(queue.process(), 0)  # nothing left...
        self.assertEqual(queue.getState(), [])
        self.assertEqual(proc.getState(), [])
        self.assertEqual(proc.state, 'aborted')

    def testQueueAbortAfterProcessing(self):
        queue = self.queue
        proc = utils.MockQueueProcessor()
        provideUtility(proc, IIndexQueueProcessor)
        queue.index('foo')
        queue.reindex('foo')
        self.assertEqual(queue.process(), 1)
        self.assertNotEqual(proc.getState(), [])
        queue.abort()
        self.assertEqual(queue.getState(), [])
        self.assertEqual(proc.getState(), [])
        self.assertEqual(proc.state, 'aborted')

    def testOptimizeQueue(self):
        queue = self.queue
        queue.setState([(REINDEX, 'A', None), (REINDEX, 'A', None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(REINDEX, 'A', None)])

        queue.setState([(INDEX, 'A', None), (REINDEX, 'A', None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(INDEX, 'A', None)])

        queue.setState([(INDEX, 'A', None), (UNINDEX, 'A', None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [])

        queue.setState([(UNINDEX, 'A', None), (INDEX, 'A', None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(REINDEX, 'A', None)])

    def testOptimizeQueueWithAttributes(self):
        queue = self.queue

        queue.setState([(REINDEX, 'A', None), (REINDEX, 'A', ('a', 'b'))])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(REINDEX, 'A', None)])

        queue.setState([(REINDEX, 'A', ('a', 'b')), (REINDEX, 'A', None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(REINDEX, 'A', None)])

        queue.setState([(REINDEX, 'A', ('a', 'b')),
                        (REINDEX, 'A', ('b', 'c'))])
        queue.optimize()
        self.failUnlessEqual(queue.getState(),
                             [(REINDEX, 'A', ('a', 'c', 'b'))])

        queue.setState([(INDEX, 'A', None), (REINDEX, 'A', None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(INDEX, 'A', None)])

        queue.setState([(REINDEX, 'A', ('a', 'b')), (UNINDEX, 'A', None),
                        (INDEX, 'A', None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(REINDEX, 'A', None)])

    def testOptimizeQueueSortsByOpcode(self):
        queue = self.queue

        queue.setState([(INDEX, 'C', None), (UNINDEX, 'B', None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(UNINDEX, 'B', None),
                                                (INDEX, 'C', None)])

        queue.setState([(REINDEX, 'A', None), (UNINDEX, 'B', None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(UNINDEX, 'B', None),
                                                (REINDEX, 'A', None)])

        queue.setState([(REINDEX, 'A', None), (UNINDEX, 'B', None),
                        (INDEX, 'C', None)])
        queue.optimize()
        self.failUnlessEqual(queue.getState(), [(UNINDEX, 'B', None),
                                                (REINDEX, 'A', None),
                                                (INDEX, 'C', None)])