summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2014-11-21 22:29:37 +0100
committerVictor Stinner <victor.stinner@gmail.com>2014-11-21 22:29:37 +0100
commit88bf0d65af930b9a5bd650aa397d2d3adcc91952 (patch)
tree3eae5504b96cbcbc8e4949049867d5f416569ef9 /tests
parentd8d4824afac4e79ed4326f237f0768c1debfcbd0 (diff)
downloadaioeventlet-88bf0d65af930b9a5bd650aa397d2d3adcc91952.tar.gz
wrap_greenthread() now raises an exception if the greenthread is running
or already finished.
Diffstat (limited to 'tests')
-rw-r--r--tests/test_eventlet.py65
1 files changed, 44 insertions, 21 deletions
diff --git a/tests/test_eventlet.py b/tests/test_eventlet.py
index 07dde9d..80b3080 100644
--- a/tests/test_eventlet.py
+++ b/tests/test_eventlet.py
@@ -1,5 +1,6 @@
import aiogreen
import eventlet
+import sys
import tests
from tests import unittest
@@ -169,6 +170,21 @@ class EventletTests(tests.TestCase):
self.loop.run_forever()
self.assertEqual(result, [1, 10, 2, 20, 'error', 4])
+ def test_set_debug(self):
+ hub = eventlet.hubs.get_hub()
+ self.assertIs(self.loop._hub, hub)
+
+ self.loop.set_debug(False)
+ self.assertEqual(hub.debug_exceptions, False)
+ self.assertEqual(hub.debug_blocking, False)
+
+ self.loop.set_debug(True)
+ self.assertEqual(hub.debug_exceptions, True)
+ if sys.platform != 'win32':
+ self.assertEqual(hub.debug_blocking, True)
+ else:
+ self.assertEqual(hub.debug_blocking, False)
+
class WrapGreenthreadTests(tests.TestCase):
def test_wrap_greenthread(self):
@@ -181,31 +197,29 @@ class WrapGreenthreadTests(tests.TestCase):
result = self.loop.run_until_complete(fut)
self.assertEqual(result, 'ok')
- def test_wrap_greenthread_running(self):
- event = eventlet.event.Event()
+ def test_wrap_greenthread_exc(self):
+ self.loop.set_debug(True)
def func():
- return aiogreen.wrap_greenthread(gt)
+ raise ValueError(7)
- self.loop.set_debug(False)
- gt = eventlet.spawn(func)
- fut1 = aiogreen.wrap_greenthread(gt)
- fut2 = self.loop.run_until_complete(fut1)
- fut3 = self.loop.run_until_complete(fut2)
- self.assertIs(fut3, fut2)
+ # FIXME: the unit test must fail!?
+ with tests.mock.patch('traceback.print_exception') as print_exception:
+ gt = eventlet.spawn(func)
+ fut = aiogreen.wrap_greenthread(gt)
+ self.assertRaises(ValueError, self.loop.run_until_complete, fut)
+
+ # the exception must not be logger by traceback: the caller must
+ # consume the exception from the future object
+ self.assertFalse(print_exception.called)
- @tests.mock.patch('aiogreen.logger')
- def test_wrap_greenthread_running_log(self, m_log):
+ def test_wrap_greenthread_running(self):
def func():
return aiogreen.wrap_greenthread(gt)
- self.loop.set_debug(True)
+ self.loop.set_debug(False)
gt = eventlet.spawn(func)
- fut1 = aiogreen.wrap_greenthread(gt)
- fut2 = self.loop.run_until_complete(fut1)
- m_log.warning.assert_called_with("wrap_greenthread() called on "
- "a running greenthread")
-
+ self.assertRaises(RuntimeError, gt.wait)
def test_wrap_greenthread_dead(self):
def func():
@@ -215,9 +229,7 @@ class WrapGreenthreadTests(tests.TestCase):
result = gt.wait()
self.assertEqual(result, 'ok')
- fut = aiogreen.wrap_greenthread(gt)
- result = self.loop.run_until_complete(fut)
- self.assertEqual(result, 'ok')
+ self.assertRaises(RuntimeError, aiogreen.wrap_greenthread, gt)
def test_coro_wrap_greenthread(self):
result = self.loop.run_until_complete(coro_wrap_greenthread())
@@ -241,11 +253,22 @@ class WrapGreenletTests(tests.TestCase):
def func():
eventlet.sleep(0.010)
return "ok"
+
gt = eventlet.spawn_n(func)
fut = aiogreen.wrap_greenthread(gt)
result = self.loop.run_until_complete(fut)
self.assertEqual(result, "ok")
+ def test_wrap_greenlet_exc(self):
+ self.loop.set_debug(True)
+
+ def func():
+ raise ValueError(7)
+
+ gt = eventlet.spawn_n(func)
+ fut = aiogreen.wrap_greenthread(gt)
+ self.assertRaises(ValueError, self.loop.run_until_complete, fut)
+
def test_wrap_greenlet_running(self):
event = eventlet.event.Event()
@@ -265,9 +288,9 @@ class WrapGreenletTests(tests.TestCase):
event = eventlet.event.Event()
def func():
event.send('done')
+
gt = eventlet.spawn_n(func)
event.wait()
-
self.assertRaises(RuntimeError, aiogreen.wrap_greenthread, gt)