def test_SingleChunk_SingleThen(self): expected = [lambda r: self.assertEqual(1, r.get()), lambda r: self.assertRaises(ChokeEvent, r.get)] check = checker(expected, self) f = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop).execute() f.then(check) self.wait() self.assertTrue(len(expected) == 0)
def test_GetMultipleChunks(self): f = ServiceMock(chunks=[1, 2, 3], T=self.T, ioLoop=self.io_loop).execute() r1 = f.get() r2 = f.get() r3 = f.get() self.assertEqual(1, r1) self.assertEqual(2, r2) self.assertEqual(3, r3)
def test_GetSingleChunkMultipleTimesAfterWaiting(self): s = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop) f1 = s.execute() f1.wait() f1.get() f2 = s.execute() f2.wait() r2 = f2.get() self.assertEqual(1, r2)
def test_GetMultipleMixChunksWithComplexChain(self): def middleMan(result): r = result.get() if r == 2: raise Exception('=(') yield r f = ServiceMock(chunks=[1, 2, 3], T=self.T, ioLoop=self.io_loop).execute() f.then(middleMan) self.assertEqual(1, f.get()) self.assertRaises(Exception, f.get) self.assertEqual(3, f.get())
def test_SingleChunk_MultipleThen_ErrorMiddleman(self): expected = [lambda r: self.assertRaises(ValueError, r.get), lambda r: self.assertRaises(ValueError, r.get)] check = checker(expected, self) def middleMan(result): raise ValueError("Middleman") f = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop).execute() f.then(middleMan).then(check) self.wait() self.assertTrue(len(expected) == 0)
def test_SingleChunk_MultipleThen_Middleman(self): expected = [lambda r: self.assertEqual(2, r.get())] check = checker(expected, self) def middleMan(result): return result.get() + 1 f = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop).execute() f.then(middleMan).then(check) self.wait(timeout=0.5) self.assertTrue(len(expected) == 0)
def test_SingleChunk_MultipleThen(self): expected = [lambda r: self.assertEqual(2, r.get()), lambda r: self.assertRaises(ChokeEvent, r.get)] check = checker(expected, self) f = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop).execute() def firstStep(futureResult): r = futureResult.get() return r * 2 f.then(firstStep).then(check) self.wait() self.assertTrue(len(expected) == 0)
def test_SingleChunk_SingleThen_YieldMiddleman(self): expected = [lambda r: self.assertEqual(3, r.get()), lambda r: self.assertRaises(ChokeEvent, r.get)] check = checker(expected, self) def middleMan(result): result.get() yield "String that won't be seen by anyone" yield 3 f = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop).execute() f.then(middleMan).then(check) self.wait() self.assertTrue(len(expected) == 0)
def test_GetMultipleChunksMultipleTimes(self): s = ServiceMock(chunks=[1, 2, 3], T=self.T, ioLoop=self.io_loop) f1 = s.execute() f1.get() f1.get() f1.get() f2 = s.execute() r21 = f2.get() r22 = f2.get() r23 = f2.get() self.assertEqual(1, r21) self.assertEqual(2, r22) self.assertEqual(3, r23)
def test_SingleChunk_MultipleChainItems_MixedProcessing2(self): expected = [lambda r: self.assertEqual(6, r.get()), lambda r: self.assertRaises(ChokeEvent, r.get)] check = checker(expected, self) def firstStep(result): yield result.get() * 3 def secondStep(result): r = result.get() return r * 2 f = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop).execute() f.then(firstStep).then(secondStep).then(check) self.wait() self.assertTrue(len(expected) == 0)
def test_SingleChunk_SingleThen_YieldAsyncDoubleMiddlemanWithLessChunks(self): expected = [lambda r: self.assertEqual([4, 5, 6], r.get()), lambda r: self.assertRaises(ChokeEvent, r.get)] check = checker(expected, self) def middleMan(result): result.get() s1 = yield ServiceMock(chunks=[4, 5], T=self.T, ioLoop=self.io_loop, interval=0.002).execute() s2 = yield s3 = yield ServiceMock(chunks=[6], T=self.T, ioLoop=self.io_loop, interval=0.001).execute() yield [s1, s2, s3] f = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop, interval=0.01).execute() f.then(middleMan).then(check) self.wait() self.assertTrue(len(expected) == 0)
def test_YieldAsyncMiddlemanExtraChunkResultsInChokeEvent(self): expected = [lambda r: self.assertRaises(ChokeEvent, r.get), lambda r: self.assertRaises(ChokeEvent, r.get)] check = checker(expected, self) def middleMan(result): result.get() s1 = yield ServiceMock(chunks=[4, 5], T=self.T, ioLoop=self.io_loop, interval=0.001).execute() s2 = yield # This one will lead to the ChokeEvent s3 = yield yield [s1, s2, s3] f = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop, interval=0.01).execute() f.then(middleMan).then(check) self.wait() self.assertTrue(len(expected) == 0)
def test_SingleChunk_MultipleChainItems_OnlyCoroutinesProcessing(self): expected = [lambda r: self.assertEqual(4, r.get()), lambda r: self.assertRaises(ChokeEvent, r.get)] check = checker(expected, self) def firstStep(result): r = result.get() yield "String that won't be seen by anyone" yield r * 2 def secondStep(result): yield result.get() * 2 f = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop).execute() f.then(firstStep).then(secondStep).then(check) self.wait() self.assertTrue(len(expected) == 0)
def test_MultipleChunk_SingleThen_YieldMiddleman(self): expected = [ lambda r: self.assertEqual(3, r.get()), lambda r: self.assertEqual(6, r.get()), lambda r: self.assertEqual(9, r.get()), lambda r: self.assertRaises(ChokeEvent, r.get), ] check = checker(expected, self) def middleMan(result): r = result.get() yield 'This string won\'t be seen by anyone' yield r * 3 f = ServiceMock(chunks=[1, 2, 3], T=self.T, ioLoop=self.io_loop).execute() f.then(middleMan).then(check) self.wait() self.assertTrue(len(expected) == 0)
def test_MultipleChunks_MultipleThen_ErrorMiddleman(self): expected = [ lambda r: self.assertEqual(2, r.get()), lambda r: self.assertRaises(ValueError, r.get), lambda r: self.assertEqual(6, r.get()), lambda r: self.assertRaises(ChokeEvent, r.get), ] check = checker(expected, self) def middleMan(result): if result.get() == 2: raise ValueError('Middleman') else: return result.get() * 2 f = ServiceMock(chunks=[1, 2, 3], T=self.T, ioLoop=self.io_loop).execute() f.then(middleMan).then(check) self.wait() self.assertTrue(len(expected) == 0)
def test_MultipleChunk_SingleThen_YieldErrorMiddleman(self): expected = [ lambda r: self.assertEqual(1, r.get()), lambda r: self.assertRaises(Exception, r.get), lambda r: self.assertEqual(3, r.get()), lambda r: self.assertRaises(ChokeEvent, r.get), ] check = checker(expected, self) def middleMan(result): r = result.get() if r == 2: raise Exception('=(') yield r f = ServiceMock(chunks=[1, 2, 3], T=self.T, ioLoop=self.io_loop).execute() f.then(middleMan).then(check) self.wait() self.assertTrue(len(expected) == 0)
def test_MultipleChunk_SingleThen_YieldAsyncMiddleman(self): expected = [ lambda r: self.assertEqual([1, 2], r.get()), lambda r: self.assertEqual([2, 3], r.get()), lambda r: self.assertEqual([3, 4], r.get()), lambda r: self.assertRaises(ChokeEvent, r.get), ] check = checker(expected, self) def middleMan(result): r = result.get() s1 = yield ServiceMock(chunks=[r, r + 1], T=self.T, ioLoop=self.io_loop, interval=0.001).execute() s2 = yield yield [s1, s2] f = ServiceMock(chunks=[1, 2, 3], T=self.T, ioLoop=self.io_loop, interval=0.01).execute() f.then(middleMan).then(check) self.wait() self.assertTrue(len(expected) == 0)
def test_WaitWithTimeout(self): f = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop, interval=0.1).execute() f.wait(0.050) self.assertTrue(len(f._pending) == 0) f.wait(0.040) self.assertTrue(len(f._pending) == 0) f.wait(0.011) self.assertFalse(len(f._pending) == 0)
def test_MultipleChunk_MultipleThen_SyncTransformation(self): expected = [ lambda r: self.assertEqual({"app": "info"}, r.get()), lambda r: self.assertRaises(ChokeEvent, r.get), ] check = checker(expected, self) def firstStep(result): r = result.get() return {"app": r} def secondStep(result): r = result.get() return r s = ServiceMock(chunks=["info"], T=self.T, ioLoop=self.io_loop).execute() s.then(firstStep).then(secondStep).then(check) self.wait() self.assertTrue(len(expected) == 0)
def middleMan(result): result.get() s1 = yield ServiceMock(chunks=[4, 5], T=self.T, ioLoop=self.io_loop, interval=0.001).execute() s2 = yield # This one will lead to the ChokeEvent s3 = yield s4 = yield yield [s1, s2, s3, s4]
def test_MultipleChunk_MultipleThen_SyncTransformation(self): expected = [ lambda r: self.assertEqual({'app': 'info'}, r.get()), lambda r: self.assertRaises(ChokeEvent, r.get), ] check = checker(expected, self) def firstStep(result): r = result.get() return {'app': r} def secondStep(result): r = result.get() return r s = ServiceMock(chunks=['info'], T=self.T, ioLoop=self.io_loop).execute() s.then(firstStep).then(secondStep).then(check) self.wait() self.assertTrue(len(expected) == 0)
def test_MultipleChunks_MultipleThen_ErrorMiddleman(self): expected = [ lambda r: self.assertEqual(2, r.get()), lambda r: self.assertRaises(ValueError, r.get), lambda r: self.assertEqual(6, r.get()), lambda r: self.assertRaises(ChokeEvent, r.get), ] check = checker(expected, self) def middleMan(result): if result.get() == 2: raise ValueError('Middleman') else: return result.get() * 2 f = ServiceMock(chunks=[1, 2, 3], T=self.T, ioLoop=self.io_loop).execute() f.then(middleMan).then(check) self.wait() self.assertTrue(len(expected) == 0)
def test_MultipleChunk_SingleThen_YieldErrorMiddleman(self): expected = [ lambda r: self.assertEqual(1, r.get()), lambda r: self.assertRaises(Exception, r.get), lambda r: self.assertEqual(3, r.get()), lambda r: self.assertRaises(ChokeEvent, r.get), ] check = checker(expected, self) def middleMan(result): r = result.get() if r == 2: raise Exception('=(') yield r f = ServiceMock(chunks=[1, 2, 3], T=self.T, ioLoop=self.io_loop).execute() f.then(middleMan).then(check) self.wait() self.assertTrue(len(expected) == 0)
def middleMan(result): result.get() s1 = yield ServiceMock(chunks=[4, Exception(), 6], T=self.T, ioLoop=self.io_loop, interval=0.001).execute() # Here exception comes s2 = yield s3 = yield print('This should not be seen!', s1, s2, s3) yield 1
def test_MultipleChunk_SingleThen_YieldAsyncErrorMiddleman(self): expected = [ lambda r: self.assertRaises(Exception, r.get), lambda r: self.assertRaises(Exception, r.get), lambda r: self.assertRaises(Exception, r.get), lambda r: self.assertRaises(ChokeEvent, r.get), ] check = checker(expected, self) def middleMan(result): result.get() s1 = yield ServiceMock(chunks=[4, Exception(), 6], T=self.T, ioLoop=self.io_loop, interval=0.001).execute() # Here exception comes s2 = yield s3 = yield print('This should not be seen!', s1, s2, s3) yield 1 f = ServiceMock(chunks=[1, 2, 3], T=self.T, ioLoop=self.io_loop).execute() f.then(middleMan).then(check) self.wait() self.assertTrue(len(expected) == 0)
def test_GetSingleChunkAfterMultipleWaiting(self): f = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop).execute() f.wait() f.wait() f.wait() r = f.get() self.assertEqual(1, r)
def test_NoChunks_Yield(self): completed = [False] @chain.source def compare(s): yield s.execute() completed[0] = True self.stop() s = ServiceMock(chunks=[], T=self.T, ioLoop=self.io_loop) compare(s) self.wait() self.assertTrue(completed[0])
def test_NoChunks_MultipleYield(self): completed = [0] @chain.source def compare(s): c = yield s.execute() try: completed[0] += 1 yield except ChokeEvent: completed[0] += 1 self.stop() s = ServiceMock(chunks=[], T=self.T, ioLoop=self.io_loop) compare(s) self.wait(timeout=0.5) self.assertEqual(completed[0], 2)
def test_GetMultipleMixChunksWithComplexChain(self): def middleMan(result): r = result.get() if r == 2: raise Exception('=(') yield r f = ServiceMock(chunks=[1, 2, 3], T=self.T, ioLoop=self.io_loop).execute() f.then(middleMan) self.assertEqual(1, f.get()) self.assertRaises(Exception, f.get) self.assertEqual(3, f.get())
def test_GetSingleErrorChunk(self): f = ServiceMock(chunks=[Exception('Oops')], T=self.T, ioLoop=self.io_loop).execute() self.assertRaises(Exception, f.get)
def test_GetMultipleChunksDeferredly(self): f1 = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop).execute() f2 = ServiceMock(chunks=[2], T=self.T, ioLoop=self.io_loop).execute() self.assertEqual(2, f2.get()) self.assertEqual(1, f1.get())
def test_PartialGenerator(self): f = ServiceMock(chunks=[1, 2, 3], T=self.T, ioLoop=self.io_loop).execute() collect = [f.get()] for r in f: collect.append(r) self.assertEqual([1, 2, 3], collect)
def test_GetSingleChunkTimeout(self): f = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop, interval=0.2).execute() self.assertRaises(TimeoutError, f.get, 0.1)
def test_MagicHasPendingResult(self): f = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop).execute() self.assertFalse(bool(f)) f.wait() self.assertTrue(bool(f))
def test_GetExtraChunksResultsInChokeEvent(self): f = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop).execute() r = f.get() self.assertEqual(1, r) self.assertRaises(ChokeEvent, f.get) self.assertRaises(ChokeEvent, f.get)
def test_GetSingleChunkAfterWaiting(self): f = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop).execute() f.wait() r = f.get() self.assertEqual(1, r)
def test_MagicHasPendingResult(self): f = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop).execute() self.assertFalse(bool(f)) f.wait() self.assertTrue(bool(f))
def test_GetExtraChunksResultsInChokeEvent(self): f = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop).execute() r = f.get() self.assertEqual(1, r) self.assertRaises(ChokeEvent, f.get) self.assertRaises(ChokeEvent, f.get)
def test_GetMultipleMixChunks(self): f = ServiceMock(chunks=[ValueError("Oops1"), 1, IOError("Oops2")], T=self.T, ioLoop=self.io_loop).execute() self.assertRaises(ValueError, f.get) self.assertEqual(1, f.get()) self.assertRaises(IOError, f.get)
def test_GetMultipleChunksDeferredly(self): f1 = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop).execute() f2 = ServiceMock(chunks=[2], T=self.T, ioLoop=self.io_loop).execute() self.assertEqual(2, f2.get()) self.assertEqual(1, f1.get())
def test_GetSingleChunkMultipleTimes(self): s = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop) s.execute().get() r2 = s.execute().get() self.assertEqual(1, r2)
def test_GetSingleChunkMultipleTimes(self): s = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop) s.execute().get() r2 = s.execute().get() self.assertEqual(1, r2)
def test_GetSingleChunk(self): f = ServiceMock(chunks=[1], T=self.T, ioLoop=self.io_loop).execute() r = f.get() self.assertEqual(1, r)
def firstStep(): r1 = yield ServiceMock(chunks=[], T=self.T, ioLoop=self.io_loop, interval=0.002).execute() yield 'Ok'