aiohttp
aiohttp copied to clipboard
Error using aiohttp server in pytest
🐞 Describe the bug
Running this test with PyPy3 it gets stuck, with CPython>=3.6 it works ok, doing Ctrl-C while stuck it shows this error
/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib-python/3/selectors.py:468: KeyboardInterrupt
(to show a full traceback on KeyboardInterrupt use --full-trace)
Traceback (most recent call last):
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/bin/pytest", line 8, in <module>
sys.exit(console_main())
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/config/__init__.py", line 185, in console_main
code = main()
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/config/__init__.py", line 163, in main
config=config
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/hooks.py", line 286, in __call__
return self._hookexec(self, self.get_hookimpls(), kwargs)
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/manager.py", line 93, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/manager.py", line 87, in <lambda>
firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/callers.py", line 208, in _multicall
return outcome.get_result()
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/callers.py", line 80, in get_result
raise ex[1].with_traceback(ex[2])
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/callers.py", line 187, in _multicall
res = hook_impl.function(*args)
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/main.py", line 316, in pytest_cmdline_main
return wrap_session(config, _main)
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/main.py", line 305, in wrap_session
session=session, exitstatus=session.exitstatus
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/hooks.py", line 286, in __call__
return self._hookexec(self, self.get_hookimpls(), kwargs)
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/manager.py", line 93, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/manager.py", line 87, in <lambda>
firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/callers.py", line 203, in _multicall
gen.send(outcome)
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/terminal.py", line 803, in pytest_sessionfinish
outcome.get_result()
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/callers.py", line 80, in get_result
raise ex[1].with_traceback(ex[2])
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/callers.py", line 187, in _multicall
res = hook_impl.function(*args)
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/runner.py", line 103, in pytest_sessionfinish
session._setupstate.teardown_all()
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/runner.py", line 412, in teardown_all
self._pop_and_teardown()
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/runner.py", line 387, in _pop_and_teardown
self._teardown_with_finalization(colitem)
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/runner.py", line 405, in _teardown_with_finalization
self._callfinalizers(colitem)
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/runner.py", line 402, in _callfinalizers
raise exc
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/runner.py", line 395, in _callfinalizers
fin()
File "/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib_pypy/_functools.py", line 80, in __call__
return self._func(*(self._args + fargs), **fkeywords)
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/fixtures.py", line 1034, in finish
raise exc
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/fixtures.py", line 1027, in finish
func()
File "/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib_pypy/_functools.py", line 80, in __call__
return self._func(*(self._args + fargs), **fkeywords)
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/fixtures.py", line 941, in _teardown_yield_fixture
next(it)
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/aiohttp/pytest_plugin.py", line 285, in aiohttp_server
loop.run_until_complete(finalize())
File "/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib-python/3/asyncio/base_events.py", line 587, in run_until_complete
return future.result()
File "/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib-python/3/asyncio/futures.py", line 181, in result
raise self._exception
File "/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib-python/3/asyncio/tasks.py", line 251, in __step
result = coro.throw(exc)
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/aiohttp/pytest_plugin.py", line 283, in finalize
await servers.pop().close()
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/aiohttp/test_utils.py", line 171, in close
await self.runner.cleanup()
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/aiohttp/web_runner.py", line 293, in cleanup
await site.stop()
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/aiohttp/web_runner.py", line 78, in stop
await self._runner.server.shutdown(self._shutdown_timeout)
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/aiohttp/web_server.py", line 58, in shutdown
await asyncio.gather(*coros)
File "/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib-python/3/asyncio/futures.py", line 263, in __await__
yield self # This tells Task to wait for completion.
File "/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib-python/3/asyncio/tasks.py", line 318, in __wakeup
future.result()
File "/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib-python/3/asyncio/futures.py", line 181, in result
raise self._exception
File "/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib-python/3/asyncio/tasks.py", line 249, in __step
result = coro.send(None)
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/aiohttp/web_protocol.py", line 231, in shutdown
with CeilTimeout(timeout, loop=self._loop):
File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/aiohttp/helpers.py", line 673, in __enter__
"Timeout context manager should be used inside a task"
RuntimeError: Timeout context manager should be used inside a task
💡 To Reproduce
You could run py.test in aiosonic repo, with a pypy3 venv, eg: pip install -e ".[test]" && pytest
💡 Expected behavior Not to get stuck
📋 Your version of the Python
$ python --version
Python 3.7.9 (7e6e2bb30ac5, Nov 18 2020, 10:55:52)
[PyPy 7.3.3-beta0 with GCC 7.3.1 20180303 (Red Hat 7.3.1-5)]
📋 Your version of the aiohttp distributions
$ python -m pip show aiohttp
Name: aiohttp
Version: 3.7.3
Summary: Async http client/server framework (asyncio)
Home-page: https://github.com/aio-libs/aiohttp
Author: Nikolay Kim
Author-email: [email protected]
License: Apache 2
Location: /home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages
Requires: attrs, chardet, multidict, async-timeout, yarl, typing-extensions
Required-by: pytest-aiohttp
📋 Additional context server
@sonic182 could you come up with a small reproducer using only aiohttp?