Add tests and fixes

This commit is contained in:
Roman Mogylatov 2020-11-18 15:09:19 -05:00
parent 1aadb1a3cb
commit 68732385d9
3 changed files with 1539 additions and 1424 deletions

File diff suppressed because it is too large Load Diff

View File

@ -2699,13 +2699,16 @@ cdef class Resource(Provider):
if self.__shutdowner:
try:
if iscoroutinefunction(self.__shutdowner):
loop = asyncio.get_event_loop()
loop.run_until_complete(self.__shutdowner(self.__resource))
else:
self.__shutdowner(self.__resource)
shutdown = self.__shutdowner(self.__resource)
except StopIteration:
pass
else:
if inspect.isawaitable(shutdown):
loop = asyncio.get_event_loop()
try:
loop.run_until_complete(shutdown)
except StopAsyncIteration:
pass
self.__resource = None
self.__initialized = False

View File

@ -352,26 +352,31 @@ class AsyncResourceTests(AsyncTestCase):
self.assertEqual(_init.counter, 1)
def test_async_init_function(self):
resource = object()
async def _init():
_init.counter += 1
return resource
_init.counter = 0
provider = providers.Resource(_init)
result1 = provider()
self.assertIsNone(result1)
self.assertIs(result1, resource)
self.assertEqual(_init.counter, 1)
result2 = provider()
self.assertIsNone(result2)
self.assertIs(result2, resource)
self.assertEqual(_init.counter, 1)
provider.shutdown()
def test_async_init_generator(self):
resource = object()
async def _init():
_init.init_counter += 1
yield
yield resource
_init.shutdown_counter += 1
_init.init_counter = 0
@ -380,7 +385,7 @@ class AsyncResourceTests(AsyncTestCase):
provider = providers.Resource(_init)
result1 = provider()
self.assertIsNone(result1)
self.assertIs(result1, resource)
self.assertEqual(_init.init_counter, 1)
self.assertEqual(_init.shutdown_counter, 0)
@ -389,7 +394,7 @@ class AsyncResourceTests(AsyncTestCase):
self.assertEqual(_init.shutdown_counter, 1)
result2 = provider()
self.assertIsNone(result2)
self.assertIs(result2, resource)
self.assertEqual(_init.init_counter, 2)
self.assertEqual(_init.shutdown_counter, 1)
@ -397,67 +402,33 @@ class AsyncResourceTests(AsyncTestCase):
self.assertEqual(_init.init_counter, 2)
self.assertEqual(_init.shutdown_counter, 2)
# def test_init_class(self):
# class TestResource(resources.Resource):
# init_counter = 0
# shutdown_counter = 0
#
# def init(self):
# self.__class__.init_counter += 1
#
# def shutdown(self, _):
# self.__class__.shutdown_counter += 1
#
# provider = providers.Resource(TestResource)
#
# result1 = provider()
# self.assertIsNone(result1)
# self.assertEqual(TestResource.init_counter, 1)
# self.assertEqual(TestResource.shutdown_counter, 0)
#
# provider.shutdown()
# self.assertEqual(TestResource.init_counter, 1)
# self.assertEqual(TestResource.shutdown_counter, 1)
#
# result2 = provider()
# self.assertIsNone(result2)
# self.assertEqual(TestResource.init_counter, 2)
# self.assertEqual(TestResource.shutdown_counter, 1)
#
# provider.shutdown()
# self.assertEqual(TestResource.init_counter, 2)
# self.assertEqual(TestResource.shutdown_counter, 2)
#
# def test_init_not_callable(self):
# provider = providers.Resource(1)
# with self.assertRaises(errors.Error):
# provider.init()
#
# def test_init_and_shutdown(self):
# def _init():
# _init.init_counter += 1
# yield
# _init.shutdown_counter += 1
#
# _init.init_counter = 0
# _init.shutdown_counter = 0
#
# provider = providers.Resource(_init)
#
# result1 = provider.init()
# self.assertIsNone(result1)
# self.assertEqual(_init.init_counter, 1)
# self.assertEqual(_init.shutdown_counter, 0)
#
# provider.shutdown()
# self.assertEqual(_init.init_counter, 1)
# self.assertEqual(_init.shutdown_counter, 1)
#
# result2 = provider.init()
# self.assertIsNone(result2)
# self.assertEqual(_init.init_counter, 2)
# self.assertEqual(_init.shutdown_counter, 1)
#
# provider.shutdown()
# self.assertEqual(_init.init_counter, 2)
# self.assertEqual(_init.shutdown_counter, 2)
def test_async_init_class(self):
class TestResource(resources.AsyncResource):
init_counter = 0
shutdown_counter = 0
async def init(self):
self.__class__.init_counter += 1
async def shutdown(self, _):
self.__class__.shutdown_counter += 1
provider = providers.Resource(TestResource)
result1 = provider()
self.assertIsNone(result1)
self.assertEqual(TestResource.init_counter, 1)
self.assertEqual(TestResource.shutdown_counter, 0)
provider.shutdown()
self.assertEqual(TestResource.init_counter, 1)
self.assertEqual(TestResource.shutdown_counter, 1)
result2 = provider()
self.assertIsNone(result2)
self.assertEqual(TestResource.init_counter, 2)
self.assertEqual(TestResource.shutdown_counter, 1)
provider.shutdown()
self.assertEqual(TestResource.init_counter, 2)
self.assertEqual(TestResource.shutdown_counter, 2)