diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2014-11-19 21:53:55 +0100 |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2014-11-19 21:53:55 +0100 |
commit | 84aa02de218dddc114c7ade8e957c6a771444f90 (patch) | |
tree | 4862a31903113df928043e49ab1c091a40d2a6c7 /tests | |
parent | bb77f512f86d104fb3a7ff30d5737e099a37397b (diff) | |
download | aioeventlet-84aa02de218dddc114c7ade8e957c6a771444f90.tar.gz |
Convert more manual tests to unit tests
Diffstat (limited to 'tests')
-rw-r--r-- | tests/__init__.py | 11 | ||||
-rw-r--r-- | tests/test_callback.py | 34 | ||||
-rw-r--r-- | tests/test_coroutine.py | 27 | ||||
-rw-r--r-- | tests/test_thread.py | 55 | ||||
-rw-r--r-- | tests/test_timer.py | 43 |
5 files changed, 169 insertions, 1 deletions
diff --git a/tests/__init__.py b/tests/__init__.py index d5565cd..757e47d 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,7 +1,16 @@ import aiogreen import unittest +try: + import asyncio +except ImportError: + import trollius as asyncio class TestCase(unittest.TestCase): def setUp(self): - self.loop = aiogreen.EventLoop() + policy = aiogreen.EventLoopPolicy() + asyncio.set_event_loop_policy(policy) + self.addCleanup(asyncio.set_event_loop_policy, None) + + self.loop = policy.get_event_loop() self.addCleanup(self.loop.close) + self.addCleanup(asyncio.set_event_loop, None) diff --git a/tests/test_callback.py b/tests/test_callback.py new file mode 100644 index 0000000..987960b --- /dev/null +++ b/tests/test_callback.py @@ -0,0 +1,34 @@ +import eventlet +import tests + +class CallbackTests(tests.TestCase): + def test_hello_world(self): + result = [] + + def hello_world(loop): + result.append('Hello World') + loop.stop() + + self.loop.call_soon(hello_world, self.loop) + self.loop.run_forever() + self.assertEqual(result, ['Hello World']) + + def test_soon_stop_soon(self): + result = [] + + def hello(): + result.append("Hello") + + def world(): + result.append("World") + self.loop.stop() + + self.loop.call_soon(hello) + self.loop.call_soon(self.loop.stop) + self.loop.call_soon(world) + self.loop.run_forever() + + self.assertEqual(result, ["Hello"]) + + self.loop.run_forever() + self.assertEqual(result, ["Hello", "World"]) diff --git a/tests/test_coroutine.py b/tests/test_coroutine.py new file mode 100644 index 0000000..3dbe5db --- /dev/null +++ b/tests/test_coroutine.py @@ -0,0 +1,27 @@ +import tests + +try: + import asyncio + + exec('''if 1: + def hello_world(result, delay): + result.append("Hello") + # retrieve the event loop from the policy + yield from asyncio.sleep(delay) + result.append('World') + ''') +except ImportError: + import trollius as asyncio + from trollius import From + + def hello_world(result, delay): + result.append("Hello") + # retrieve the event loop from the policy + yield From(asyncio.sleep(delay)) + result.append('World') + +class CallbackTests(tests.TestCase): + def test_hello_world(self): + result = [] + self.loop.run_until_complete(hello_world(result, 0.001)) + self.assertEqual(result, ['Hello', 'World']) diff --git a/tests/test_thread.py b/tests/test_thread.py new file mode 100644 index 0000000..1f5c0e7 --- /dev/null +++ b/tests/test_thread.py @@ -0,0 +1,55 @@ +import aiogreen +import eventlet +import tests +threading = eventlet.patcher.original('threading') +time = eventlet.patcher.original('time') +try: + import asyncio +except ImportError: + import trollius as asyncio + +try: + get_ident = threading.get_ident # Python 3 +except AttributeError: + get_ident = threading._get_ident # Python 2 + +class ThreadTests(tests.TestCase): + def test_ident(self): + result = {'ident': None} + + def work(): + result['ident'] = get_ident() + + fut = self.loop.run_in_executor(None, work) + self.loop.run_until_complete(fut) + + # ensure that work() was executed in a different thread + work_ident = result['ident'] + self.assertIsNotNone(work_ident) + self.assertNotEqual(work_ident, get_ident()) + + def test_run_twice(self): + result = [] + + def work(): + result.append("run") + + fut = self.loop.run_in_executor(None, work) + self.loop.run_until_complete(fut) + self.assertEqual(result, ["run"]) + + # ensure that run_in_executor() can be called twice + fut = self.loop.run_in_executor(None, work) + self.loop.run_until_complete(fut) + self.assertEqual(result, ["run", "run"]) + + def test_policy(self): + result = {'loop': 42} # sentinel, different than None + + def work(): + result['loop'] = asyncio.get_event_loop() + + # get_event_loop() must return None in a different thread + fut = self.loop.run_in_executor(None, work) + self.loop.run_until_complete(fut) + self.assertIsNone(result['loop']) diff --git a/tests/test_timer.py b/tests/test_timer.py new file mode 100644 index 0000000..17fdd8e --- /dev/null +++ b/tests/test_timer.py @@ -0,0 +1,43 @@ +import datetime +import eventlet +import tests + +class TimerTests(tests.TestCase): + def test_display_date(self): + result = [] + delay = 0.050 + count = 3 + + def display_date(end_time, loop): + result.append(datetime.datetime.now()) + if (loop.time() + delay) < end_time: + loop.call_later(delay, display_date, end_time, loop) + else: + loop.stop() + + end_time = self.loop.time() + delay * count + self.loop.call_soon(display_date, end_time, self.loop) + self.loop.run_forever() + + self.assertEqual(len(result), count, result) + + def test_later_stop_later(self): + result = [] + + def hello(): + result.append("Hello") + + def world(loop): + result.append("World") + loop.stop() + + self.loop.call_later(0.010, hello) + self.loop.call_later(0.020, self.loop.stop) + self.loop.call_later(0.030, world, self.loop) + self.loop.run_forever() + + eventlet.sleep(0.050) + self.assertEqual(result, ["Hello"]) + + self.loop.run_forever() + self.assertEqual(result, ["Hello", "World"]) |