/tests/test_session.py

https://github.com/siddhantgoel/tornado-sqlalchemy · Python · 59 lines · 39 code · 20 blank · 0 comment · 8 complexity · 232d0535a8f07184c25a00b2475200d4 MD5 · raw file

  1. import os
  2. from unittest import mock
  3. from tornado.testing import AsyncTestCase, gen_test
  4. from tornado_sqlalchemy import as_future, set_max_workers
  5. from ._common import db, User, mysql_url
  6. set_max_workers(10)
  7. os.environ['ASYNC_TEST_TIMEOUT'] = '100'
  8. class ConcurrencyTestCase(AsyncTestCase):
  9. session_count = 10
  10. def __init__(self, *args, **kwargs):
  11. super().__init__(*args, **kwargs)
  12. db.configure(url=mysql_url)
  13. self.application = mock.Mock()
  14. self.application.settings = {'db': db}
  15. def setUp(self) -> None:
  16. super().setUp()
  17. db.create_all()
  18. def tearDown(self) -> None:
  19. db.drop_all()
  20. super().tearDown()
  21. @gen_test
  22. def test_concurrent_requests_using_yield(self):
  23. sessions = [db.sessionmaker() for _ in range(self.session_count)]
  24. for index, session in enumerate(sessions):
  25. session.add(User('User #{}'.format(index)))
  26. session.commit()
  27. yield [as_future(session.query(User).count) for session in sessions]
  28. for session in sessions:
  29. session.close()
  30. @gen_test
  31. async def test_concurrent_requests_using_async(self):
  32. sessions = [db.sessionmaker() for _ in range(self.session_count)]
  33. for index, session in enumerate(sessions):
  34. session.add(User('User #{}'.format(index)))
  35. session.commit()
  36. for session in sessions:
  37. await as_future(session.query(User).count)
  38. for session in sessions:
  39. session.close()