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))
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))
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))
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))
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))
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))
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))
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))