Esempio n. 1
0
 def testChainFutures(self):
     from chorde.clients.async import Defer, Future
     ev = threading.Event()
     ev2 = threading.Event()
     def sleepit():
         ev.wait()
         return 2
     def sleepit2():
         ev2.wait()
         return 3
     d1 = Defer(sleepit)
     d2 = Defer(sleepit2)
     d1.future = Future()
     d2.future = Future()
     self.addCleanup(ev.set)
     self.addCleanup(ev2.set)
     self.client.put(1, sleepit, 120) # Delay the pool
     self.client.put(3, d1, 120)
     self.client.put(3, d2, 120)
     self.assertTrue(self.client.contains(3))
     ev.set()
     self.assertEquals(d1.future.result(1), 2)
     self.assertEquals(d2.future.result(1), 2)
     self.assertTrue(self.client.contains(3))
     self.assertEquals(self.client.get(3), 2)
Esempio n. 2
0
 def testFutures(self):
     from chorde.clients.async import Defer, Future
     frv = Future()
     def sleepit():
         return 1
     d = Defer(sleepit)
     d.future = frv
     self.client.put(2, d, 120)
     self.assertTrue(self.client.contains(2))
     self.assertEquals(frv.result(1), 1)
     self.assertTrue(self.client.contains(2))
     self.assertEquals(self.client.get(2), 1)
     self.assertTrue(frv.done())
Esempio n. 3
0
 def testAnyOnce(self):
     from chorde.clients.async import Future
     rv = []
     def exc(exc):
         rv.append("exc")
     def value(val):
         rv.append("val")
     def miss():
         rv.append("miss")
     def badcall():
         rv.append("bad")
     f = Future()
     f.on_any_once(value,miss,exc)
     f.on_any_once(badcall,badcall,badcall)
     f.set(3)
     self.assertEquals(["val"], rv)
Esempio n. 4
0
 def testReentrantChainFutures(self):
     from chorde.clients.async import Defer, Future
     ev = threading.Event()
     ev2 = threading.Event()
     ev3 = threading.Event()
     def sleepit():
         ev3.set()
         ev.wait()
         return 2
     def sleepit2():
         return 3
     d1 = Defer(sleepit)
     d2 = Defer(sleepit2)
     d1.future = Future()
     d2.future = Future()
     self.addCleanup(ev.set)
     self.addCleanup(ev2.set)
     client = self.client
     def putit():
         # Delay reentrant call until d1 was queued
         ev2.wait()
         client.put(4, d2, 120)
         return 4
     d3 = Defer(putit)
     d3.future = Future()
     self.client.put(3, d3, 120)
     self.client.put(4, d1, 120)
     ev2.set()  # Unblock reentrant call now
     self.assertTrue(self.client.contains(3))
     self.assertEquals(d3.future.result(1), 4)
     ev3.wait(1)  # Avoid catching 4 in the blind spot between queuing and execution
     self.assertTrue(self.client.contains(4))
     ev.set()  # Unblock d1
     self.assertEquals(d1.future.result(1), 2)
     self.assertEquals(d2.future.result(1), 2)
     self.assertTrue(self.client.contains(4))
     self.assertEquals(self.client.get(4), 2)
Esempio n. 5
0
 def testStepFutures(self):
     from chorde.clients.async import Defer, Future
     ev = threading.Event()
     ev2 = threading.Event()
     def sleepit():
         ev2.set()
         ev.wait()
         return 2
     d1 = Defer(sleepit)
     d1.future = Future()
     self.addCleanup(ev.set)
     self.client.put(1, Defer(sleepit), 120)  # Delay the pool
     self.client.put(4, d1, 120)
     self.client.put(4, 7, 120)
     self.assertTrue(self.client.contains(4))
     self.assertEquals(d1.future.result(1), 7)
     self.assertTrue(self.client.contains(4))
     self.assertEquals(self.client.get(4), 7)
Esempio n. 6
0
 def testAny(self):
     from chorde.clients.async import Future
     rv = []
     def exc(exc):
         rv.append("exc")
     def value(val):
         rv.append("val")
     def miss():
         rv.append("miss")
     f = Future()
     f.on_any(value,miss,exc)
     f.exc((RuntimeError,RuntimeError(1),None))
     self.assertEquals(["exc"], rv)
Esempio n. 7
0
 def foo():
     f = Future()
     f.set(1)
     rv = yield f
     raise Return(rv)
Esempio n. 8
0
 def testTimeout(self):
     from chorde.clients.async import Future
     f = Future()
     self.assertRaises(TimeoutError, f.result, 0.1)
Esempio n. 9
0
 def testExc(self):
     from chorde.clients.async import Future
     f = Future()
     f.exc((RuntimeError,RuntimeError(1),None))
     self.assertRaises(RuntimeError, f.result, 0)
Esempio n. 10
0
 def testMiss(self):
     from chorde.clients.async import Future
     f = Future()
     f.miss()
     self.assertRaises(CacheMissError, f.result, 0)
Esempio n. 11
0
 def testPreSet(self):
     from chorde.clients.async import Future
     f = Future()
     f.set(1)
     self.assertEqual(f.result(0), 1)