From 435e07513e0c441c4a9da264f6473b3a5fdbf1b5 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Wed, 19 Nov 2008 12:19:17 +0600 Subject: [PATCH] added test to check that kill reschedules the current greenlet --- greentest/test__api.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 greentest/test__api.py diff --git a/greentest/test__api.py b/greentest/test__api.py new file mode 100644 index 0000000..584cf2a --- /dev/null +++ b/greentest/test__api.py @@ -0,0 +1,34 @@ +import unittest +from eventlet.api import sleep, spawn, kill + +DELAY = 0.1 + +class Test(unittest.TestCase): + + def test_killing_dormant(self): + state = [] + def test(): + try: + state.append('start') + sleep(DELAY) + except: + state.append('except') + # catching GreenletExit + pass + # when switching to hub, hub makes itself the parent of this greenlet, + # thus after the function's done, the control will go to the parent + # QQQ why the first sleep is not enough? + sleep(0) + state.append('finished') + g = spawn(test) + sleep(DELAY/2) + assert state == ['start'], state + kill(g) + # will not get there, unless switching is explicitly scheduled by kill + assert state == ['start', 'except'], state + sleep(DELAY) + assert state == ['start', 'except', 'finished'], state + +if __name__=='__main__': + unittest.main() +