Ejemplo n.º 1
0
    def testEachBatchWillHaveItsOwnTimestamp(self):
        reactor = CallTrace("reactor")
        register = SuspendRegister(batchMode=True)
        register.signalOaiUpdate(metadataPrefixes=['prefix'],
                                 sets=set(),
                                 otherKey='ignored',
                                 stamp=1000)
        register.startOaiBatch()

        suspend = next(
            compose(
                register.suspendBeforeSelect(clientIdentifier="id0",
                                             prefix='prefix',
                                             sets=[],
                                             continueAfter='1000')))
        suspend(reactor, lambda: None)

        register.signalOaiUpdate(metadataPrefixes=['prefix'],
                                 sets=set(),
                                 otherKey='ignored',
                                 stamp=2000)
        self.assertEqual(1, len(register))
        register.stopOaiBatch()
        self.assertEqual(0, len(register))
        register.startOaiBatch()
        self.assertEqual([],
                         asList(
                             register.suspendBeforeSelect(
                                 clientIdentifier="id0",
                                 prefix='prefix',
                                 sets=[],
                                 continueAfter='1000')))
        self.assertEqual(0, len(register))
Ejemplo n.º 2
0
    def testSuspendBeforeSelectWithoutUpdates(self):
        reactor = CallTrace("reactor")
        register = SuspendRegister(batchMode=True)
        register.signalOaiUpdate(metadataPrefixes=['prefix'], sets=set(), otherKey='ignored', stamp=1000)
        register.startOaiBatch()
        resumed = []

        suspend = compose(register.suspendBeforeSelect(clientIdentifier="id0", prefix='prefix', sets=[], continueAfter='1000')).next()
        suspend(reactor, lambda: resumed.append(True))

        self.assertEquals([], resumed)
        self.assertEquals(1, len(register))
        register.stopOaiBatch()
        self.assertEquals([], resumed)
        self.assertEquals(1, len(register))
Ejemplo n.º 3
0
 def testInitialBatchSuspendAfterNoResult(self):
     reactor = CallTrace("reactor")
     register = SuspendRegister(batchMode=True)
     register.startOaiBatch()
     suspend = compose(register.suspendAfterNoResult(clientIdentifier="a-client-id", prefix='prefix', sets=[])).next()
     self.assertEquals(Suspend, type(suspend))
     resumed = []
     suspend(reactor, lambda: resumed.append(True))
     self.assertEquals([], resumed)
     register.signalOaiUpdate(metadataPrefixes=['prefix'], sets=set(), otherKey='ignored', stamp=1000)
     self.assertEquals([], resumed)
     self.assertEquals(1, len(register))
     register.stopOaiBatch()
     self.assertEquals([True], resumed)
     self.assertEquals(0, len(register))
Ejemplo n.º 4
0
    def testEachBatchWillHaveItsOwnTimestamp(self):
        reactor = CallTrace("reactor")
        register = SuspendRegister(batchMode=True)
        register.signalOaiUpdate(metadataPrefixes=['prefix'], sets=set(), otherKey='ignored', stamp=1000)
        register.startOaiBatch()

        suspend = compose(register.suspendBeforeSelect(clientIdentifier="id0", prefix='prefix', sets=[], continueAfter='1000')).next()
        suspend(reactor, lambda: None)

        register.signalOaiUpdate(metadataPrefixes=['prefix'], sets=set(), otherKey='ignored', stamp=2000)
        self.assertEquals(1, len(register))
        register.stopOaiBatch()
        self.assertEquals(0, len(register))
        register.startOaiBatch()
        self.assertEquals([], asList(register.suspendBeforeSelect(clientIdentifier="id0", prefix='prefix', sets=[], continueAfter='1000')))
        self.assertEquals(0, len(register))
Ejemplo n.º 5
0
    def testSuspendBeforeSelectWithContinueAfter(self):
        reactor = CallTrace("reactor")
        register = SuspendRegister(batchMode=True)
        register.signalOaiUpdate(metadataPrefixes=['prefix'],
                                 sets=set(),
                                 otherKey='ignored',
                                 stamp=1000)
        register.startOaiBatch()
        resumed = []

        suspend = next(
            compose(
                register.suspendBeforeSelect(clientIdentifier="id0",
                                             prefix='prefix',
                                             sets=[],
                                             continueAfter='1000')))
        suspend(reactor, lambda: resumed.append(True))
        suspend = next(
            compose(
                register.suspendBeforeSelect(clientIdentifier="id1",
                                             prefix='prefix',
                                             sets=[],
                                             continueAfter='1001')))
        suspend(reactor, lambda: resumed.append(True))
        self.assertEqual([],
                         asList(
                             register.suspendBeforeSelect(
                                 clientIdentifier="id2",
                                 prefix='prefix',
                                 sets=[],
                                 continueAfter='999')))

        self.assertEqual([], resumed)

        register.signalOaiUpdate(metadataPrefixes=['prefix'],
                                 sets=set(),
                                 otherKey='ignored',
                                 stamp=2000)
        self.assertEqual([], resumed)
        self.assertEqual(2, len(register))
        register.stopOaiBatch()
        self.assertEqual([True, True], resumed)
        self.assertEqual(0, len(register))
Ejemplo n.º 6
0
    def testResumeOnlyMatchingSuspendsInBatchMode(self):
        register = SuspendRegister(batchMode=True)
        register._setLastStamp(999)
        register.startOaiBatch()
        resumed = []

        def suspendBeforeSelect(clientIdentifier, prefix, sets, continueAfter):
            suspendObject = compose(register.suspendBeforeSelect(clientIdentifier=clientIdentifier, prefix=prefix, sets=sets, continueAfter=continueAfter)).next()
            suspendObject(CallTrace('reactor'), lambda: resumed.append(clientIdentifier))

        suspendBeforeSelect('id0', prefix='p0', sets=['s0'], continueAfter='1000')
        suspendBeforeSelect('id1', prefix='p0', sets=['s1'], continueAfter='1000')
        suspendBeforeSelect('id2', prefix='p0', sets=['s1'], continueAfter='1000')
        suspendBeforeSelect('id3', prefix='p0', sets=[], continueAfter='1000')
        suspendBeforeSelect('id4', prefix='p1', sets=['s0'], continueAfter='1000')
        suspendBeforeSelect('id5', prefix='p1', sets=[], continueAfter='1000')

        register.signalOaiUpdate(metadataPrefixes=['p0'], sets=set(), stamp=1001)
        self.assertEquals([], resumed)
        register.stopOaiBatch()
        # nobody cared about the update
        self.assertEquals(['id3'], resumed)
        del resumed[:]
        register.startOaiBatch()
        register.signalOaiUpdate(metadataPrefixes=['p0'], sets=set(['s0', 's1']), stamp=1002)
        self.assertEquals([], resumed)
        register.stopOaiBatch()
        self.assertEquals(['id0', 'id1', 'id2'], sorted(resumed))
        del resumed[:]
        register.startOaiBatch()
        register.signalOaiUpdate(metadataPrefixes=['p1'], sets=set('s42'), stamp=1001)
        register.stopOaiBatch()
        self.assertEquals(['id5'], sorted(resumed))
Ejemplo n.º 7
0
 def testInitialBatchSuspendAfterNoResult(self):
     reactor = CallTrace("reactor")
     register = SuspendRegister(batchMode=True)
     register.startOaiBatch()
     suspend = next(
         compose(
             register.suspendAfterNoResult(clientIdentifier="a-client-id",
                                           prefix='prefix',
                                           sets=[])))
     self.assertEqual(Suspend, type(suspend))
     resumed = []
     suspend(reactor, lambda: resumed.append(True))
     self.assertEqual([], resumed)
     register.signalOaiUpdate(metadataPrefixes=['prefix'],
                              sets=set(),
                              otherKey='ignored',
                              stamp=1000)
     self.assertEqual([], resumed)
     self.assertEqual(1, len(register))
     register.stopOaiBatch()
     self.assertEqual([True], resumed)
     self.assertEqual(0, len(register))
Ejemplo n.º 8
0
    def testResumeOnlyMatchingSuspendsInBatchMode(self):
        register = SuspendRegister(batchMode=True)
        register._setLastStamp(999)
        register.startOaiBatch()
        resumed = []

        def suspendBeforeSelect(clientIdentifier, prefix, sets, continueAfter):
            suspendObject = next(
                compose(
                    register.suspendBeforeSelect(
                        clientIdentifier=clientIdentifier,
                        prefix=prefix,
                        sets=sets,
                        continueAfter=continueAfter)))
            suspendObject(CallTrace('reactor'),
                          lambda: resumed.append(clientIdentifier))

        suspendBeforeSelect('id0',
                            prefix='p0',
                            sets=['s0'],
                            continueAfter='1000')
        suspendBeforeSelect('id1',
                            prefix='p0',
                            sets=['s1'],
                            continueAfter='1000')
        suspendBeforeSelect('id2',
                            prefix='p0',
                            sets=['s1'],
                            continueAfter='1000')
        suspendBeforeSelect('id3', prefix='p0', sets=[], continueAfter='1000')
        suspendBeforeSelect('id4',
                            prefix='p1',
                            sets=['s0'],
                            continueAfter='1000')
        suspendBeforeSelect('id5', prefix='p1', sets=[], continueAfter='1000')

        register.signalOaiUpdate(metadataPrefixes=['p0'],
                                 sets=set(),
                                 stamp=1001)
        self.assertEqual([], resumed)
        register.stopOaiBatch()
        # nobody cared about the update
        self.assertEqual(['id3'], resumed)
        del resumed[:]
        register.startOaiBatch()
        register.signalOaiUpdate(metadataPrefixes=['p0'],
                                 sets=set(['s0', 's1']),
                                 stamp=1002)
        self.assertEqual([], resumed)
        register.stopOaiBatch()
        self.assertEqual(['id0', 'id1', 'id2'], sorted(resumed))
        del resumed[:]
        register.startOaiBatch()
        register.signalOaiUpdate(metadataPrefixes=['p1'],
                                 sets=set('s42'),
                                 stamp=1001)
        register.stopOaiBatch()
        self.assertEqual(['id5'], sorted(resumed))