123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- # coding: utf-8
- # Import Python Libs
- from __future__ import absolute_import, print_function, unicode_literals
- # Import 3rd-party libs
- import salt.ext.tornado.testing
- import salt.ext.tornado.gen
- from salt.ext.tornado.testing import AsyncTestCase
- import salt.utils.asynchronous as asynchronous
- class HelperA(object):
- def __init__(self, io_loop=None):
- pass
- @salt.ext.tornado.gen.coroutine
- def sleep(self):
- yield salt.ext.tornado.gen.sleep(0.5)
- raise salt.ext.tornado.gen.Return(True)
- class HelperB(object):
- def __init__(self, a=None, io_loop=None):
- if a is None:
- a = asynchronous.SyncWrapper(HelperA)
- self.a = a
- @salt.ext.tornado.gen.coroutine
- def sleep(self):
- yield salt.ext.tornado.gen.sleep(0.5)
- self.a.sleep()
- raise salt.ext.tornado.gen.Return(False)
- class TestSyncWrapper(AsyncTestCase):
- @salt.ext.tornado.testing.gen_test
- def test_helpers(self):
- '''
- Test that the helper classes do what we expect within a regular asynchronous env
- '''
- ha = HelperA()
- ret = yield ha.sleep()
- self.assertTrue(ret)
- hb = HelperB()
- ret = yield hb.sleep()
- self.assertFalse(ret)
- def test_basic_wrap(self):
- '''
- Test that we can wrap an asynchronous caller.
- '''
- sync = asynchronous.SyncWrapper(HelperA)
- ret = sync.sleep()
- self.assertTrue(ret)
- def test_double(self):
- '''
- Test when the asynchronous wrapper object itself creates a wrap of another thing
- This works fine since the second wrap is based on the first's IOLoop so we
- don't have to worry about complex start/stop mechanics
- '''
- sync = asynchronous.SyncWrapper(HelperB)
- ret = sync.sleep()
- self.assertFalse(ret)
- def test_double_sameloop(self):
- '''
- Test asynchronous wrappers initiated from the same IOLoop, to ensure that
- we don't wire up both to the same IOLoop (since it causes MANY problems).
- '''
- a = asynchronous.SyncWrapper(HelperA)
- sync = asynchronous.SyncWrapper(HelperB, (a,))
- ret = sync.sleep()
- self.assertFalse(ret)
|